Backup конфигурации Cisco через Mysql + Perl + Snmp + TFTP

Один из не очень сложных и удобных способов централизованного «бэкапа» конфигурации оборудования 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 будут складываться конфигурации оборудования, которые можно архивировать и например перекладывать в облачное хранилище, а для большей надежности еще и дублируя их у себя.

Запись опубликована в рубрике Cisco, Сети. Добавьте в закладки постоянную ссылку.

Один комментарий на «Backup конфигурации Cisco через Mysql + Perl + Snmp + TFTP»

  1. И говорит:

    Привет!
    Я что то не понял: какой файл то скрипт будет копировать на тфтп?

Обсуждение закрыто.