Blog

  • OSPF+Zebra

    Пожалуйста, дайте мне знать — насколько верна следующая информация, а так же присылайте ваши предложения, комментарии. Zebra — большой программный пакет динамической маршрутизации, который разработали Кунихиро Ишигуро (Kunihiro Ishiguro), Тошиаки Такеда (Toshiaki Takada) и Ясахиро Охара (Yasuhiro Ohara). С помощью Zebra вы легко и быстро сможете настроить OSPF, но на практике, при настройке протокола под весьма специфические потребности, вы столкнетесь со значительным числом параметров. Ниже приводятся некоторые из характеристик протокола OSPF:

    Иерархичность
    Сети объединяются в иерархические области (area) — группу смежных сетей, которые находятся под единым управлением и совместно используют общую стратегию маршрутизации. Взаимодействие между областями осуществляется посредством стержневой части (backbone), которая обозначается как область 0 (area 0). Все стержневые маршрутизаторы обладают информацией о маршрутах ко всем другим областям.

    Быстрая сходимость
    Алгоритм поиска кратчайшего пути (SPF) обеспечивает быструю сходимость, а отсюда и более быстрый, в сравнении с протоколом RIP, выбор маршрута.

    Эффективное использование пропускной способности
    Использование групповых сообщений, вместо широковещательных, предотвращает \”затопление\” информацией о маршрутах посторонних узлов сети, которые могут быть не заинтересованы в получении этих сведений, что значительно снижает нагрузку на каналы связи. Кроме того, Внутренние Маршрутизаторы (т.е. те, которые не имеют интерфейсов за пределами своей области) не обладают информацией о маршрутах в других областях, за счет чего так же достигается уменьшение трафика маршрутизации. Роутеры, имеющие несколько интерфейсов в более чем одной области, называются Пограничными Маршрутизаторами (Area Border Routers), они поддерживают отдельные топологические базы данных для каждой из областей, с которыми соединены.

    Ресурсоемкость
    Протокол OSPF основан на алгоритме Shortest Path First, предложенном Е.В.Дейкстрой (E.W.Dijkstra), который требует больших вычислительных затрат, нежели иные алгоритмы маршрутизации. Но в действительности он не так уж и плох, поскольку кратчайший маршрут рассчитывается только в пределах одной области, причем для сетей малого и среднего размеров — это вообще не проблема, так что вы не будете даже обращать внимания на это обстоятельство.

    Состояние маршрута
    OSPF представляет собой протокол состояния маршрута. В качестве метрик используются — пропускная способность, надежность и стоимость.

    Открытость и наличие программного обеспечения под GPL.
    OSPF — это открытый протокол, а Zebra выпускается под GPL, что дает дополнительные преимущества перед проприетарными протоколами и программными продуктами.

    Предварительные условия

    Ядро Linux:
    Собранное с CONFIG_NETLINK_DEV и CONFIG_IP_MULTICAST (я не вполне уверен, возможно требуется еще что-то)

    Iproute
    Zebra
    Пакет может входить в состав вашего дистрибутива. Если нет, обращайтесь на http://www.zebra.org/.

    Конфигурирование

    Рассмотрим конфигурирование Zebra на примере сети:

    ----------------------------------------------------
    | 192.168.0.0/24                                   |
    |                                                  |
    |      Area 0    100BaseTX Switched                |
    |     Backbone     Ethernet                        |
    ----------------------------------------------------
      |           |                |              |
      |           |                |              |
      |eth1       |eth1            |eth0          |
      |100BaseTX  |100BaseTX       |100BaseTX     |100BaseTX
      |.1         |.2              |.253          |
     ---------   ------------   -----------      ----------------
     |R Omega|   |R Atlantis|   |R Legolas|      |R Frodo       |
     ---------   ------------   -----------      ----------------
      |eth0         |eth0             |             |          |
      |             |                 |             |          |
      |2MbDSL/ATM   |100BaseTX        |10BaseT      |10BaseT   |10BaseT
    ------------   ------------------------------------       -------------------------------
    | Internet |   | 172.17.0.0/16        Area 1      |       |  192.168.1.0/24 wlan  Area 2|
    ------------   |         Student network (dorm)   |       |       barcelonawireless     |
                   ------------------------------------       -------------------------------

    Пусть вас не пугает эта схема — дело в том, что большую часть работы Zebra выполнит самостоятельно и вам не потребуется вручную \”поднимать\” все маршруты. Самое главное, что вы должны уяснить из этой схемы — это топология сети. И особое внимание обратите на область 0 (area 0), как самую важную часть. Для начала сконфигурируем zebra под свои потребности (поправим файл zebra.conf):

    hostname omega
    password xxx 
    enable password xxx
    !
    ! Описание интерфейсов.
    !
    !interface lo
    ! пример описания интерфейса.
    !
    interface eth1
    multicast
    !
    ! Статический маршрут по-умолчанию
    !
    ip route 0.0.0.0/0 212.170.21.129
    !
    log file /var/log/zebra/zebra.log

    В дистрибутиве Debian, кроме того необходимо подредактировать файл /etc/zebra/daemons, чтобы обеспечить запуск демонов во время загрузки системы.

    zebra=yes
    ospfd=yes

    Затем нужно внести соответствующие изменения в ospfd.conf (для случая IPv4) или в ospf6d.conf (для случая IPv6). Мой ospfd.conf выглядит так:

    hostname omega
    password xxx
    enable password xxx
    !
    router ospf
      network 192.168.0.0/24 area 0
      network 172.17.0.0/16 area 1
    !
    ! направить вывод на stdout в журнал
    log file /var/log/zebra/ospfd.log

    Здесь размещены инструкции, описывающие топологию сети.Запуск Zebra

    Теперь запустим Zebra. Сделать это можно вручную — дав прямую команду zebra -d, либо с помощью сценария начальной загрузки — /etc/init.d/zebra start. После запуска, в журнале ospfd.log, появятся строки, примерно с таким содержанием:

    2002/12/13 22:46:24 OSPF: interface 192.168.0.1 join AllSPFRouters Multicast group.
    2002/12/13 22:46:34 OSPF: SMUX_CLOSE with reason: 5   
    2002/12/13 22:46:44 OSPF: SMUX_CLOSE with reason: 5
    2002/12/13 22:46:54 OSPF: SMUX_CLOSE with reason: 5   
    2002/12/13 22:47:04 OSPF: SMUX_CLOSE with reason: 5   
    2002/12/13 22:47:04 OSPF: DR-Election[1st]: Backup 192.168.0.1
    2002/12/13 22:47:04 OSPF: DR-Election[1st]: DR     192.168.0.1
    2002/12/13 22:47:04 OSPF: DR-Election[2nd]: Backup 0.0.0.0
    2002/12/13 22:47:04 OSPF: DR-Election[2nd]: DR     192.168.0.1
    2002/12/13 22:47:04 OSPF: interface 192.168.0.1 join AllDRouters Multicast group.
    2002/12/13 22:47:06 OSPF: DR-Election[1st]: Backup 192.168.0.2
    2002/12/13 22:47:06 OSPF: DR-Election[1st]: DR     192.168.0.1
    2002/12/13 22:47:06 OSPF: Packet[DD]: Negotiation done (Slave).
    2002/12/13 22:47:06 OSPF: nsm_change_status(): scheduling new router-LSA origination
    2002/12/13 22:47:11 OSPF: ospf_intra_add_router: Start

    Не обращайте внимания на строки \”…SMUX_CLOSE…\”, поскольку они относятся к SNMP и не представляют интереса для нас. Из приведенного листинга видно, что 192.168.0.1 — это Выделенный Маршрутизатор (Designated Router), а 192.168.0.2 —Резервный Выделенный Маршрутизатор (Backup Designated Router).

    И zebra, и ospfd допускают возможность интерактивного взаимодействия с ними через telnet:

    $ telnet localhost zebra
    $ telnet localhost ospfd

    Попробуем посмотреть список установленных маршрутов, залогировавшись в zebra:

    root@atlantis:~# telnet localhost zebra
    Trying 127.0.0.1...
    Connected to atlantis.
    Escape character is \'^]\'.
    
    Hello, this is zebra (version 0.92a).
    Copyright 1996-2001 Kunihiro Ishiguro.
    
    User Access Verification
    
    Password: 
    atlantis> show ip route
    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
           B - BGP, > - selected route, * - FIB route
    
    K>* 0.0.0.0/0 via 192.168.0.1, eth1
    C>* 127.0.0.0/8 is directly connected, lo
    O   172.17.0.0/16 [110/10] is directly connected, eth0, 06:21:53
    C>* 172.17.0.0/16 is directly connected, eth0
    O   192.168.0.0/24 [110/10] is directly connected, eth1, 06:21:53
    C>* 192.168.0.0/24 is directly connected, eth1
    atlantis> show ip ospf border-routers
    ============ OSPF router routing table =============
    R    192.168.0.253         [10] area: (0.0.0.0), ABR
    			   via 192.168.0.253, eth1
    				 [10] area: (0.0.0.1), ABR
    			   via 172.17.0.2, eth0

    или напрямую, с помощью iproute:

    root@omega:~# ip route
    212.170.21.128/26 dev eth0  proto kernel  scope link  src 212.170.21.172 
    192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.1 
    172.17.0.0/16 via 192.168.0.2 dev eth1  proto zebra  metric 20 
    default via 212.170.21.129 dev eth0  proto zebra 
    root@omega:~#

    Отсюда видно, что zebra добавила ряд маршрутов, которых в таблице раньше не было. Новые маршруты появляются спустя несколько секунд после того, как были запущены zebra и ospfd. Теперь вы можете попробовать ping-ануть некоторые из узлов сети.Zebra выставляет маршруты автоматически, все что от вас требуется — прописать маршрутизаторы в конфигурационный файл и этого будет достаточно!

    Для захвата и анализа OSPF-пакетов можно воспользоваться командой:

    tcpdump -i eth1 ip[9] == 89

    где число 89 — это номер протокола OSPF, а 9 — это номер октета в ip-заголовке, где хранится номер протокола.

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