Как стать автором
Обновить

Мониторинг изменения файлов конфигураций сетевых устройств

Время на прочтение11 мин
Количество просмотров27K
Доброго времени суток.

Сегодня я попробую рассказать об утилите разработанной для мониторинга файлов конфигураций сетевых устройств – RANCID (Really Awesome New Cisco config Differ). RANCID – разработка американской компании Shrubbery Networks, Inc., это команда — имеющая 20 летний опыт администрирования, конфигурирования и поддержки Unix систем и сетевых устройств. Система разработана для ОС Unix, Linux и MAC OS X. Хотя в названии и упоминается компания Cisco Systems, система работает и с оборудованием других брендов, цитата с офсайта – «Rancid currently supports Cisco routers, Juniper routers, Catalyst switches, Foundry switches, Redback NASs, ADC EZT3 muxes, MRTd (and thus likely IRRd), Alteon switches, and HP Procurve switches and a host of others». Данным продуктом пользуются такие компании как AOL, Global Crossing, MFN, NTT America, Certainty Solutions Inc. Я буду рассматривать установку и настройку RANCID для хранения конфигураций маршрутизаторов Cisco.

Для начала пара слов о том как это работает.
RANCID автоматически загружает конфигурационные файлы с сетевых устройств и сравнивает их с предыдущими версиями, что позволяет вам отслеживать изменения в конфигурации и хранить историю изменения конфигураций ваших сетевых устройств. Есть возможность оповещения по электронной почте при изменении конфигурации и загрузки файлов конфигурации на устройство. Для хранения изменений конфигураций RANCID использует системы контроля версий – Subversion или CVS (Concurrent Version System).
RANCID работает по следующему алгоритму:

  1. Подключаемся к сетевому устройству (список устройств указывается в файле router.db – некая база данных используемых сетевых устройств).
  2. Выполняем команды необходимые для получения информации с устройства, которую хотим хранить.
  3. Приводим полученную информацию к необходимому виду, формату.
  4. Проверяем, изменилась ли конфигурация устройства и если он изменилась — отправляем уведомление на электронную почту, если это необходимо.
  5. И наконец, изменяем информацию в системе контроля версий.
Я рассмотрю установку и настройку на примере версии RANCID 2.3.2 (на данный момент доступна версия 2.3.3, список изменений можно посмотреть тут), устанавливать будем на Ubuntu 10.04 Server Edition LAMP, (для FreeBSD RANCID можно установить из портов).
Для упрощения допустим что у нас есть несколько маршрутизаторов в филиалах компании, за конфигурациями который нам нужно следить и хранить их с учетом всех изменений.
Итак, по порядку:

Установка


Предположим что у нас есть сервер с установленной Ubuntu Server 10.04, для установки RANCID требуется всего одна команда:

aptitude install rancid

В процессе установки система предупредит о зависимостях, и если все прошло нормально, то мы увидим следующее:

root@test:~# aptitude install rancid
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Reading extended state information
Initializing package states... Готово
The following NEW packages will be installed:
cvs{a} expect{a} libfile-copy-recursive-perl{a} rancid tcl8.5{a} update-inetd{a}
0 packages upgraded, 6 newly installed, 0 to remove and 27 not upgraded.
Need to get 3 778kB of archives. After unpacking 10,1MB will be used.
Do you want to continue? [Y/n/?] Y
Writing extended state information... Готово
Fetched 3 778kB in 2с (1 633kB/s)
Предварительная настройка пакетов ...
Выбор ранее не выбранного пакета libfile-copy-recursive-perl.
(Чтение базы данных ... на данный момент установлено 43319 файлов и каталогов.)
Распаковывается пакет libfile-copy-recursive-perl (из файла .../libfile-copy-recursive-perl_0.38-1_all.deb)...
Выбор ранее не выбранного пакета update-inetd.
Распаковывается пакет update-inetd (из файла .../update-inetd_4.35_all.deb)...
Выбор ранее не выбранного пакета cvs.
Распаковывается пакет cvs (из файла .../cvs_1%3a1.12.13-12ubuntu1_i386.deb)...
Выбор ранее не выбранного пакета tcl8.5.
Распаковывается пакет tcl8.5 (из файла .../tcl8.5_8.5.8-2_i386.deb)...
Выбор ранее не выбранного пакета expect.
Распаковывается пакет expect (из файла .../expect_5.44.1.14-5_i386.deb)...
Выбор ранее не выбранного пакета rancid.
Распаковывается пакет rancid (из файла .../rancid_2.3.2-1_i386.deb)...
Обрабатываются триггеры для man-db ...
Обрабатываются триггеры для install-info ...
Настраивается пакет libfile-copy-recursive-perl (0.38-1) ...
Настраивается пакет update-inetd (4.35) ...
Настраивается пакет cvs (1:1.12.13-12ubuntu1) ...
Ignoring install-info called from maintainer script
The package cvs should be rebuilt with new debhelper to get trigger support
Ignoring install-info called from maintainer script
The package cvs should be rebuilt with new debhelper to get trigger support
Настраивается пакет tcl8.5 (8.5.8-2) ...
update-alternatives: используется `/usr/bin/tclsh8.5' для предоставления `/usr/bin/tclsh' (tclsh) в автоматический режим.
Настраивается пакет expect (5.44.1.14-5) ...
Настраивается пакет rancid (2.3.2-1) ...
Обрабатываются триггеры для libc-bin ...
ldconfig deferred processing now taking place
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Reading extended state information
Initializing package states... Готово
Writing extended state information... Готово

Как видно из листинга, кроме самого пакета rancid установились cvs, expect и tcl. С cvs все понятно, это система контроля версий, которая используется в rancid по умолчанию. Зачем же expect и tcl?
И снова, цитата:
«Инструментальное средство Expect предназначено в первую очередь для управления интерактивными программами, которые выводят приглашение и ожидают от пользователя ввода ответа с клавиатуры, например, passwd, ftp, telnet, rlogin, su и многие другие. В обычных shell-скриптах такие программы требуют обязательного присутствия человека, вводящего ответы на их запросы. Expect же позволяет автоматизировать диалоговый режим с помощью несложных скриптов на базе языка Tcl, а кроме того, обеспечивает пошаговое управление подпроцессами: можно проверять результат каждой операции, и по результату проверки определять, какие входные данные необходимо предоставить».
Теперь когда мы установили rancid, нам понятен алгоритм его работы, нам известны средства используемые rancid — можно приступать к его настройке.

Настройка


После установки, по умолчанию, файлы будут находиться в следующих каталогах:
/var/log/rancid – директория логов;
/var/lib/rancid – директория установки RANCID (BASEDIR);
/usr/share/doc/rancid– документация и примеры конфигурационных файлов;
/etc/rancid – каталог, где хранится файл конфигурации — rancid.conf, этот файл содержит настройки переменных, таких как задержка выполнения заданий, количество попыток подключения к устройству, таймауты подключения, в нем же указываются группы устройств, параметры уведомления и пути к каталогам RANCID.
Предполагается что сетевые устройства будут сгруппированы по каким либо параметрам, например тип оборудования или его географическое расположение. Имя группы задается в параметре LIST_OF_GROUPS файла rancid.conf. Например, LIST_OF_GROUPS = “routers”.
После установки необходимо создать файл .cloginrc или отредактировать файл примера находящийся по адресу — /usr/share/doc/rancid/examples/cloginrc.sample. Данный файл помещаем в домашний каталог пользователя с правами которого будут запускаться скрипты RANCID. В целях безопасности только этому пользователю необходимо установить права чтения и записи в файл:

root@test:/root# chmod 600 .cloginrc
root@test:/root# ls -la
total 32
drwx------ 5 root root 4096 2010-06-09 12:10 .
drwxr-xr-x 22 root root 4096 2010-06-09 10:38 ..
drwx------ 2 root root 4096 2010-06-09 10:58 .aptitude
-rw-r--r-- 1 root root 3106 2010-04-23 13:45 .bashrc
-rw------- 1 root root 153 2010-06-09 12:10 .cloginrc
drwxr-xr-x 2 root root 4096 2010-06-09 10:59 .debtags
-rw-r--r-- 1 root root 140 2010-04-23 13:45 .profile
drwx------ 2 root root 4096 2010-06-09 10:51 .ssh


Это важный момент, так как RANCID не будет работать, если файл будет доступен для чтения/записи другим пользователям.
В .cloginrc можно указывать следующие параметры подключения:
add method <имя устройства, IP адрес> {telnet, ssh} – метод подключения к устройству, telnet или ssh, можно указать оба, первый в списке будет более приоритетный;
add user <имя устройства, IP адрес> {username} — имя пользователя которое будет использоваться для подключения к группе маршрутизаторов;
add password <имя устройства, IP адрес> {vtypassword} {enablepassword} – пароли для подключения, соответственно первый будет использоваться для подключения к устройству, второй для привилегированного режима;
add autoenable <имя устройства, IP адрес> {0,1} – позволяет автоматически использовать привилегированный режим после подключения.
У меня получился такой файл:

add user 10.5.51.* root
add password 10.5.51.* Rsduj%0
add user * admin
add autoenable * 1
add password * P@ssw0rd83
add method * telnet ssh


Для подключения к устройствам чей IP адрес попадает под маску 10.5.51.* будет использоваться логин – root, пароль — Rsduj%0, для всех остальных — admin, P@ssw0rd83.
Следующий этап — запуск скрипта rancid-cvs:

root@test:/var/lib/rancid/bin# ./rancid-cvs

No conflicts created by this import

cvs checkout: Updating routers
Directory /var/lib/rancid/CVS/routers/configs added to the repository
cvs commit: Examining configs
cvs add: scheduling file `router.db' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/router.db,v <-- router.db
initial revision: 1.1
root@test:/var/lib/rancid/bin#


Rancid-cvs – создает все необходимые директории и конфигурационные файлы для каждой из групп указанных в переменной LIST_OF_GROUPS файла rancid.conf и импортирует их в CVS. Этот скрипт должен запускаться каждый раз, после добавления новых изменения существующих групп устройств. Для каждой группы созается файл routers.db в котором хранится список устройств в группе, тип устройств и их состояние. Routers.db имеет следующий формат записей:
“router:mfg:state”
router – FQDN имя или ip адрес маршрутизатора;
mfg – производитель (cisco|cat5|juniper..);
state – состояние устройства (up или down), если указать down, скрипт просто проигнорирует это устройство.
Мой routers.db имеет слдующий вид:

10.5.51.17:cisco:up:"backbone"
10.5.51.25:cisco:up:"router1"
10.5.51.33:cisco:up:"router2"
10.5.52.41:cisco:up:"gateway1"
10.5.52.49:cisco:up:"gateway2"
10.5.53.57:cisco:down:"old_"
10.5.54.105:cisco:up:"851_12"
10.5.55.113:cisco:up
10.5.55.129:cisco:up


На этом настройка завершена, можно приступать к проверке и запуску скрипта. Я привел пример простейшей настройки, в файле rancid.conf есть еще множество параметров, все они содержат комментарии поэтому разобраться что к чему не составит труда.

Проверка и запуск


Проверяем доступность устройства и правильность параметров указанных в cloginrc.

root@test:/var/lib/rancid/bin# ./clogin -c "sh ver" -f /root/.cloginrc 10.5.51.17
10.5.51.17
spawn telnet 10.5.51.17
Trying 10.5.51.17...
Connected to 10.5.51.17.
Escape character is '^]'.
User Access Verification
Username: root
Password:
VPN_Balkany#
VPN_Balkany#terminal length 0
VPN_Balkany#sh ver
Cisco IOS Software, C850 Software (C850-ADVSECURITYK9-M), Version 12.4(4)T4, RELEASE SOFTWARE (fc2)
Copyright (c) 1986-2006 by Cisco Systems, Inc.
Compiled Thu 03-Aug-06 17:16 by kellythw
ROM: System Bootstrap, Version 12.3(8r)YI3, RELEASE SOFTWARE
VPN_Balkany uptime is 2 days, 23 hours, 12 minutes
System returned to ROM by power-on
System image file is "flash:c850-advsecurityk9-mz.124-4.T4.bin"
This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.
If you require further assistance please contact us by sending email to
export@cisco.com.
Cisco 851 (MPC8272) processor (revision 0x200) with 59392K/6144K bytes of memory.
Processor board ID FCZ103913RL
MPC8272 CPU Rev: Part Number 0xC, Mask Number 0x10
5 FastEthernet interfaces
128K bytes of non-volatile configuration memory.
20480K bytes of processor board System flash (Intel Strataflash)
Configuration register is 0x2102
VPN_Balkany#exit
Connection closed by foreign host.


Нам удалось подключиться к устройству и выполнить команду, значит мы все настроили правильно и можно запускать rancid-run. Этот скрипт выполнит подключение ко всем маршрутизаторам из файла routers.db для каждой группы.
После отработки rancid-run, в папке с логами появляется файл:

root@test:/var/lib/rancid/logs# ls -la
total 52
drwxr-xr-x 2 root root 4096 2010-06-09 13:51 .
drwxr-xr-x 13 root root 4096 2010-06-09 10:57 ..
-rw-r----- 1 root root 41860 2010-06-09 13:51 routers.20100609.135845


Со следующим содержимым:

starting: Срд Июн 9 13:58:45 MSD 2010

/usr/lib/rancid/bin/control_rancid: 308: sendmail: not found
cvs add: scheduling file `10.5.51.17' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.51.17,v <-- 10.5.51.17
initial revision: 1.1
Added 10.5.51.17
cvs add: scheduling file `10.5.51.25' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.51.25,v <-- 10.5.51.25
initial revision: 1.1
Added 10.5.51.25
cvs add: scheduling file `10.5.51.33' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.51.33,v <-- 10.5.51.33
initial revision: 1.1
Added 10.5.51.33
cvs add: scheduling file `10.5.52.41' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.52.41,v <-- 10.5.52.41
initial revision: 1.1
Added 10.5.52.41
cvs add: scheduling file `10.5.52.49' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.52.49,v <-- 10.5.52.49
initial revision: 1.1
Added 10.5.52.49
cvs add: scheduling file `10.5.54.105' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.54.105,v <-- 10.5.54.105
initial revision: 1.1
Added 10.5.54.105
cvs add: scheduling file `10.5.55.113' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.55.113,v <-- 10.5.55.113
initial revision: 1.1
Added 10.5.55.113
cvs add: scheduling file `10.5.55.129' for addition
cvs add: use `cvs commit' to add this file permanently
/var/lib/rancid/CVS/routers/configs/10.5.55.129,v <-- 10.5.55.129
initial revision: 1.1
Added 10.5.55.129

Trying to get all of the configs.
All routers sucessfully completed
cvs diff: Diffing .
cvs diff: Diffing configs
cvs commit: Examining .
cvs commit: Examining configs
/var/lib/rancid/CVS/routers/router.db,v <-- router.db
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.51.17,v <-- configs/10.5.51.17
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.51.25,v <-- configs/10.5.51.25
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.51.33,v <-- configs/10.5.51.33
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.52.41,v <-- configs/10.5.52.41
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.52.49,v <-- configs/10.5.52.49
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.54.105,v <-- configs/10.5.54.105
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.55.113,v <-- configs/10.5.55.113
new revision: 1.2; previous revision: 1.1
/var/lib/rancid/CVS/routers/configs/10.5.55.129,v <-- configs/10.5.55.129
new revision: 1.2; previous revision: 1.1
/usr/lib/rancid/bin/control_rancid: 487: sendmail: not found

ending: Срд Июн 9 13:59:29 MSD 2010


В файле routers.db было указано 8 маршрутизаторов в состоянии up, конфиги которых были сохранены в папке с названием группы и одно устройство было в состоянии down – к нему rancid-run не пытался подключиться. Файлы конфигураций хранятся в каталоге — /var/lib/rancid/routers/configs.
Мы убедились, что конфигурации сохраняются, теперь проверим, учитываются ли изменения в конфигурациях маршрутизаторов. Изменяем что либо в настройках маршрутизатора с адресом 10.5.51.17.

root@test:/# telnet 10.5.51.17
Trying 10.5.51.17...
Connected to 10.5.51.17.
Escape character is '^]'.

User Access Verification

Username: root
Password: .
VPN_Balkany#conf t
Enter configuration commands, one per line. End with CNTL/Z.
VPN_Balkany(config)#int fa4
VPN_Balkany(config-if)#des
VPN_Balkany(config-if)#description WAN interface
VPN_Balkany(config-if)#end
VPN_Balkany#exit
Connection closed by foreign host.


Заново запускаем rancid-run и проверяем вновь появившийся лог-файл.

root@test:/var/lib/rancid/logs# ls -la
total 16
drwxr-xr-x 2 root root 4096 2010-06-09 14:55 .
drwxr-xr-x 13 root root 4096 2010-06-09 10:57.
-rw-r----- 1 root root 3115 2010-06-09 13:59 routers.20100609.135845
-rw-r----- 1 root root 437 2010-06-09 14:55 routers.20100609.145523


Так как изменилась только конфигурация маршрутизатора 10.5.51.17, версия конфигурации увеличилась только у него:

starting: Срд Июн 9 14:55:23 MSD 2010

Trying to get all of the configs.
All routers sucessfully completed.

cvs diff: Diffing .
cvs diff: Diffing configs
cvs commit: Examining .
cvs commit: Examining configs
/var/lib/rancid/CVS/routers/configs/10.5.51.17,v <-- configs/10.5.51.17
new revision: 1.3; previous revision: 1.2
/usr/lib/rancid/bin/control_rancid: 487: sendmail: not found

ending: Срд Июн 9 14:55:58 MSD 2010


Мы добились поставленных целей, сохранили конфигурационные файлы и убедились, что изменения в конфигурации устройства отображаются в CVS. Может быть на первый взгляд все кажется сложным, запутанным и не логичным, но на самом деле все просто. Установка выполняется одной командой, настройка сводится к созданию и редактированию нескольких файлов.
Впереди — настрока вэб интерфейса к CVS – cvsweb, уведомления по почте при изменении конфигурации устройства и запуск скрипта по расписанию.
Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург