Возникла необходимость в наличии Looking Glass для отображения информации, как с аппаратных маршрутизаторов, так и с маршрутизаторов под управлением FreeBSD, с установленным демоном маршрутизации Quagga [1].
Использовать будем Looking Glass от Cougar. Дополнительная информация - на сайте проекта [2]. Последняя версия - 1.9 от 25 ноября 2004 года. Релиз давно не обновлялся, но данный Looking Glass используется повсеместно.
Скачиваем и распаковываем архив:
# fetch http://muff.kiev.ua/files/lg-1.9.tar.bz2 [3] |
Пора посмотреть, что имеем в наличии:
# cd lg-1.9 && ls total 146 drwxr-xr-x 2 www 100 512 25 ноя 2004 . drwxr-xr-x 7 www www 512 8 янв 01:36 .. -rw-r--r-- 1 www 100 3308 25 ноя 2004 CHANGELOG -rw-r--r-- 1 www 100 17976 16 июл 2002 COPYING -rw-r--r-- 1 www 100 5161 15 июн 2004 README -rw-r--r-- 1 www 100 256 15 июн 2004 as.txt -rw-r--r-- 1 www 100 50998 28 сен 2004 communities.txt -rw-r--r-- 1 www 100 1406 16 июл 2002 favicon.ico -rwxr-xr-x 1 www 100 36818 25 ноя 2004 lg.cgi -rw-r--r-- 1 www 100 14691 25 ноя 2004 lg.conf -rwxr-xr-x 1 www 100 2428 15 июн 2004 makeaslist.pl -rwxr-xr-x 1 www 100 3718 15 июн 2004 makedb.pl |
Итак, вникнем в README, чтобы понять что нужно делать дальше... Имеем в наличии пошаговую инструкцию... Ну что ж, начнем.
- Cоздаем каталог для размещения файлов Looking Glass.
# mkdir /usr/local/www/lg.muff.kiev.ua - Копируем файлы lg.cgi, lg.conf и favicon.ico в этот каталог. Выставляем необходимые права доступа:
# cp lg.cgi lg.conf favicon.ico /usr/local/www/lg.muff.kiev.ua
# chown www:www /usr/local/www/lg.muff.kiev.ua/
# chmod 644 /usr/local/www/lg.muff.kiev.ua/*
# chmod 755 /usr/local/www/lg.muff.kiev.ua/lg.cgi - Отредактируем httpd.conf. Я создал отдельный виртуалхост следующего содержания:
<VirtualHost 195.3.159.250:80>ServerName lg.muff.kiev.ua
ServerAdmin admin[dot]muff.kiev.uaErrorLog /var/log/apache/lg.muff.kiev.ua-error.log
TransferLog /var/log/apache/lg.muff.kiev.ua-access.logScriptAlias / /usr/local/www/lg/lg.cgiDocumentRoot /usr/local/www/lg/
<Directory "/usr/local/www/lg">
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory></VirtualHost> - Перезапустим веб-сервер, чтобы изменения вступили в силу:
# apachectl graceful - Хм... Как бы все готово. Проверяем, что у нас доступно по адресу http://lg.muff.kiev.ua [4]. Результат следующий:
[5]
Чтобы немного "приукрасить" ресурс, разместим на странице логотип. Для этого необходимо поместить в каталог файл изображения с названием logo.gif. Еще необходимо внести некоторые изменения в файл lg.conf, но это немного попозже.
- Дальше, следуя инструкции, загружаем файлы созласно указанного списка и размещаем их в каталоге Looking Glass-а:
# wget http://www.version6.net/lg/db/as.txt [6]
# wget http://www.version6.net/lg/db/as-apnic.txt [7]
# wget http://www.version6.net/lg/db/as-arin.txt [8]
# wget http://www.version6.net/lg/db/as-ripe.txt [9]
# wget http://www.version6.net/lg/db/as-jpnic.txt [10]
# wget http://www.version6.net/lg/db/as-lacnic.txt [11]
# wget http://www.version6.net/lg/db/communities.txt [12]Необходимо в файле as.txt раскомментировать строки, начинающиеся с "include".
Также, в случае необходимости (например, при использовании локальных номеров автономных систем) необходимо задать номер автономной системы в файле as.txt. В моем частном случае номер автономной системы 12998 (ISP BGNet [13]). Он прописан в файле as-ripe.txt, поэтому просто закомментируем прописанную в файле as.txt строку.
- Следующий шаг - создание базы данных. Для этого воспользуемся скриптом makedb.pl. Скопируем его в директорию LG и дадим команду на запуск:
# cp makedb.pl /usr/local/www/lg.muff.kiev.ua
# ./makedb.plReading AS names..
Read AS list from as.txt..
OK
Reading community names..
Read community list from communities.txt..
OK
Setting up database..
OKРезультатом команды будет файл as.db.
- Чтобы быть уверенным, что все необходимые файлы доступны на чтение веб-сервером, добавим необходимые права:
# chmod a+r /usr/local/www/lg.muff.kiev.ua/*.txt
# chmod a+r /usr/local/www/lg.muff.kiev.ua/as.db
Кажется все инструкции выполнены... Дальше необходимо создать файл логов и выставить необходимые права:
# touch /var/log/lg.log |
Теперь советую отредактировать конфигурационный файл lg.conf, задать необходимые переменные и описать роутеры, к которым будем подключаться. Для теста вписал три роутера:
- ROUTER1: UA-IX. Clients. FreeBSD Router.
- ROUTER2: UA-IX. Clients. Cisco Router.
- ROUTER3: Full-View. Clients. FreeBSD Router.
Листинг lg.conf получился следующего содержания:
<?xml version="1.0" encoding="ISO-8859-1" ?> <LG_Conf_File> <LGURL>/</LGURL> <LogFile>/var/log/lg.log</LogFile> <ASList>./as.db</ASList> <LogoImage Align="center" Link="http://lg.muff.kiev.ua/">logo.gif</LogoImage [14]> <HTMLTitle>Looking Glass</HTMLTitle> <Favicon>/favicon.ico</Favicon> <ContactMail>admin[dot]muff.kiev.ua</ContactMail> <RSHCmd>/usr/bin/rsh -l lg</RSHCmd> <HTTPMethod>POST</HTTPMethod> <TimeOut>10</TimeOut> <Disclaimer>All commands will be logged for possible later analysis and statistics.</Disclaimer> <SecureMode>On</SecureMode> <Router_List> <Separator>UA-IX</Separator> <Router Name="ROUTER1" OSType="Zebra"> <URL>telnet://passROUTER1@192.168.206.1</URL> </Router> <Router Name="ROUTER2"> <URL>telnet://lguser:passROUTER2@192.168.206.5</URL> </Router> <Separator>Full-View</Separator> <Router Name="ROUTER3" OSType="Zebra"> <URL>telnet://passROUTER3@192.168.206.30</URL> </Router> </Router_List> </LG_Conf_File> |
Казалось бы, что на этом все... Однако нашел еще несколько костылей.
Telnet-соединение к маршрутизаторам не выполнялось. В логах веб-сервера обнаружил такую запись:
Can't locate Net/Telnet.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .) at (eval 9) line 2., referer: http://lg.muff.kiev.ua/ [15] |
Теперь понятно... Упустил, что на этом сервере не установлено perl-расширение Net::Telnet. Выполним установку этого модуля из портов:
# cd /usr/ports/net/p5-Net-Telnet && make install clean && rehash |
После этого заработало соединение к Cisco-роутеру, а с серверами под управлением FreeBSD c установленной Quagga все еще были проблемы. В логах обнаружил такие записи:
2012/03/22 20:17:30 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 2012/03/22 20:21:59 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 2012/03/22 20:59:18 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 2012/03/22 21:02:16 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 2012/03/22 21:03:17 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 2012/03/22 21:06:16 BGP: buffer_flush_window called with non-positive window height 0, forcing to 1 |
Решение было следующим. В скрипте lg.cgi необходимо заккоментировать (или удалить) следующий блок:
$telnet->put(pack("C9", 255, # TELNET_IAC 250, # TELNET_SB 31, 0, 200, 0, 0, # TELOPT_NAWS 255, # TELNET_IAC 240)); # TELNET_SE |
После удаления этого блока все заработало. Итак, финиш... Ну и напоследок, скриншоты, как все это выглядит:
Вот так выглядит интерфейс:
Вывод команды show ip bgp 31.43.184.0/24:
Вывод команды show ip bgp neighbors 193.227.206.46 advertised-routes:
Вывод команды show ip bgp summary:
Обзор нейбора (show ip bgp neighbors 193.227.207.14):
Обзор приходящих от нейбора роутов (show ip bgp neighbors 193.227.206.29 routes):
Вывод команды ping 8.8.8.8:
Вывод команды traceroute 8.8.8.8: