Поводом для написания этой статьи послужила задача, которая возникла перед нами вчера.
Задача звучала просто: необходимо установить LG (Looking Glass) для отображения информации с BGP роутера FreeBSD с установленной quagga.
Что такое LG ?
Looking Glass позволяет выполнить на BGP роутере команды и отобразить результат их выполнения в web-интерфейсе:
- show ip bgp
- show ip bgp neighbors advertised-routes
- show ip bgp summary
- ping
- traceroute
Для получения данных с роутера LG может использовать протоколы: SSH, telnet или rsh.
Мы пользуемся telnet`ом.
LG мы всегда использовали один. Это разработка Cougar официальный сайт www.version6.net.
LG screenshot
Данный LG написан на языке программирования PERL и является CGI скриптом. Для соединения использует PERL модуль Net::Telnet (/usr/ports/net/p5-Net-Telnet)
Последняя версия LG, доступная на это момент, датируется 25.11.2004 года и имеет номер 1.9.
Скачать исходный код можно на официальном сайте http://www.version6.net/lg/lg-1.9.tar.bz2 или с нашего сайта http://subnets.ru/files/lg-1.9.tar.bz2.
Ранее мы использовали этот LG для получения инфы с Juniper, а тут понадобилось получить с quagga (демон bgpd).
Установили LG, зашли в web-интерфейс LG и ….. и нифига. По нажатию на кнопку «Submit» LG просто долго «думает» (подвисает), а затем выдает страницу с запрошенной командой и пустым результатом.
Пара слов об установке.
В README автор достаточно четко описал что надо делать, повторяться мы не будем, но позволим себе добавить кусок конфига для HTTP сервера apache:
<VirtualHost XXX.XXX.XXX.XXX:80>
ServerAdmin mymail@mydomain.ru
DocumentRoot /usr/local/www/lg
ServerName lg.subnets.ru
ScriptAlias / /usr/local/www/lg/cgi/lg.cgi
ErrorLog /var/log/http/lg_error.log
CustomLog /var/log/http/lg_access.log common
<Directory "/usr/local/www/lg">
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
</VirtualHost>
Сначала подумали, что мы напортачили в конфиге, но после перечитывания мануала и разнообразных вариантов конфига стало понятно, что дело не в нем.
Остро встал вопрос о debug`е действий LG, но разработчик не предусмотрел такой возможности 🙁 В логах появляется лишь строчка с запросом и ничего больше….
Пришлось лезть в исходки. В результате изысканий стало понятно, что проблема возникает уже после установки telnet соединения между LG и quagga (демоном bgpd).
Это удалось понять используя более детальное логирование действий LG и просмотра вывода tcpdump:
tcpdump -Xni lo0 port 2605
Слушали ифейс lo0 (loopback) т.к. LG и quagga находтся на одном сервере и bgpd запущен командой:
/usr/local/sbin/bgpd -d -A 127.0.0.1
Возникает она потому что скрипт не может заматчить «command prompt», иными словами строку приглашения.
Что делать ? Разбираться с этим дальше уже нет времени, т.к. на выяснение проблемы уже убили кучу времени.
Тут я вспомнил про порт p5-Net-Telnet-Cisco (/usr/ports/net-mgmt/p5-Telnet-Cisco). Примеры использовании этого порта я показывал в статье Backup конфига Cisco на FTP.
Решил по быстрому попробовать такой вариант подключения по telnet к quagga. Сказано — сделано. Установил порт p5-Net-Telnet-Cisco, поправил исходный код lg.cgi и все заработало.
Думаю что мы не единственные кто сталкивался/столкнулся/столкнется :))) с этой проблемой, надеюсь эта статья вам поможет.
Модифицированный нами код можно скачать тут: http://subnets.ru/files/lg-1.9.1.tar.gz
В архиве присутствуют файлы:
- lg-1.9_ORIGINAL.tar.gz — это оригинальный архив от автора LG
- lg.cgi.diff — это DIFF файл между оригинальной версией и модифицированной
Уточню, что код модифировался только в части отвечающий за подключение по telnet`у к quagga, остальной код остался без изменений.
Списки Looking Glass в Инете:
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.
Авторы: Панфилов Алексей (lehis (at) subnets.ru) и Николаев Дмитрий (virus (at) subnets.ru)