Все знают quagga (потомок zebr'ы). Недавно услышал, что есть такая штука, как openbgpd, openospfd. Решил попробовать, что оно такое, и что лучше.
Народ пишет, что "детища" open'ка (openbgpd, openospfd) работают шустрее, чем та же quagga, и нагрузка на сервак меньше. У меня, к сожалению нет возможности сравнить их при, например, 100 000 анонсах и посмотреть, кто как работает, поэтому, опишу базовую настройку, и обслуживаение.
Будем исходить из того, что quagga, openbgpd, openospfd у вас уже стоят. Если нет - тогда бегом обновляем порты, и ставим их. Они находятся в /usr/port/net.
Кратко скажу о топологии сети, в которой находятся роутеры. Это обычная тестовая локалка, в ней 3 машины, один интерфейс каждой из них смотрит в локалку 192.168.5.0/24, остальные - тестовые, им спецом прибиты IP, что бы проверить работу динамической машрутизации.
quagga - 192.168.5.8
openbgpd - 1912.168.5.65
openospfd - 192.168.5.10
0)Предисловие.
Для удачной работы протокола ospf, нужно выставить переменную sysctl
net.inet.ip.forwarding=1
иначе, будет выдавать предпреждение
WARNING: IP forwarding NOT enabled, running as stub router
что означает, что роутер не будет принимать внешние маршруты.
Ещё хочется отметить такой факт под openbsd. В портах есть пакет quagga, но на самом деле это не что иное, как собранные вместе пакеты openbgpd, openpspfd, openrip. Поэтому, синтаксис должен походить на синтаксис open. Естественно, что запускать нужно каждый демон отдельно.
Синтаксис пакетов не похож на цисковский и квагговский, поэтому будьте внимательны.
1)Конфиг quagga.
Параметры сервака:
#uname -r6.2-RELEASE
# ifconfiglnc0: flags=108843 mtu 1500 inet 192.168.5.8 netmask 0xffffff00 broadcast 192.168.5.255 ether 00:0c:29:53:64:64lo0: flags=8049 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000vlan2: flags=8843 mtu 1496 inet 11.11.11.11 netmask 0xffe00000 broadcast 11.31.255.255 ether 00:0c:29:53:64:64 vlan: 2 parent interface: lnc0
#cat bgpd.conf
hostname r1password bgpdlog file /var/log/quagga/bgpd.log!router bgp 8 bgp router-id 192.168.5.8 network 1.0.0.0/8 network 2.2.0.0/16 neighbor 192.168.5.65 remote-as 65!line vty
cat ospfd.confhostname r1password ospfdlog file /var/log/quagga/ospfd.log!!!interface lnc0!interface lo0!interface plip0!router ospf ospf router-id 192.168.5.8 network 11.11.11.11/11 area 0.0.0.0 network 192.168.5.0/24 area 0.0.0.0 neighbor 192.168.5.10
!line vty
2)Конфиг openbgpd
# uname -r8.0-RELEASE
# ifconfigem0: flags=8843 metric 0 mtu 1500 options=9b ether 00:0c:29:91:76:1b inet 192.168.5.65 netmask 0xffffff00 broadcast 192.168.5.255 media: Ethernet autoselect (1000baseT ) status: activelo0: flags=8049 metric 0 mtu 16384 options=3 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000
#cat /usr/local/etc/bgpd.conf
AS 65log updatesrouter-id 192.168.5.65network 6.6.6.6/8network 7.7.7.7/10neighbor 192.168.5.8 { remote-as 8}
Права на файл /usr/local/etc/bgpd.conf должны быть root:wheel, 0600
3)Конфиг openospfd
#uname -r7.0-RELEASE
# ifconfigle0: flags=8843 metric 0 mtu 1500 options=8 ether 00:0c:29:02:16:bd inet 192.168.5.10 netmask 0xffffff00 broadcast 192.168.5.255 media: Ethernet autoselect status: activelo0: flags=8049 metric 0 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000vlan1: flags=8843 metric 0 mtu 1500 ether 00:0c:29:02:16:bd inet 22.22.22.22 netmask 0xfffffc00 broadcast 22.22.23.255 media: Ethernet autoselect status: active vlan: 1 parent interface: le0
#cat ospfd.conf
fib-update yesredistribute staticredistribute connectedrouter-id 192.168.5.10area 0.0.0.0 { interface le0 interface vlan1}
Права на файл /usr/local/etc/ospfd.conf должны быть root:wheel, 0600
4)Проверяем работу quagga.
А теперь самое интересное: запускаем демоны, и смотрим, пошёл ли процесс обмена:
$ telnet localhost 2601Trying ::1...Connected to localhost.Escape character is '^]'.Hello, this is Quagga (version 0.99.15).Copyright 1996-2005 Kunihiro Ishiguro, et al.User Access VerificationPassword:r1> sh ip routeCodes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB routeK>* 0.0.0.0/0 via 192.168.5.1, lnc0B>* 6.0.0.0/8 [20/0] via 192.168.5.65, lnc0, 01:15:05B>* 7.0.0.0/10 [20/0] via 192.168.5.65, lnc0, 01:15:04O 11.0.0.0/11 [110/10] is directly connected, vlan2, 01:15:19C>* 11.0.0.0/11 is directly connected, vlan2O>* 22.22.20.0/22 [110/20] via 192.168.5.10, lnc0, 01:19:04C>* 127.0.0.0/8 is directly connected, lo0O 192.168.5.0/24 [110/10] is directly connected, lnc0, 01:53:09C>* 192.168.5.0/24 is directly connected, lnc0
Видим, что у нас есть машруты, как с bgp так и с ospf. Посмотрим, что у нас происходит в таблице маршрутизации на самом сервере:
$ netstat -rnRouting tablesInternet:Destination Gateway Flags Refs Use Netif Expiredefault 192.168.5.1 UGS 0 54633 lnc06 192.168.5.65 UG1 0 0 lnc07/10 192.168.5.65 UG1 0 0 lnc011/11 link#4 UC 0 0 vlan211.31.255.255 ff:ff:ff:ff:ff:ff UHLWb 1 107 vlan222.22.20/22 192.168.5.10 UG1 0 0 lnc0127.0.0.1 127.0.0.1 UH 0 74 lo0192.168.5 link#1 UC 0 0 lnc0192.168.5.1 link#1 UHLW 2 48 lnc0192.168.5.2 00:1a:4d:50:dd:c8 UHLW 1 35752 lnc0 1193192.168.5.10 00:0c:29:02:16:bd UHLW 2 0 lnc0 861192.168.5.65 00:0c:29:91:76:1b UHLW 3 567 lnc0 166192.168.5.255 ff:ff:ff:ff:ff:ff UHLWb 1 710 lnc0
Как видим, все маршруты помещены в таблицу маршрутизации.
5)Проверяем работу openbgpd.
Для управления работой bgpd демона, существует утилита bgpctl, с помощью которой можно на ходу менять, смотреть таблицу маршрутзации:
#bgpctl show ribflags: * = Valid, > = Selected, I = via IBGP, A = Announcedorigin: i = IGP, e = EGP, ? = Incompleteflags destination gateway lpref med aspath origin*> 1.0.0.0/8 192.168.5.8 100 0 8 i*> 2.2.0.0/16 192.168.5.8 100 0 8 iAI*> 6.0.0.0/8 0.0.0.0 100 0 iAI*> 7.0.0.0/10 0.0.0.0 100 0 i
#bgpctl show fibflags: * = valid, B = BGP, C = Connected, S = Static N = BGP Nexthop reachable via this route r = reject route, b = blackhole routeflags prio destination gateway*S 0 0.0.0.0/0 192.168.5.1*B 48 1.0.0.0/8 192.168.5.8*B 48 2.2.0.0/16 192.168.5.8*C 0 127.0.0.1/8 link#0*C 0 127.0.0.1/32 link#3*CN 0 192.168.5.0/24 link#1*C 0 192.168.5.65/32 link#3
Примечание. На 6-ку freebsd не хотело устанавливаться, получилось только на 8-ку.
6)Проверяем работу openospfd.
Здесь так же есть утилита управления демоном ospfctl. Собственно смотрим:
# ospfctl show ribDestination Nexthop Path Type Type Cost Uptime11.0.0.0/11 192.168.5.8 Intra-Area Network 20 01:26:00192.168.5.0/24 192.168.5.10 Intra-Area Network 10 01:29:48
# ospfctl show fibflags: * = valid, O = OSPF, C = Connected, S = StaticFlags Destination Nexthop*S 0.0.0.0/0 192.168.5.1*O 11.0.0.0/11 192.168.5.8*C 22.22.20.0/22 link#4*C 127.0.0.1/8 link#0* 127.0.0.1/32 127.0.0.1*C 192.168.5.0/24 link#1
Примечание. Здесь так же меньше настроек, чем в ospf (quagga).
7) Заключение.
Лично я так пока и не определился с тем, что выбрать. Пока сижу на quagga, там больше возможностей по настройке под свои нужды. Так же разнится синтаксис: под quagga - он больше походит на цисковский.