Backup конфигурации Cisco

17.02.2010

Встретил сегодня в статистике любопытный запрос:  cisco+ssh+sertificate+putty

Напомнил мне он о том, как мы воевали Cisco  и как все это привело к более менее нормальной схеме резервирования настроек наших многочисленных маршрутизаторов Cisco.

Ситуация была презабавная, необходимо было срочно подключить один новый сегмент сети для точек wi-fi, создали пару vlan, пару DHCP пулов. Настроили проверили что все работает и забыли. Но где-то через недельку на ночь вырубили свет в малой серверной. Бесперебойники подержали сколько могли и к утру отключились. Утром, после того как свет включился и все поднялось, на какую-то встречу приехали большие дяди, у каждого ноутбук и они не могут подключится в сети.  Через  несколько минут обнаружилось что наши изменения конфигурации, каким-то таинственным образом, частично исчезли. Т.е. Vlan остался только  один, а пулы вообще местами поменялись. Конечно, подумали, что мы такие-сякие, банально забыли сохранить конфигурацию. Бывает…  Дальше началось самое интересное:

По памяти восстановили все, не без напряга конечно, сохранили конфигурацию и успокоились. На следующую ночь тоже самое, нет света, с утра не работают wi-fi клиенты.  Но мы же сохраняли настройки! Проверили опять тоже самое. Оказалось что мы зачем то решили descripton для vlan назначить в красивом виде, типа «Vlan for tochki dostupa — klienti». Проблема была как раз в красивости. В кавычки взяли что бы были пробелы и именно из-за них и началась эта катавасия. Сделали как и раньше делали: Vlan_for_tochki_dostupa_klienti.  Получилось как в том анекдоте -Настоящие_программисты_пробелами_не_пользуются.

После всех этих вещей, мы всерьез задались вопросом: Как же нам, постоянно бекапить конфиги Csico, что бы в случае чего иметь их под рукой.  В Интернете как обычно много таких вопросов и много платных и бесплатных приложений. Бесплатные обычно имеют ограничения или совсем не имеют средств интерактивности, а платные никто для такой «мелочи» не купит.

Оговорюсь что в тот момент, а это было давно, все Cisco во внутренней сети управлялись дефолтным методом, через telnet. Хоть и не безопасно, но работало долгое время. Вот как раз для такой схемы я и нашел прекрасную утилиту.

  Cisconfig (280,0 KiB, 2 682 hits)

Работает она из консоли и в качестве параметров принимает учетные данные для входа на cisco и ее IP. В результате своей работы создается файлик именем вида hostnamecisco.txt, в котором будет лежать вывод команды sh run.

Все что остается набросать небольшой bat файл  примерно с таким содержимым

ciconfig.exe -UN:cisco -UP:cisco -ip:192.168.0.254

set vdate=%DATE%

mkdir «config_%vdate%»

move *.txt «config_%vdate%»

и сделать из этого bat файла задачу выполняющуюся каждую ночь в 1 час ночи. При выполнении батника будет создаваться папка с названием содержащим дату бекапа а внутри будет находится сам конфиг.

Примерно полгода мы пользовались таким бекапером конфигурации, а затем пришло время отказываться от telnet и переходить на SSH.

Для того что бы Cisco работала через SSH ей необходимо иметь поддержку такой возможности.  Это можно определить по имени загрузочного образа  IOS, в нем должен быть кусочек «k9».

Если такой есть хорошо, если нет, ищем прошивку с таким суффиксом.

Для того что бы заработал SSH необходимо на cisco  произвести следующие настройки

1.  Определить domain name и hostname

hostname testname

ip domain-name primer.local

2. Сгенерировать  SSH ключ.
cry key generate rsa

3. Настроить таймаут и количество повторов авторизации.
ip ssh time-out 60
ip ssh authentication-retries 2

4. Настроить версию SSH

ip ssh version 2

5. Включить возможность безопасной передачи файлов (необходимо только для  бекапа)

ip scp server enable

6. Отключить telnet доступ  (только после того как все нормально настроено)

line vty 0 4
transport input ssh

После этих манипуляций вы сможете подключится к cisco через SSH используя putty или любой другой ssh клиент.

После того как мы перевели все cisco на SSH я вспомнил о нашем бекапере конфигов. Т.к. telnet больше не использовался, необходимо было переделать для использования ssh.

В пункте 5 я упомянул команду включающую режим SCP (безопасный протокол передачи файлов). Если этот режим включен, то на cisco можно зайти через Winscp или любой другой клиент и увидеть ее файловую систему.  Т.к. нам необходима интерактивная утилита? я воспользовался программкой pscp.exe  из пакета Putty.

Измененный bat файл стал выглядеть  примерно так:

pscp -pw cisco -scp cisco@192.168.0.254:running-config c1700_test.txt

set vdate=%DATE%

mkdir «config_%vdate%»

move *.txt «config_%vdate%»

Работает он аналогичным образом: ночью запускается по расписанию и копирует running-config  в файл с раcширением txt, который в свою очередь затем складывается в папочки по дням. Тут есть один нюанс, при запуске батника в первый раз, необходимо будет принять открытый ключ для того что бы осуществить подключение к ssh. При запуске батника будет выводится соответствующий запрос и выбор y/n . После первого раза уже подобного запроса происходить не будет и батник будет работать полностью интерактивно.

Такая схема показала себя с лучшей стороны: обеспечивается безопасный протокол передачи, есть ежедневная каталогизированная конфигурация всех cisco, полностью бесплатная. За исключением только вопроса лицензирования IOS с поддержкой k9, но это довольно сложный вопрос и касаться его не будем. Впрочем и пока еще не проблема найти нужную IOS  в интернете.

еще один вариант бекапа если у вас в качестве ОС клиентской стороны используется LINUX

Ещё один вариант под никсы, для меня лично он кажется более простым и удобным, может ещё кому понравится.
1.2.3.4 — сервак где бэкапится
1.2.3.254 — кошка

no ip rcmd domain-lookup
ip rcmd rsh-enable
ip rcmd remote-host root 1.2.3.4 root enable

И в крон нечто типа того, чтоб каждые 6 часов бэкапить конфиги с циски и удалять бэкапы конфигов старше 90 дней:
0 */6 * * * /usr/bin/rsh 1.2.3.254 sh run > /mnt/backup/cisco/c1841_`date +’%d-%m-%Y_%H-%M’`
0 */6 * * * find /mnt/backup/cisco/ -type f -mtime +90 -print -exec rm -f {} \;

За этот совет большое спасибо Holocaust

13 комментариев

  • Marc 18.02.2010 в 4:03 дп

    > После первого раза уже подобного запроса происходить не будет и батник будет работать полностью интерактивно.

    Может, всё-таки, автономно??? Потому как «полностью интерактивно» — получается, каждый раз он все параметры перезапрашивает…

    • admin 18.02.2010 в 9:18 дп

      Wikipedia

      Интерактивность — это способность информационно-коммуникационной системы, без участия человека, активно и разнообразно реагировать на действия пользователя. Говорят, что система «умная», то есть как бы обладает каким-то интеллектом.

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

      • LogicDaemon 06.04.2012 в 4:44 пп

        обратите внимание, что в определении в Вашей цитате написано: «Интерактивность — это способность … реагировать на действия пользователя». То есть если система реагирует на действия пользователя, она интерактивна.

        В конкретном случае интерактивны по отношению к пользователю планировщик задач и ssh при первом запуске, далее всё происходит автоматически.

        Либо, если рассматривать интерактивность не по отношению к пользователю, а между системами, то оба запуска одинаково интерактивны, причём пакетный файл одинаково неинтерактивен, поскольку его действия не зависят ни от выдаваемых cisco’й ответов, ни от действий пользователя.

  • Marc 19.02.2010 в 4:11 дп

    И, всё-таки, «активно и разнообразно реагировать на действия пользователя»!!! А в Вашем случае какая уж тут «реакция на действия пользователя» после первого прогона батника?

  • Holocaust 14.03.2010 в 7:46 дп

    Ещё один вариант под никсы, для меня лично он кажется более простым и удобным, может ещё кому понравится.
    1.2.3.4 — сервак где бэкапится
    1.2.3.254 — кошка

    no ip rcmd domain-lookup
    ip rcmd rsh-enable
    ip rcmd remote-host root 1.2.3.4 root enable

  • Holocaust 14.03.2010 в 7:53 дп

    Сорри, чё-то коммент зарезает, сюда выложил http://codepaste.ru/3189/

  • admin 14.03.2010 в 8:30 дп

    Спасибо огромное за совет, я как то совсем выпустил из виду поддержку unix платформ. Все от того что у нас linux это несерьезная ОС стоит только на стендовых тачках. На боевых только соляра и то туда лучше не лезть. А машинок с windows куча вот под них и делал.

  • Bizz 16.03.2010 в 10:58 пп

    а имеется возможность заиметь исходник Cisconfig ?
    ибо треба не только Sh run хватать, но и Vty и Vlan…
    буду весьма благодарен.

    • admin 17.03.2010 в 10:18 дп

      програмка не моя, авторы где то на сайте microsin.ru
      Вообще под такие условия иногда проще самому скриптик написать, под линуксом на том же awk или или под win с использованием любого самописного ПО для работы с сокетами, или каких либо компонент для работы с телнетом. готового решения у меня нету.
      Я так понимаю у вас другие циски через aux зацеплены? если так то стоит копать в сторону пакетного запуска telnet клиента с сохранением вывода в файл

  • Сергей 11.08.2010 в 5:04 пп

    Cisco, кстати, сама умеет сохранять конфиг на сервере, например, tftp. Пример еженедельного слива конфига по времени на tftp сервер:

    cisco(config)#kron policy-list Backup
    cisco(config-kron-policy)#cli show run | redirect tftp://172.16.1.10/ciscobackup.cfg
    cisco(config)#kron occurrence Backup at 23:00 Sun recurring
    cisco(config-kron-policy)#policy-list Backup

    • admin 11.08.2010 в 5:08 пп

      !вот за это спасибо не знал, вполне дельный способ, правда надо иметь постоянно поднятый тфтп и скрипт чтобы все по папкам раскладывал но решение стоящее.

      • Сергей 12.08.2010 в 1:53 пп

        Зачем по папкам, пускай все конфиги в одной папке лежат. Можно же настроить так чтобы, например, конфиг с коммутатора сохранялся в папке с названием switch.cfg, а конфиг с маршрутизатора router.cfg ну и т.д. в этом же духе.

        • admin 12.08.2010 в 5:48 пп

          можно и так, но конкретно у нас аудит SOX требует что бы была история всех изменений конфигурации за 75 лет 🙂 как то сложно без скрипта разнесения это условия выполнить:0

Добавить комментарий для admin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *