Как только ваша локальная сеть становится достаточно большой, или вы приступаете к обслуживанию некоего сегмента Интернет, у вас сразу же возникает необходимость в динамической маршрутизации ваших данных.
Интернет стандартизирован главным образом на 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 :-)
Пожалуйста, дайте мне знать -- насколько верна следующая информация, а так же присылайте ваши предложения, комментарии. 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 представляет собой протокол состояния маршрута. В качестве метрик используются -- пропускная способность, надежность и стоимость.
OSPF -- это открытый протокол, а Zebra выпускается под GPL, что дает дополнительные преимущества перед проприетарными протоколами и программными продуктами.
Собранное с CONFIG_NETLINK_DEV и CONFIG_IP_MULTICAST (я не вполне уверен, возможно требуется еще что-то)
Пакет может входить в состав вашего дистрибутива. Если нет, обращайтесь на 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 -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.
| Назад | В начало документа | Вперед |
| Псевдо-мосты с проксированием ARP. | Настройка BGP4 с помощью Zebra. |