• 17.1. Настройка ospf в zebra
  • 17.1.1. Предварительные условия.
  • 17.1.2. Конфигурирование.
  • 17.1.3. Запуск zebra
  • 17.2. Настройка BGP4 с помощью ZEBRA.
  • 17.2.1. Конфигурация сети (пример).
  • 17.2.2. Конфигурирование (пример).
  • 17.2.3. Проверка конфигурации.
  • Глава 17. Динамическая маршрутизация — OSPF и BGP.

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

    Интернет стандартизирован главным образом на OSPF (от англ. Open Shortest Pass First — Открытый протокол поиска Кратчайшего Маршрута. RFC 2328) и BGP4 (Border Gateway Protocol — Протокол Пограничных Маршрутизаторов, RFC 1771). Linux поддерживает оба, посредством gated и zebra.

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

    Краткий обзор:

    Cisco Systems Designing large-scale IP Internetworks

    Протокол OSPF:

    Moy, John T. "OSPF. The anatomy of an Internet routing protocol" Addison Wesley. Reading, MA. 1998.

    Протокол BGP:

    Halabi, Bassam "Internet routing architectures" Cisco Press (New Riders Publishing). Indianapolis, IN. 1997.

    А так же:

    Cisco Systems Using the Border Gateway Protocol for interdomain routing

    Хотя примеры приводятся исключительно для маршрутизаторов Cisco, они практически полностью совпадают с языком конфигурирования в Zebra :-)

    17.1. Настройка 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, что дает дополнительные преимущества перед проприетарными протоколами и программными продуктами.

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

    Ядро Linux:

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


    Iproute


    Zebra

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

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

    Рассмотрим конфигурирование 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

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

    17.1.3. Запуск 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.

    17.2. Настройка BGP4 с помощью ZEBRA.

    Версия 4 Протокола Пограничных Маршрутизаторов (BGP4) — это протокол динамический маршрутизации, описанный в RFC 1771. Он предназначен для обмена информацией (т.е. таблицами маршрутизации) между маршрутизаторами, с целью обеспечить согласующееся представление о данной Автономной Системе (Autonomous System — AS). Может использоваться в режиме EGP (от англ. Exterior Gateway Protocol — Протокол Внешних Маршрутизаторов) или IGP (от англ. Interior Gateway Protocol – Протокол Внутренних Маршрутизаторов). В случае EGP — требуется, чтобы каждый из узлов сети имел свой собственный номер Автономной Системы (AS). BGP4 поддерживает Безклассовую Внутридоменную Маршрутизацию (Classless Inter Domain Routing — CIDR) и объединение маршрутов (объединение нескольких маршрутов в один).

    17.2.1. Конфигурация сети (пример).

    Последующие примеры будем рассматривать на основе конфигурации сети, которая приведена ниже. AS 1 и 50 имеют еще ряд "соседей", но мы будем рассматривать только эти две Автономные Системы, в качестве своих "соседей". Взаимодействие между сетями, в данном примере, производится через туннели, но в общем случае это не обязательно.

    Note

    В данном примере используются зарезервированные номера AS, поэтому вы должны будете подставить свои собственные числа.

              --------------------

              | 192.168.23.12/24 |

              |    AS: 23        |

              --------------------

                /             \

               /               \

              /                 \

    ------------------       ------------------

    | 192.168.1.1/24 |-------| 10.10.1.1/16   |

    |    AS: 1       |       |    AS: 50      |

    ------------------       ------------------ 

    17.2.2. Конфигурирование (пример).

    Следующая конфигурация написана для узла 192.168.23.12/24, но может быть с легкостью адаптирована и для других узлов.

    Начинается с установки некоторых общих параметров, таких как: имя хоста, пароль и ключи отладки:

    ! имя хоста

    hostname anakin


    ! пароль

    password xxx


    ! разрешить пароль (режим суперпользователя)

    enable password xxx


    ! путь к файлу журнала

    log file /var/log/zebra/bgpd.log


    ! отладка: выводить отладочную информацию (этот раздел позднее может быть удален)

    debug bgp events

    debug bgp filters

    debug bgp fsm

    debug bgp keepalives

    debug bgp updates

    Список доступа, используемый для ограничения перераспределения в локальных сетях (RFC 1918).

    ! RFC 1918 networks

    access-list local_nets permit 192.168.0.0/16

    access-list local_nets permit 172.16.0.0/12

    access-list local_nets permit 10.0.0.0/8

    access-list local_nets deny any

    Следующий шаг – настройка каждой из AS:

    ! Собственный номер AS

    router bgp 23


     ! IP-адрес маршрутизатора

     bgp router-id 192.168.23.12


     ! наша сеть, для оповещения "соседей"

     network 192.168.23.0/24


     ! объявлять о всех подключенных маршрутах (= непосредственно подключенных интерфейсах)

     redistribute connected


     ! объявлять о корневых маршрутах (= подставленных вручную)

     redistribute kernel

    Блок "router bgp" должен содержать сведения о своих "соседях":

    neighbor 192.168.1.1 remote-as 1

    neighbor 192.168.1.1 distribute-list local_nets in

    neighbor 10.10.1.1 remote-as 50

    neighbor 10.10.1.1 distribute-list local_nets in

    17.2.3. Проверка конфигурации.

    Note

    vtysh — это мультиплексор, соединяющий все интерфейсы Zebra.

    anakin# sh ip bgp summary

    BGP router identifier 192.168.23.12, local AS number 23

    2 BGP AS-PATH entries

    0 BGP community entries


    Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

    10.10.0.1       4    50      35      40        0    0    0 00:28:40        1

    192.168.1.1     4     1   27574   27644        0    0    0 03:26:04       14


    Total number of neighbors 2

    anakin#

    anakin# sh ip bgp neighbors 10.10.0.1

    BGP neighbor is 10.10.0.1, remote AS 50, local AS 23, external link

      BGP version 4, remote router ID 10.10.0.1

      BGP state = Established, up for 00:29:01

      ....

    anakin#    

    А теперь посмотрим — какие маршруты были получены от "соседей":

    anakin# sh ip ro bgp

    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,

           B - BGP, > - selected route, * - FIB route


    B>* 172.16.0.0/14 [20/0] via 192.168.1.1, tun0, 2d10h19m

    B>* 172.30.0.0/16 [20/0] via 192.168.1.1, tun0, 10:09:24

    B>* 192.168.5.10/32 [20/0] via 192.168.1.1, tun0, 2d10h27m

    B>* 192.168.5.26/32 [20/0] via 192.168.1.1, tun0, 10:09:24

    B>* 192.168.5.36/32 [20/0] via 192.168.1.1, tun0, 2d10h19m

    B>* 192.168.17.0/24 [20/0] via 192.168.1.1, tun0, 3d05h07m

    B>* 192.168.17.1/32 [20/0] via 192.168.1.1, tun0, 3d05h07m

    B>* 192.168.32.0/24 [20/0] via 192.168.1.1, tun0, 2d10h27m

    anakin#







     

    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх