Связываем вместе quagga, openospfd, openbgpd

Все знают quagga (потомок zebr’ы). Недавно услышал, что есть такая штука, как openbgpd,openospfd. Решил попробовать, что оно такое, и что лучше.

Народ пишет, что «детища» open’ка (openbgpdopenospfd) работают шустрее, чем та же quagga, и нагрузка на сервак меньше. У меня, к сожалению нет возможности сравнить их при, например, 100 000 анонсах и посмотреть, кто как работает, поэтому, опишу базовую настройку, и обслуживаение.

Будем исходить из того, что quaggaopenbgpdopenospfd у вас уже стоят. Если нет — тогда бегом обновляем порты, и ставим их. Они находятся в /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, но на самом деле это не что иное, как собранные вместе пакеты openbgpdopenpspfdopenrip. Поэтому, синтаксис должен походить на синтаксис open. Естественно, что запускать нужно каждый демон отдельно.

Синтаксис пакетов не похож на цисковский и квагговский, поэтому будьте внимательны.

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 vty

cat 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.65

network 6.6.6.6/8
network 7.7.7.7/10

neighbor 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 connected

router-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 route

K>* 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 tables

Internet:
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, ? = Incomplete

flags 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 route

flags 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *