Все знают quagga (потомок zebr’ы). Недавно услышал, что есть такая штука, как openbgpd,openospfd. Решил попробовать, что оно такое, и что лучше.
Для справки, наиболее распространенные software реализации BGP/OSPF:
Народ пишет, что “детища” 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. Естественно, что запускать нужно каждый демон отдельно.
Синтаксис конфигов не похож на cisco/quagga (чем-то напоминает juniper), поэтому будьте внимательны.
1) Конфиг quagga.
Параметры сервака:
#uname -r
6.2-RELEASE# ifconfig
lnc0: flags=108843 mtu 1500
inet 192.168.5.8 netmask 0xffffff00 broadcast 192.168.5.255
ether 00:0c:29:53:64:64
lo0: flags=8049 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
vlan2: 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 r1
password bgpd
log 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 vtycat ospfd.conf
hostname r1
password ospfd
log 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 -r
8.0-RELEASE# ifconfig
em0: 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: active
lo0: 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 65
log updates
router-id 192.168.5.65network 6.6.6.6/8
network 7.7.7.7/10neighbor 192.168.5.8 {
remote-as 8
}
Права на файл /usr/local/etc/bgpd.conf должны быть root:wheel, 0600
3) Конфиг openospfd
Параметры сервака:
#uname -r
7.0-RELEASE# ifconfig
le0: 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: active
lo0: flags=8049 metric 0 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
vlan1: 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 yes
redistribute static
redistribute connectedrouter-id 192.168.5.10
area 0.0.0.0 {
interface le0
interface vlan1
}
Права на файл /usr/local/etc/ospfd.conf должны быть root:wheel, 0600
4) Проверяем работу quagga.
А теперь самое интересное: запускаем демоны, и смотрим, пошёл ли процесс обмена:
$ telnet localhost 2601
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.User Access Verification
Password:
r1> sh ip route
Codes: 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, lnc0
B>* 6.0.0.0/8 [20/0] via 192.168.5.65, lnc0, 01:15:05
B>* 7.0.0.0/10 [20/0] via 192.168.5.65, lnc0, 01:15:04
O 11.0.0.0/11 [110/10] is directly connected, vlan2, 01:15:19
C>* 11.0.0.0/11 is directly connected, vlan2
O>* 22.22.20.0/22 [110/20] via 192.168.5.10, lnc0, 01:19:04
C>* 127.0.0.0/8 is directly connected, lo0
O 192.168.5.0/24 [110/10] is directly connected, lnc0, 01:53:09
C>* 192.168.5.0/24 is directly connected, lnc0
Видим, что у нас есть машруты, как с bgp так и с ospf. Посмотрим, что у нас происходит в таблице маршрутизации на самом сервере:
$ netstat -rn
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.5.1 UGS 0 54633 lnc0
6 192.168.5.65 UG1 0 0 lnc0
7/10 192.168.5.65 UG1 0 0 lnc0
11/11 link#4 UC 0 0 vlan2
11.31.255.255 ff:ff:ff:ff:ff:ff UHLWb 1 107 vlan2
22.22.20/22 192.168.5.10 UG1 0 0 lnc0
127.0.0.1 127.0.0.1 UH 0 74 lo0
192.168.5 link#1 UC 0 0 lnc0
192.168.5.1 link#1 UHLW 2 48 lnc0
192.168.5.2 00:1a:4d:50:dd:c8 UHLW 1 35752 lnc0 1193
192.168.5.10 00:0c:29:02:16:bd UHLW 2 0 lnc0 861
192.168.5.65 00:0c:29:91:76:1b UHLW 3 567 lnc0 166
192.168.5.255 ff:ff:ff:ff:ff:ff UHLWb 1 710 lnc0
Как видим, все маршруты помещены в таблицу маршрутизации.
5) Проверяем работу openbgpd.
Для управления работой bgpd демона, существует утилита bgpctl, с помощью которой можно на ходу менять, смотреть таблицу маршрутизации:
#bgpctl show rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced
origin: 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 i
AI*> 6.0.0.0/8 0.0.0.0 100 0 i
AI*> 7.0.0.0/10 0.0.0.0 100 0 i#bgpctl show fib
flags: * = 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 rib
Destination Nexthop Path Type Type Cost Uptime
11.0.0.0/11 192.168.5.8 Intra-Area Network 20 01:26:00
192.168.5.0/24 192.168.5.10 Intra-Area Network 10 01:29:48# ospfctl show fib
flags: * = valid, O = OSPF, C = Connected, S = Static
Flags 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 – он больше походит на цисковский.
Оригинал статьи здесь.
Опубликовано с разрешения редакции журнала RootUA и газеты FOSS News