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


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети

Error 20 at 0 depth lookup:unable to get local issuer certificate. Самоподписанный сертификат

Иногда, OpenSSL может ругаться на X509 сертификат, который содержит поля расширений, такие как, например, “использование ключа”.

Будем считать что у нас есть самоподписанный сертификат certfile.crt с установленным расширением “использвание ключа”, в котором написано (т.е. сертификат может быть использован для этих целей): Цифровая подпись, Неотрекаемость, Шифрование данных, Согласование ключей (d8)

В этом случае при попытке проверить валидность сертификата

[root@ejbca-uc]# openssl verify -CAfile certfile.crt certfile.crt

получим

error 20 at 0 depth lookup:unable to get local issuer certificate

Если сертификат не самоподписанный, а выдан каким-то УЦ, то подобная ошибка может означать, что в цепочке отсутствует один или несколько промежуточных сертификатов. Но в данном случае сертификат – самоподписанный. Поэтому странно, что вылетает ошибка, смысл которой в том, что не найден сертификат, выпустивший тот сертификат, который мы проверяем.

Как оказывается, openssl очень умен и при подобной проверке ему не достаточно просто сравнить CN certfile.crt certfile.crt, которые, естественно совпадают, т.к. файл один и тот же. Что делает openssl? Он выполняет аж несколько проверок:

То есть, если расширение key-usage в сертификае в принципе есть (а оно всегда есть в V3 сертификатах, которые формируются средствами windows), то в нем обязательно должно быть указано KU_KEY_CERT_SIGN (т.е. подпись сертификатов). Если в поле key-usage свойство  KU_KEY_CERT_SIGN не прописано, openssl проверяет сертификат, который играет роль сертификата CA и видит, что он не имеет права подписывать сертификаты и выдает ту самую ошибку.

Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети Метки: , , ,

Как отключить ненужные логи Cisco ASA

Если ты когда-либо смотрел в Real-Time Log Viewer в ASDM, то знаешь, что по умолчанию в куче тех сообщений, которые туда валятся, сложно найти нужные записи. Когда ты ищещь какие-то конкретные пактеы (напиример, пакет от хоста А к хосту B), поможет фильтр. Но, если вдруг у тебя возникла потребность просто оценить, что за разрешенный трафик в настоящий момент летает через ASA, сделать это будет непросто, поскольку придется пролистывать много страниц, содержащих подобное:

%ASA-6-302016: Teardown UDP connection 118314 for outside:95.101….
%ASA-6-302015: Built outbound UDP connection 118316 for DMZ…
%ASA-6-305012: Teardown dynamic TCP translation from inside:10.0….
%ASA-7-609001:  Built local-host outside:96.7…

В данном случае сообщение с номеро 302016 вполне можно было бы убрать, т.к. никакой информативности оно не несет. Для этого нужно просто зайти в CLI и сделать следующее:

ASA#config t
ASA(config)#no logging message 302016

В данном случае то же можно сделать без вреда и с сообщением 305012.

Таким образом, каждое сообщение в логе имеет свой syslog-id, состоящий из 6 цифр. Нужно убрать мешающее сообщение – повторяешь для его syslog-id приведенную выше команду. Вот ссылка на перечень всех syslog-id с их описанием.


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети Метки: , , ,

Wireshark и VoIP траффик

Wireshark в состоянии самостоятельно собирать отловленные RTP пакеты в кучу и слушать получившиеся диалоги.

Допустим, собрал ты каким-то образом (видимо, через span/mirror порт много) много сетевого трафика, среди которого есть и какое-то количество голосовых rtp-пакетов.

Далее тебе нужно залезть в меню и выбрать там Telephony/VoIP Calls.

После этого wireshark добросовестно проанализирует что он там наловил и представит каждый из получившихся у него диалогов в виде отдельной строки. Каждую из них можно выбрать нажав кнопку Analyze и после этого прослушать.

Все удобно, наглядно и понятно.

Картинки вставлять было лень:)


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети Метки: , , ,

Windows IP MTU и размер пакета ICMP ping

Сказ о разрушении некоторых стереотипов.

Итак, ты злой гений, решивший проверить какого максимального размера пакет пройдет через устройство, в котором ты сомневаешься. Скорее вего, какой-нибудь маршрутизатор где-нибудь в сети. И вот ты сел перед своим монитором, провод от которого тянется в железку, на котором установлена, скажем,  windows 7, положил пальцы на клавиатуру, открыл черный экран и ввел там нечто подобное:

ping 10.103.75.8 -n 1 -l 20000

Т.е. ты сейчас попытаешься отправить в сеть один пакет размером 20000 байт, адресованный какому-то хосту в другой подсети и посмотреть, пройдет ли он.

После этого ты нажал Enter и увидел следующее:

widnows_7_ping_packet_size

Что ты подумал? Наверное что-то такое:

Зашибись! Пакет, размером 20000 байт прошел, теперь попробую послать пакет в 30000 байт!


Не забывайте оставлять комментарии, если пост был вам полезен!
Опубликовано в Сети Метки: , , ,

Spikes and Sparrow в Санкт-Петербурге

Очень крутые кожаные сумки Spikes and Sparrow

Hostenko — лучший WordPress-хостинг