Один из не очень сложных и удобных способов централизованного «бэкапа» конфигурации оборудования Cisco это использование скрипта написанном на языке Perl + Snmp + Mysql (для централизованного хранения ip адресов оборудования, названий узлов и snmp community) и TFTP сервера. Я кратко опишу принцип работы всего этого набора с учетом того, что вы уже знаете что такое протокол Snmp, TFTP, у вас есть начальные навыки работы с базами данных MySQL и хотя бы небольшое знание языка Perl для понимания того как работает сам скрипт 🙂
В этом способе сбора конфигураций с оборудования Cisco, MySQL база используется как хранилище для списка оборудования, т.е. в базе будут хранится IP адреса оборудования, название узла где находится это оборудование и ключ Snmp community с правами RW. Это очень удобно, при запуске нового узла достаточно будет только добавить нужные данные в MySQL базу.
Начнем с самого Perl скрипта. Для его работы, в системе должен быть установлен Perl модуль Cisco::CopyConfig, установить его например можно из хранилища модулей CPAN:
perl -MCPAN -e 'install Cisco::CopyConfig'
Сам скрипт:
#!/usr/bin/perl use DBI; use Cisco::CopyConfig; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)=localtime(time); $year+=1900; $mon = sprintf("%02d",$mon+1); $mday = sprintf("%02d",$mday); $hour = sprintf("%02d",$hour); $min = sprintf("%02d",$min); $sec = sprintf("%02d",$sec); $date_format="$mday.$mon.$year"; $sql="select ip_address,community,description from switches order by inet_aton(ip_address) asc"; $dbh = DBI->connect("dbi:mysql:cisco_backup:127.0.0.1","cisco_backup","cisco_backup") or die "Can't connect to MySQL: $DBI::errstr\n"; $sth = $dbh->prepare($sql); $sth->execute(); $tftp_address = 'Сюда вписать адрес TFTP сервера'; while (@row=$sth->fetchrow_array) { $config = Cisco::CopyConfig->new( Host => $row[0], Comm => $row[1], Tmout => '10', Retry => '2' ); $tftp_file = "$row[2].$date_format.conf"; if ($config->copy($tftp_address, $tftp_file) ) { print "OK -> switch ip: $row[0], file: $tftp_file\n"; } else { print "ERROR -> switch ip: $row[0], no backup file\n"; } } |
В этом скрипте достаточно вписать в переменную $tftp_address адрес своего TFTP сервера. Далее необходимо создать новую базу данных MySQL и загрузить в нее структуру таблицы где будут хранится данные о нашем оборудовании.
SQL запрос для создания базы и таблицы:
CREATE DATABASE `cisco_backup` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `cisco_backup`; CREATE TABLE IF NOT EXISTS `switches` ( `id` bigint(128) NOT NULL AUTO_INCREMENT, `description` varchar(128) COLLATE utf8_bin NOT NULL, `ip_address` varchar(128) COLLATE utf8_bin NOT NULL, `community` varchar(128) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=32 ; |
После выполнения вышеописанного SQL запроса создается база с названием cisco_backup и таблицей в этой базе с названием switches. С помощью следующего запроса нужно добавить данные в эту таблицу.
insert into switches values('','core-switch','192.168.200.251','SNMPconfigCommunity1'); insert into switches values('','access-switch','192.168.200.252','SNMPconfigCommunity2'); |
Далее нам необходим TFTP сервер, куда наше оборудование будет складывать свои файлы конфигурации. На примере OS Centos можно использовать TFTP сервер который входит в пакет xinetd.
Пример конфигурационного файла TFTP:
cat /etc/xinetd.d/tftp service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -c -p -u tftpd -U 117 -s /var/lib/tftpboot per_source = 11 cps = 100 2 flags = IPv4 }
Теперь необходимо на самом оборудовании настроить доступ для того чтобы скрипт по SNMP протоколу мог дать команду для сохранения своей конфигурации на TFTP сервер.
access-list 70 permit 192.168.200.10 access-list 70 deny any
В access-list в приведенном примере нужно добавить правильный адрес сервера где будет запускаться скрипт. Далее несколько строк настроек самого SNMP сервера на Cisco.
snmp-server tftp-server-list 70 snmp-server view backup ciscoMgmt.96.1.1.1.1 included snmp-server community SNMPconfigCommunity1 view backup RW 70
В результате работы скрипта в директорию TFTP сервера /var/lib/tftpboot будут складываться конфигурации оборудования, которые можно архивировать и например перекладывать в облачное хранилище, а для большей надежности еще и дублируя их у себя.
Привет!
Я что то не понял: какой файл то скрипт будет копировать на тфтп?