Протокол динамической маршрутизации BGP. Настройка bgp в Quagga
Очень важным достоинством quagga или zebra, когда zebra развивалась на некоммерческой основе, является то, что синтаксис у нее полностью совместим с синтаксисом CLI Cisco и когда наконец то заработала командная строка quagga, называемая vtysh, удобство настройки quagga стало максимальным. В этой статье я коснусь только самых основ настройки bgp сессий, а в следующих статьях, уже разберем вполне работоспособные примеры.
Для начала установим quagga:
cd /usr/ports/net/quagga make install clean |
в меню настройки порта выберем только последний пункт, а именно использование dmalloc, этот пункт рекомендуют для ускорения работы quagga, диалог будет иметь такой вид:
┌────────────────────────────────────────────────────────────────────┐ │ Options for quagga 0.99.12 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] ISISD Enable experimental ISIS daemon │ │ │ │ [ ] PAM PAM authentication for vtysh │ │ │ │ [ ] OSPF_NSSA NSSA support (RFC1587) │ │ │ │ [ ] OSPF_OPAQUE_LSA OSPF Opaque-LSA support (RFC2370) │ │ │ │ [ ] RTADV IPv6 Router Advertisements │ │ │ │ [ ] SNMP SNMP support │ │ │ │ [ ] TCPSOCKETS Use TCP/IP sockets for protocol daemons │ │ │ │ [X] DLMALLOC Use dlmalloc (makes bgpd much faster) │ │ │ │ │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘ |
Теперь разрешим запуск:
echo "quagga_enable=YES" >> /etc/rc.conf echo 'quagga_daemons="zebra bgpd"' >> /etc/rc.conf |
А перед запуском из директории с примерами конфигов скопируем bgpd.conf.sample, vtysh.conf.sample и zebra.conf.sample
cd /usr/local/etc/quagga/ cp /usr/local/share/examples/quagga/bgpd.conf.sample ./bgpd.conf cp /usr/local/share/examples/quagga/vtysh.conf.sample ./vtysh.conf cp /usr/local/share/examples/quagga/zebra.conf.sample ./zebra.conf |
и запустим quagga:
/usr/local/etc/rc.d/quagga start |
После того, как вы запустите quagga, можно переходить к настройке, для этого я предпочитаю использовать vtysh.
Запустим его:
vtysh |
появится командная строка в которой можно начинать настройку.
А прежде чем начать настройку, чуть чуть теории, самый минимум. BGP — аббревиатура означающая протокол граничных маршрутизаторов
Маршрутизация в интернет основана на протоколе bgp, обмен информации о маршрутах происходит между граничными маршрутизаторами автономных систем. Автономная система или AS, это совокупность сетей объедененных под одним управлением и имеющий выделенный идентификатор. Идентификатор — это целое число, которое как и ip в европе выдает RIPE. Для своих тренировок мы воспользуемся специально зарезервироваными номерами AS для локальных сетей. Схема взаимодействия двух автономных систем будет выглядеть так:
Поскольку это взаимодействие граничных маршрутизаторов, то между ними сеть будет 192.168.0.0/30, этого достаточно для построения взаимодействия.
Поскольку со схемой, принципами и терминологией разобрались приступим к настройке первого маршрутизатора, анонсирующего сеть 192.168.1.0/24 под автономной системой 65534 и интерфейсом взаимодействия с пиром 192.168.0.1, второй интерфейс его соответственно является шлюзом для сети 192.168.1.0/24
В командной строке vtysh начнем последовательно вводить команды:
configure terminal no router bgp 7675 router bgp 65534 bgp router-id 192.168.0.1 network 192.168.1.0/24 neighbor 192.168.0.2 remote-as 65535 neighbor 192.168.0.2 soft-reconfiguration inbound write memory |
Команда no router bgp 7675 удалает конфигурацию bgp созданную по умолчанию в файле примере bgpd.conf
Теперь переходим ко второму маршрутизатору, на нем точно так же должна быть установлена и запущена quagga.
configure terminal no router bgp 7675 router bgp 65535 bgp router-id 192.168.0.2 network 192.168.2.0/24 neighbor 192.168.0.1 remote-as 65534 neighbor 192.168.0.1 soft-reconfiguration inbound write memory |
Теперь на первом роутере выходим из режима настройки bgp сессии нажатием комбинации Ctrl-Z и оставшись в командной строке vtysh выполнить немного команд что бы убедится в том что сессия установилась:
show ip bgp summary |
Увидим такой вывод этой комманды:
BGP router identifier 192.168.0.1, local AS number 65534 RIB entries 3, using 192 bytes of memory Peers 1, using 2520 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.0.2 4 65535 5 11 0 0 0 00:03:04 1 Total number of neighbors 1 |
В этой информации видно что мы приняли 1 префикс(одну сеть) от нашего партнера 192.168.0.2 с удаленной автономной системы 65535. Настройки сделаны правильно.
Подробную информацию о партнере по bgp можно увидеть так:
show ip bgp neighbors 192.168.0.2 |
И подробная информация выглядит так:
BGP neighbor is 192.168.0.2, remote AS 65535, local AS 65534, external link BGP version 4, remote router ID 192.168.0.2 BGP state = Established, up for 00:08:29 Last read 00:00:29, hold time is 180, keepalive interval is 60 seconds Neighbor capabilities: 4 Byte AS: advertised and received Route refresh: advertised and received(old & new) Address family IPv4 Unicast: advertised and received Message statistics: Inq depth is 0 Outq depth is 0 Sent Rcvd Opens: 5 0 Notifications: 0 0 Updates: 1 1 Keepalives: 10 9 Route Refresh: 0 0 Capability: 0 0 Total: 16 10 Minimum time between advertisement runs is 30 seconds For address family: IPv4 Unicast Community attribute sent to this neighbor(both) 1 accepted prefixes Connections established 1; dropped 0 Last reset never Local host: 192.168.0.1, Local port: 179 Foreign host: 192.168.0.2, Foreign port: 59783 Nexthop: 192.168.0.1 Nexthop global: fe80::21c:f0ff:fe9e:56ba Nexthop local: :: BGP connection: non shared network Read thread: on Write thread: off |
Тут мы видим, что BGP state = Established, up for 00:08:29 — состояние сессии установлено 8 минут 29 секунд назад, Видим локальную автономную систему и удаленную, к слову сказать эта информация повторяет инофрмацию на маршрутизаторах Cisco, а там можно держать не одну автономку, а много и информация по локальному асу для определенного нейджбора является полезной. Далее видим что приняли 1 сеть(префикс): 1 accepted prefixes и видим
Nexthop, следующий адрес в маршруте. В общем все нормально.
Теперь проверим анонс какой же сети мы принимаем:
show ip route bgp |
и видим:
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route B>* 192.168.2.0/24 [20/0] via 192.168.0.2, em0, 00:19:40 |
Тут мы видим что 192.168.2.0/24 анонсирована по протоколу bgp через маршрутизатор 192.168.0.2, маршрут известен 00:19:40.
И выйдя из vtysh нажатием Ctrl-D можно проверить таблицу маршутизации хоста:
netstat -rn |
и увидим:
192.168.2.0/24 192.168.0.2 UG1 0 51 em0 |
Сеть попала в таблицу маршрутизации роутера. Все настроено.
By Plastilin, 29.08.2009 @ 21:27
А не смотрели в сторону Vyatta?
By hilik, 31.08.2009 @ 11:05
Не смотрел.
By hilik, 04.09.2009 @ 10:44
Начал разбираться с Vyatta. Скоро думаю пойдет цикл статей о ней, если конечно она стоит того.
By ayava, 21.10.2009 @ 19:22
А можно это сделать когда у меня 20 разных подключений по нашей родине у 10 разных провайдеров?
By hilik, 22.10.2009 @ 12:24
Теоретически можно. Одно из самых простых решений, это объединение разорванных сегментов вашей автономной системы, через туннели. Правда обслуживать такую автономную систему будет ох как не просто. Есть еще варианты, но я их на вскидку не вспомню. Поскольку управляю обычной автономной системой и доступ к региональным представительствам, организовуется с помощью L2 транспортов.