Сохранение конфигурации с оборудования Cisco

Написал admin . Опубликовано в Cisco просмотров 5 996

Так себеПойдетХорошоПонравилосьОтличный пост (3 votes, average: 5,00 out of 5)
Загрузка...

По роду работы, у многих администратор и инженеров часто встает проблема регулярного сохранения конфигурационных файлов с большого количества оборудования Cisco. Эта статья освещает вариант автоматизации этого процесса с использованием технологии SNMP.

Регулярное сохранение конфигураций оборудования можно делать как минимум 2мя способами.

1. Коннектиться телнетом или по ssh, неважно, и потом делать copy run tftp. Это можно оформить в виде скрипта. У этого способа 2 недостатка, во первых, передача в открытом виде пароля по сети, и, во вторых, это долгий процесс по времени если сравнивать со вторым способом.

2. Сохранять посредством SNMP.

Simple Network Management Protocol — это технология, призванная обеспечить управление и контроль за устройствами и приложениями в сети связи путём обмена управляющей информацией между агентами, располагающимися на сетевых устройствах, и менеджерами, расположенными на станциях управления.

Инструментарий для работы с SNMP — это пакет net-snmp, а в частности 2 команды из этого пакета. Это snmpwalk и snmpset. Первая позволяет просмотреть какие MIB поддерживает устройство, а вторая позволяет собственно управлять устройством. Также для сохранения конфигов нужен tftp сервер. Есть возможность сохранять на ftp, но по-моему, проще на tftp.

Собственно вот сами MIB которые и позволяют делать эти шаманские действия.

У Cisco оборудования, в частности коммутаторов, существует два типа операционных системы: IOS (Internetwork Operation System) и COS (Catalyst Operation System). Далее будем рассматривать MIB для обоих систем.

IOS: Запись конфига на tftp (аналог в консоли: copy running-config tftp)

snmpset -c $RW $IPtftp .1.3.6.1.4.1.9.2.1.55.192.168.1.1 octetstring routername-config

COS: Запись конфига на tftp (аналог в консоли write net)

snmpset -c $RW $IPtftp .1.3.6.1.4.1.9.5.1.5.1.0 octetstring 192.168.1.1 устанавливаем IP tftp

snmpset -c $RW $IPtftp .1.3.6.1.4.1.9.5.1.5.2.0 octetstring routername-config задаём имя конфигу

snmpset -c $RW $IPtftp .1.3.6.1.4.1.9.5.1.5.4.0 integer 3 говорим циске писать на tftp

Для защиты SNMP доступа, настраиваем ACL на оборудовании Cisco:

Вариант для IOS

access-list 3 remark "SNMP RW access"
access-list 3 permit 192.168.1.1
snmp-server community secret RW 3

Вариант для COS

set ip permit 192.168.1.1 snmp
set ip permit enable snmp
set snmp community read-write secret

Скрипт для обхода IOS девайсов и сброса их конфигов на tftp, по рассмотренным выше MIBам:

#!/usr/bin/perl
use English;

$BACKUP_DIRS = "/root/backup-conf-cisco/";
$BACKUP_SOURCE_DIR = "/tftpboot/";
$tftpserver = '192.168.1.1';
$MIB = '.1.3.6.1.4.1.9.2.1.55';
$RW = 'secret';

# файл host-ios должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename_host = '/root/script/host-ios';

#Опрашиваем все циски по SNMP из файла host
open DATA, $filename_host or die "Невозможно открыть $filename_host: $!";

while () {
  chomp;
  ($name, $ip) = split(/::/);
  system ("snmpset -v 2c -O qv -t 5 -c $RW $ip $MIB.$tftpserver s $name");
}

close DATA;

system ("mkdir $BACKUP_DIRS/`date +%m.%Y` -p");
system ("tar cvzf $BACKUP_DIRS/`date +%m.%Y`/configs-`date +%b.%d.%Y`.tar.gz $BACKUP_SOURCE_DIR >> /dev/null && rm -f $BACKUP_SOURCE_DIR/*");

Вариант для СOS:

#!/usr/bin/perl
use English;

$tftpserver = '192.168.1.1';
$RW = 'secret';

# файл host-cos должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename = '/root/script/host-cos';

open DATA, $filename or die "Невозможно открыть $filename: $!";

while () {
  chomp;
  ($name, $ip) = split(/::/);

  # устанавливаем на циске IP tftp сервера
  system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.1.0 s $tftpserver");

  # устанавливаем имя под которым будет сохраняться конфиг
  system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.2.0 s $name");

  # говорим циске сгрузить конфиг на tftp
  system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.4.0 i 3 ");
}

close DATA;

На последок, все-таки рассмотрим первый вариант сброса конфига по telnet. Это может пригодиться в случаях, когда SNMP вдруг по каким-то причинам нельзя использовать. Так же, может это будет просто полезно как пример, как можно зайти на оборудование и вызвать на нем команды.

#!/usr/bin/perl
use English;

$tftpserver = '192.168.1.1';

# файл host-pix должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename = '/root/script/host-pix';

$DIR="/root/script/";

# пользователь в моём случае аутентификация через tacasc+
$USER="user";
$PASS_USER="passuser";

# пароль на ENABLE
$PASS_ENABLE="passenable";

system("rm -f ./temp.sh");

open DATA, $filename or die "Невозможно открыть $filename: $!";

while () {
  chomp;
  ($name, $ip) = split(/::/);

  system("cd $DIR");
  system("echo '#!/usr/bin/expect -f' >> temp.sh");
  system("echo spawn telnet $ip >> temp.sh");
  system("echo expect 'Username: ' >> temp.sh");
  system("echo send \"$USER\\r\" >> temp.sh");
  system("echo expect 'Password: ' >> temp.sh");
  system("echo send \"$PASS_USER\\r\" >> temp.sh");
  system("echo sleep 3 >> temp.sh");
  system("echo send \"enable\\r\" >> temp.sh");
  system("echo expect 'Password: ' >> temp.sh");
  system("echo send \"$PASS_ENABLE\\r\" >> temp.sh");
  system("echo sleep 10 >> temp.sh");
  system("echo send '\"write net $tftpserver:config-$name\\r\"' >> temp.sh");
  system("echo sleep 15 >> temp.sh");
  system("echo send \"exit\\r\" >> temp.sh");
  system("chmod 755 ./temp.sh");
  system("./temp.sh");
  system("rm -f ./temp.sh");
}

close DATA;

Можно использовать готовые решения, которые будут работать по рассмотренным принципам. Вот несколько вариантов: Cisco Router Configuration Backup Utility, rancid

Рекомендации Cisco
How To Copy Configurations To and From Cisco Devices Using SNMP
Configuration Replace and Configuration Rollback

Похожие статьи:

Метки: , , , , , , ,

Trackback from your site.

Comments (1)

  • Sergey Kuzmin

    |

    #!/bin/bash

    function my_snmp_cisco_save_config_to_tftp() # <- tftp_ip cisco_ip cisco_config_name
    {
    local tftp_ip=${1:?tftp_ip}
    local cisco_ip=${2:?cisco_ip not specified}
    local cisco_config_name=${3:?cisco_config_name not specified}
    snmpset -v 2c -O qv -t 5 -c 'public' "$cisco_ip" ".1.3.6.1.4.1.9.2.1.55.$tftp_ip" s "$cisco_config_name"
    }

    function my_telnet_cisco_save_config_to_tftp() # /dev/null «$CISCO_LIST_FILE»
    |while read cisco_ip cisco_name; do
    # [ «$cisco_ip» -a «$cisco_name» ] && my_snmp_cisco_save_config_to_tftp «$TFTP_SERVER_IP» «$cisco_ip» «$cisco_name-confg»
    [ «$cisco_ip» ] && my_telnet_cisco_save_config_to_tftp «$TFTP_SERVER_IP» «$cisco_ip» «$CISCO_USER» «$CISCO_PASS»
    done
    [ «$pid» ] && kill &>/dev/null -9 «$pid»

    # cat cisco-list
    10.2.1.1 cisco_name1
    10.2.1.2 cisco_name2
    10.2.1.3 cisco_name3

    Reply

Leave a comment