Rancid on Centos 6. Как что работает.

Rancid backup centos cisco

Disclaimer

Для особограмотных линуксеров-монстров, любящих прикопаться, сообщаю, что я не такой как вы, о линуксах знаю столько же, сколько о кактусах в Мексике и пишу это исключительно для того, чтобы если вдруг, не дай бог, когда-нибудь, придется снова столкнуться с тем, что гордо называется RANCID, не бродить снова в потемках, аки слепой котэ, но быстро словиться и прозреть, как Вий или Ванга на крайний случай.

Что такое RANCID?

По сути, набор скриптов (прежде всего rancid-run), через которые этот друг:

  1. Подключается к консоли роутера, свитча или хзчего так же как это делает обычный пользователь, используя обычную учетную запись.
  2. Выполняет на этом хзчем команду #sh run (для cisco) или ее аналог, что зависит от вендора и типа устройства.
  3. Сохраняет вывод этой команды в файл. При этом используется система контроля версий (CVS), посредством которой всегда видно чем новый конфиг устройства отличается от предыдущего и любая версия всегда доступна для ее использования по назначению или для медитации на нее.
  4. Отправляет уведомление на почту администратору о том, что (или):
    • конфигурация изменилась и изменения вот такие (значком «+» показывается какие строки добавлены, «-» — какие удалены)
    • я не смог подключиться к устройству Х и узнать как дела с его конфигурацией.
  5. Все.

Все эти пять штук он делает по расписанию, которое ты для него определишь. Cron тебе в этом поможет.

Как работает Rancid

Установка Rancid происходит по любому мануалу, коих  Goooooooogle знает множество. После того, как установлен, можно и понастраивать.

Имеем вот такую вернхюю иерархиую файлов и каталогов (в данном конкретном случае случае, после моей неграмотной установки, она вся расположена в /usr/local/rancid):

[rancid@rancid ~]$ ls -a /usr/local/rancid/
.   .bash_history  .bash_profile  bin        etc  pkg    .ssh  .viminfo
..  .bash_logout   .bashrc        .cloginrc  lib  share  var

Сначала идем в файл /usr/local/rancid/etc/rancid.conf и находим в нем штуку, которая начинается со слов LIST_OF_GROUPS

Это, видимо, основная директива, и те слова, которые ты напишешь на месте троеточий здесь LIST_OF_GROUPS=»$LIST_OF_GROUPS …… ….. …..» будут соответствовать группам, по которым ты раскидаешь свое оборудование для некой наглядности и причесанности.

Это может выглядеть так, когда хочется разложить все по типам устройств,:

LIST_OF_GROUPS=»$LIST_OF_GROUPS ROUTERS SWITCHES BITCHES»

Или так, когда хочется по их географической распределенности:

LIST_OF_GROUPS=»$LIST_OF_GROUPS EARTH MOON MARS»

Если ты прирожденный анархистЪ и воюешь против системы, то создай всего одну группу и покидай все туда:

LIST_OF_GROUPS=»$LIST_OF_GROUPS VSEEEE»

Далее от имени ранее созданного пользователя rancid, запускаем скрипт:

#su rancid
rancid@rancid#/home/rancid/bin/rancid-cvs

В результате, в каталоге /usr/local/rancid/var появляется несколько каталогов:

[rancid@rancid]$ ls
CVS  EARTH  logs  MARS  MOON

Теперь, нам нужно настроить бэкап конфигурации роутера коммутатора Cisco Catalyst (именем switch-earth-1.company.com), который находится на Земле (EARTH)

Для этого, находим скрытый файл .cloginrc, который находится в корневом каталоге установки rancid (в данном случае /usr/local/rancid/.cloginrc) и открываем его:

vim /usr/local/rancid.cloginrc

В этом файле делаем вот такую запись:

add user switch-earth-1.company.com backup_user
add password switch-earth-1.company.com password_for_backup_user enable_password
add method switch-earth-1.company.com ssh

Здесь мы говорим, что: когда rancid будет подключаться к свитчу switch-earth-1.company.com, он должен использовать учетную запись backup_user с паролем password_for_backup_user и, раз уж речь об обычном устройстве cisco, еще и enable_password. Подключение должно осуществляеться по ssh.

Аналогичные записи делаем и для всех остальных устройств, с которыми будем работать. Записи могут отличаться, в зависимости от типа девайса и вендора. Например, для контроллера Cisco 2504 WLC аналогичная запись будет выглядеть так:

add user wlc-earth-1.company.com backup_user
add password wlc-earth-1.company.com password_for_backup_user
add noenable wlc-earth-1.company.com 1
add method wlc-earth-1.company.com ssh

Тут, т.к. WLC работает на своей собственной операционной системе, в синтаксисе которой команда enable не предусмотрена, мы третьей строкой говорим, что делать enable не нужно и во второй строке пароль для enable, как в случае со свитчом выше, не задаем.

По хорошему нужно ко всем девайсам подключаться по ssh, поэтому последнюю строку у этих девайсов можно убрать, и задать общее правило подключения для всех девайсах в начале файла .cloginrc:

add method * ssh

Так-то лучше.

Теперь, когда credentials для switch-earth-1.company.com прописаны в файле .clognrc, продолжим настройку rancid для работы с этим свитчом.

Раньше ты видел, что в /usr/local/rancid/var появились три группы устройств (EARTH, MARS, MOON):

[rancid@linux]$ ls /usr/local/rancid/var
CVS  EARTH  logs  MARS MOON

Искомый свитч, находится в EARTH, смотрим туда:

[rancid@linux]$ ls /usr/local/rancid/var/EARTH/
configs  CVS  router.db  routers.all  routers.down  routers.up  runcount

Там лежит файл router.db, который открываем:

vim /usr/local/rancid/var/EARTH/router.db

и записываем туда:

switch-earth-1.company.com;cisco;up

Тут мы говорим рансиду, что устройство switch-earth-1.company.com есть, изобрели его в cisco, и оно up, т.е. с конфигурацию с него нужно попытаться получить.

Если нужно получать бэкап конфигурации и с вышеупомянутого WLC-контрооллера, в нужно и для него добавить запись в router.db

wlc-earth-1.company.com;cisco-wlc5;up

Отличие для WLC в том, что для него задана своя категория cisco-wlc5, а не просто cisco, как для свитча. По имени этой категории rancid понимает, как ему логиниться в каждое конкретное устройство и какие команды выполнять для получения листинга конфигурации.

Информацию о том, какие типы устройств есть (cisco, cisco-wlc5, cisco-wlc4, juniper, juniper-srx, etc) и как с ними нужно работать, rancid берет из файла:

/usr/local/rancid/etc/rancid.types.base

Его можно открыть и посмотреть для большей осознаности.

Дальше все работает по следующему алгоритму:

  1. Скрипт (rancid-run) пробегается по созданным каталогам, соответствующим категориям, здесь это EARTH, MOON, MARS и смотрит, что написано в файле router.db, каждого каталога, построчно просматривает этот файл.
  2. Обрабатывает каждую найденную строку. Например, наткнувшись на строку switch-earth-1.company.com;cisco;up:
    • понимает, что это cisco и идет в файл rancid.types.base, смотреть как быть с этим устройством;
    • смотрит в файл .cloginrc, чтобы понять, по какому протоколу нужно подключаться к switch-earth-1.company.com и какой username и password использовать для подключения.
    • имея всю собранную информацию, подключается к switch-earth-1.company.com и выполняет команды, описанные в rancid.types.base для этого типа устройства, получает листинг с конфигурацией, который успешно сохраняет сюда:

      /usr/local/rancid/var/EARTH/configs/switch-earth-1.company.com

    • информацию о том, что изменилось в новой версии конфига отностительно предыдущий, и все, что касается работы системы контроля версий, записывает сюда:

      /usr/local/rancid/var/CVS/EARTH/configs/switch-earth-1.company.com,v

    • обновляет этот файл, добавляя новую строку (если удалось подключиться к устройству и получить его конфигурацию):

      /usr/local/rancid/var/SPB/routres.up

    • обновляет файл, добавляя новую строку (если не удалось подключиться к устройству):

      /usr/local/rancid/var/SPB/routres.down

    • делает еще много всякого, о чем мы не догадываемся
    • отправляет информацию о своей работе на e-mail людей, которые за ним наблюдают.

Теперь про почтовые уведомления RANCID/RANCID E-Mail notifications Centos

В общих чертах все выглядит так. Когда мы создали три группы устройств EARTH, MOON and MARS, Rancid по умолчанию знает, что все уведомления, касательно подключения и работы с устройствами, лежащими в каждой группе, нужно слать на следующие адреса:

rancid-admin-EARTH@rancid.company.com
rancid-EARTH@rancid.company.com
rancid-admin-MOON@rancid.company.com
rancid-MOON@rancid.company.com
rancid-admin-MARS@rancid.company.com
rancid-MARS@rancid.company.com

На адреса, в которых есть слово admin, отсылаются уведомления о том, что новое устройство добавлено или что не удается подключиться к уже добавленному устройству.

На адреса, в которых нет слова admin, отсылаются уведомления об изменении конфигурации устройств, если такие изменения были, сами изменения также отправляются на почту (в виде строк со знаком + или -)

Т.е. он просто берет и шлет в систему письма на эти адреса. Дальше ему нужен MTA (например Postfix), который перешлет их дальше, на нормальный почтовый адрес администратора. Чтобы постфикс знал, куда именно слать письма, которые он получил от Rancid с адресом получателя, например rancid-EARTH@rancid.company.com, Postfix смотрит в файл /etc/aliases, который, соответственно, нужно подготовить, добавить в aliases следующие записи:

[root@rancid //]# cat /etc/aliases | grep rancid
rancid-admin-EARTH: monitoring-admin@company.com
rancid-EARTH: monitoring@company.com
rancid-admin-MOON: monitoring-admin@company.com
rancid-MOON: monitoring@company.com
rancid-admin-MARS: monitoring-admin@company.com
rancid-MARS: monitoring@company.com

Когда aliases поправил, нужно выполнить

[root@rancid //]#newaliases

Теперь postfix, получив от rancid письмо с адресатом rancid-EARTH@company.com, перешлет его на твой e-mail monitoring@company.com. Ты радостно его получишь и будешь разглядывать.

А, нет, так просто ты его не получишь, Postfix-то его отправит, но твой адекватно-настроенный почтовый сервер, скорее всего его не примет, т.к. ардес и домен отправителя будет странный, например такой: rancid@rancid.company.com, вместо правильного rancid@company.com. Поэтому, нужно, чтобы Postfix, перед отправкой письма, правильно переписал адрес отправлителя. Делается это так:

# Добавить rewriting map в postfix
echo «rancid@rancid.company.com    rancid@company.com» >> /etc/postfix/generic
postmap /etc/postfix/generic

# Добавить map в main.cf
echo «smtp_generic_maps = hash:/etc/postfix/generic» >> /etc/postfix/main.cf
service postfix reload

После этого все будет хорошо и на твой адрес monitoring@company.com,  скорее всего наконец прилетит то самое письмо от rancid (естественно, после очередного запуска rancid-run)
И тут все вроде бы уже хорошо, но в теле письма в качестве адресата/получателя, ты будешь видеть не monitoring@company.com, а rancid-EARTH@rancid.company.com. Оно вроде не очень страшно (ведь письмо-то ты уже получил), но не очень эстетично. Чтобы это поправить, нужно добавить все в тот же /etc/postfix/generic добавить еще несколько строк:
[root@rancid //]# cat /etc/postfix/generic | grep rancid
rancid@rancid.company.com    rancid@company.com  <—- это добавили ранее>
rancid-EARTH@rancid.company.com monitoring@company.com
rancid-admin-EARTH@rancid.company.com monitoring-admin@company.com
rancid-MOON@rancid.company.com monitoring@company.com
rancid-admin-MOON@rancid.company.com monitoring-admin@company.com
rancid-MARS@rancid.company.com monitoring@company.com
rancid-admin-MARS@rancid.company.com monitoring-admin@company.com
 Далее еще раз выполнить
postmap /etc/postfix/generic
Теперь все хорошо, почта приходит, в теле письма отображаются правильные адреса.

Запуск rancid-run по расписанию

 Когда все проверено и работает, можно создать соответствующую задачу в cron, для периодического выполнения скрипта. Например, нужно чтобы rancid-run запускался каждые полчаса. Создадим задачу в crontab для пользователя rancid, от имени которого запускается rnaicd.run:

crontab -e -u rancid

# run ranid-run script every 30 minutes
*/30  *  *  *  *  /usr/local/rancid/bin/rancid-run

 Теперь rancid-run будет запускаться два раза в 0 и 30 минут каждый час. Если за это время произошло изменение в конфигурации какого-то из опрашиваемых устройств, rancid обновит записи в своей CVS и пришлет соответствующее уведомление на почту. То же произойдет в случае, если какое-то из добавленных устройств окажется недоступным. В случае если ничего не изменилось и со всеми устройствами все в порядке — ничего не произойдет и никаких уведомлений на почту не будет.

 ViewVC

 Для работы с бэкапами конфигураций, который создает RANCID и CVS, нужно использовать веб-интерфейс, который может удобно собрать и представить информацию о имеющихся версиях конфигураций, скачать нужную, сравнить несклько версий. Для этого отлично подходит ViewVC. Ничего сложного в его установке нет, мануалов море, бери и делай.

Траблшутинг/Debugging

Очень полезно, копипаст отсюда.

Test logging into a device:

clogin device.company.com

Test logging into a device and a single command:

clogin -t 90 -c»show version» device.company.com

Test logging into a device and run a sequence of commands:

clogin -t 90 -c»show version;show calendar» device.company.com

Show what RANCID does with debugging output:

rancid -d device.company.com

If the above throws some errors (especially a list of missed commands, and if you’re using TACACS, ensure you have authorisation to run all the commands RANCID tries but logging into the router as the RANCID user and executing them one at a time.
Same as (4) but record all router / switch output for analysis:

setenv NOPIPE YES
rancid -d device.company.com

and then complete output can be found in the file: device.company.com.raw (in this example).
Run RANCID on a single switch / router tree rather than all:

/usr/local/bin/rancid-run [tree]

Run RANCID normally:

/usr/local/bin/rancid-run


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети
0 comments on “Rancid on Centos 6. Как что работает.
1 Пинги/Обратные ссылки для "Rancid on Centos 6. Как что работает."
  1. order nfl jerseys online cheap

    Very nice post. I just stumbled upon your weblog and wanted to say that cheap nfl jerseys china I have really enjoyed browsing your blog posts. After all Il be subscribing to your feed and I hope you write again very soon!post.

Заодно посмотрите мои фоты в моем профиле вконтакте. Любые вопросы по существу статей можете задать там же.
Hostenko — лучший WordPress-хостинг