BGP - Looking Glass для BGP-роутера

Версия для печатиОтправить другуPDF version

Возникла необходимость в наличии Looking Glass для отображения информации, как с аппаратных маршрутизаторов, так и с маршрутизаторов под управлением FreeBSD, с установленным демоном маршрутизации Quagga.

Использовать будем Looking Glass от Cougar. Дополнительная информация - на сайте проекта. Последняя версия - 1.9 от 25 ноября 2004 года. Релиз давно не обновлялся, но данный Looking Glass используется повсеместно.

Скачиваем и распаковываем архив:

# fetch http://muff.kiev.ua/files/lg-1.9.tar.bz2
# tar -xzf lg-1.9.tar.bz2

Пора посмотреть, что имеем в наличии:

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, чтобы понять что нужно делать дальше... Имеем в наличии пошаговую инструкцию... Ну что ж, начнем.

  1. Cоздаем каталог для размещения файлов Looking Glass.
     
    # mkdir /usr/local/www/lg.muff.kiev.ua

     

  2. Копируем файлы 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

     

  3. Отредактируем httpd.conf. Я создал отдельный виртуалхост следующего содержания:
     
    <VirtualHost 195.3.159.250:80>
     
            ServerName lg.muff.kiev.ua
            ServerAdmin admin[dot]muff.kiev.ua
     
            ErrorLog /var/log/apache/lg.muff.kiev.ua-error.log
            TransferLog /var/log/apache/lg.muff.kiev.ua-access.log
     
            ScriptAlias / /usr/local/www/lg/lg.cgi
     
            DocumentRoot /usr/local/www/lg/
            <Directory "/usr/local/www/lg">
                    Options -Indexes FollowSymLinks MultiViews
                    AllowOverride All
            </Directory>
     
    </VirtualHost>

     

  4. Перезапустим веб-сервер, чтобы изменения вступили в силу:
     
    # apachectl graceful

     

  5. Хм... Как бы все готово. Проверяем, что у нас доступно по адресу http://lg.muff.kiev.ua. Результат следующий:
     
     Картинки

    Чтобы немного "приукрасить" ресурс, разместим на странице логотип. Для этого необходимо поместить в каталог файл изображения с названием logo.gif. Еще необходимо внести некоторые изменения в файл lg.conf, но это немного попозже.
     

  6. Дальше, следуя инструкции, загружаем файлы созласно указанного списка и размещаем их в каталоге Looking Glass-а:
     

    # wget http://www.version6.net/lg/db/as.txt
    # wget http://www.version6.net/lg/db/as-apnic.txt
    # wget http://www.version6.net/lg/db/as-arin.txt
    # wget http://www.version6.net/lg/db/as-ripe.txt
    # wget http://www.version6.net/lg/db/as-jpnic.txt
    # wget http://www.version6.net/lg/db/as-lacnic.txt
    # wget http://www.version6.net/lg/db/communities.txt

    Необходимо в файле as.txt раскомментировать строки, начинающиеся с "include".
    Также, в случае необходимости (например, при использовании локальных номеров автономных систем)  необходимо задать номер автономной системы в файле as.txt. В моем частном случае номер автономной системы 12998 (ISP BGNet). Он прописан  в файле as-ripe.txt, поэтому просто закомментируем прописанную в файле as.txt строку.
     

  7. Следующий шаг - создание базы данных. Для этого воспользуемся скриптом makedb.pl. Скопируем его в директорию LG и дадим команду на запуск:
     

    # cp makedb.pl /usr/local/www/lg.muff.kiev.ua
    # ./makedb.pl

    Reading 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.
     

  8. Чтобы быть уверенным, что все необходимые файлы доступны на чтение веб-сервером, добавим необходимые права:
     

    # 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, задать необходимые переменные и описать роутеры, к которым будем подключаться. Для теста вписал три роутера:

  1. ROUTER1: UA-IX. Clients. FreeBSD Router.
  2. ROUTER2: UA-IX. Clients. Cisco Router.
  3. 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>
        <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/

Теперь понятно... Упустил, что на этом сервере не установлено 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

После удаления этого блока все заработало. Итак, финиш...  Ну и напоследок, скриншоты, как все это выглядит:

 

Вот так выглядит интерфейс:

Looking Glass

Вывод команды show ip bgp 31.43.184.0/24:

Looking Glass

Вывод команды show ip bgp neighbors 193.227.206.46 advertised-routes:

Looking Glass

Вывод команды show ip bgp summary:

Looking Glass

Обзор нейбора (show ip bgp neighbors 193.227.207.14):

Looking Glass

Обзор приходящих от нейбора роутов (show ip bgp neighbors 193.227.206.29 routes):

Looking Glass

Вывод команды ping 8.8.8.8:

Looking Glass

Вывод команды traceroute 8.8.8.8:

Looking Glass

 

Ваша оценка: Нет Средняя: 3.7 (3 голоса)

Вставай, Україно!

Литература