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

    Доброго времени суток.

    Сегодня я попробую рассказать об утилите разработанной для мониторинга файлов конфигураций сетевых устройств – 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, уведомления по почте при изменении конфигурации устройства и запуск скрипта по расписанию.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 3

      0
      Интересная вещь, надо будет ввести у себя в сети.
      А как у нее со свичами типа Zyxel\DLink обстоит?
      Или надо сильно напильником допиливать?
        0
        К сожалению, официально поддержки D-Link, Zyxel — нет. Поиск по форумам результата не дал.
        Вероятнее всего надо будет браться за напильник.
        Список поддерживаемых платформ/производителей:

        Alteon WebOS switches
        Bay Networks (nortel)
        Cisco catalyst switches
        Cisco content services switches
        Dell switches
        ADC-kentrox EZ-T3 mux
        Force10
        Fortinet Firewalls
        Foundry and HP procurve OEMs of Foundry
        HP Procurve Switches
        Hitachi Routers
        Juniper Networks E-series
        Juniper Networks
        MRTd
        Procket Networks
        Riverstone
        Redback
        Lucent TNT
        Netscreen firewalls
        Netscaler
        Extreme switches
        Zebra routing software
        0
        Денис, ну где же продолжение?)

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое