Поиск по сайту

    Мои услуги на Kwork

Автоматический сбор конфигов с Cisco по SNMP

Когда Вы работаете с оборудованием Cisco (в моем случае коммутаторы catalist 3500 серии), и часто меняете настройки – есть необходимость в периодическом сохранении конфигов на стороннем сервере для возможности “отката” настроек или т.п. Но если у Вас не один, и не два таких коммутатора, а скажем, сотня или две сотни? Да, руками “сливать” конфиги будет очень нудно и долго. Поэтому сейчас распишу вариант как можно за  десяток секунд получить конфиги со всех управляемых свичей сразу, с помощью скрипта на BASH.

1. И так, в первую очередь нам понадобится сервер TFTP. Я поднимал на Mikrotik. Полную настройку роутера я опущу, оставлю только как непосредственно включить tftp

/ip tftp add ip-addresses=10.20.30.60 read-only=no real-filename=/disk1/

2. Линуксовый сервер, с установленными пакетами SNMP, на котором будет запущен скрипт

net-snmp.i686                          1:5.7.2-23.fc21                 
net-snmp-agent-libs.i686               1:5.7.2-23.fc21                 
net-snmp-utils.i686                    1:5.7.2-23.fc21   

3. Разрешить на Cisco как минимум режим записи по snmp, указав уникальный пароль (community)

snmp-server community blablabla RW

Проверить можно, запустив команду опроса коммутатора по snmp:

[disnetern@monitoring]# snmpwalk -v 2c -c blablabla 10.20.31.2

4. Ниже приведен последовательный список команд snmp для выполнения скрипта

snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.2.[Random number] i 1
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.3.[Random number] i 4
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.4.[Random number] i 1
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.5.[Random number] a [ip-tftp-server]
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.6.[Random number] s [file-name]
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.14.[Random number] i 1

где:

  • snmp-community-string – пароль на RW в циске.
  • ip-device – ip-адрес коммутатора.
  • ip-tftp-server – ip нашего tftp сервера
  • file-name – имя файла конфигурации

Рассмотрим каждую строчку по отдельности:

1.3.6.1.4.1.9.9.96.1.1.1.1.2.432 i 1

ccCopyProtocol: Протокол передачи файлов, который должен быть использован, чтобы скопировать файл конфигурации по сети. (в данном случае выбран TFTP):

  • tftp
  • ftp
  • rcp
  • scp
  • sftp

 

1.3.6.1.4.1.9.9.96.1.1.1.1.3.432 i 4

ccCopySourceFileType: Определяет тип файла для копирования:

  • networkFile
  • iosFile
  • startupConfig
  • runningConfig
  • terminal
  • fabricStartupConfig

 

1.3.6.1.4.1.9.9.96.1.1.1.1.4.432 i 1

ccCopyDestFileType: Указывает тип файла для копирования:

  • networkFile
  • iosFile
  • startupConfig
  • runningConfig
  • terminal
  • fabricStartupConfig

 

1.3.6.1.4.1.9.9.96.1.1.1.1.5.432 a 10.20.30.60

ccCopyServerAddress: IP-адрес сервера TFTP, чтобы скопировать файл конфигурации. В этом случае сервер TFTP является 10.20.30.60

 

snmpset -c c1sc0zine -v 2c 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.6.432 s cisco_data.cfg

ccCopyFileName: Имя файла (включая путь, если это применимо) файла.

 

1.3.6.1.4.1.9.9.96.1.1.1.1.14.432 i 1

ccCopyEntryRowStatus: Статус записи таблицы. После того, как статус входа устанавливается активный (1) , связанная с ним запись не может быть изменена, пока запрос не завершится (ccCopyState переходит в состояние «успешный» или «неудавшийся»). Объект может быть:

  • active
  • notInService
  • notReady
  • createAndGo
  • createAndWait
  • destroy

 

5. Создадим список ip-адресов со всеми нашими коммутаторами, где каждый новый ip укажем с новой строки, например:

10.20.31.2
10.20.31.3
10.20.31.4
...
10.20.31.n

6. Создадим файл со скриптом .sh

#!/bin/bash

CDATE=`date "+_%Y-%m-%d"` 
TFTP="10.20.30.40"
CMNT="blablabla"
IPLIST="/home/disnetern/cisco_list.txt"
LOG="/var/log/config_collector.log"

while read IP
    do
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.2.432 i 1 || continue
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.3.432 i 4
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.4.432 i 1
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.5.432 a $TFTP
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.6.432 s $IP$CDATE.cfg
        /bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.14.432 i 1 && echo "Config from $IP was uploaded on tftp in $CDATE" >> $LOG
    done <"$IPLIST"
exit 0

Где:

  • CDATE – дата создания конфига
  • TFTP – сервер TFTP
  • CMNT – community – пароль snmp
  • IPLIST – адрес где лежит файл-список с ip адресами коммутаторов
  • LOG – адрес файла, куда будут писаться логи при успешном копировании на сервер
  • 7. После закидываем в cron задачу, по запуску этого скрипта, скажем по воскресеньям? 5 утра:

    0       5       *       *       0       /home/disnetern/conf_collect_cisco.sh 2>&1
    

    Comments

    So empty here ... leave a comment!

    Добавить комментарий

    Sidebar



    Яндекс.Метрика Рейтинг@Mail.ru