BGP (англ. Border Gateway Protocol, протокол граничного шлюза) — основной протокол динамической маршрутизации в Интернете. Протокол, о котором можно сказать, что на нем держится весь Интернет. Суть его в том, что каждый маршрутизатор сообщает соседям, какие сети он маршрутизирует. В ответ соседи сообщают ему, какие сети доступны через них, через их соседей и т.д. Имея несколько BGP-линков, появляется возможность выбирать тот линк, через который маршрут до какой-либо сети будет короче и т.д.
Но тема этой заметки не о самом протоколе BGP, а о его свободной реализации — quagga. Следует заметить, что quagga также поддерживает OSPF и RIP, но мы рассмотрим только BGP. Я приведу несколько несложных примеров использования quagga с конфигами и логами.
Каждый демон из пакета quagga по умолчанию слушает определенный порт на 127.0.0.1 (2601 для zebra, 2605 для bgpd) и может управляться при помощи telnet. Интерфейс сделан в стиле Cisco.
Теперь опишу несколько примеров использования BGP.
Пример связи двух BGP-роутеров приводить думаю смысла нет, перейдем сразу к более сложным примерам.
Пример использования – связка: ваш аплинк; вы; ваш клиент, имеющий свою AS и подсеть и физический линк с вами. Привожу конфиг и вывод команды
Пример использования – у вас два аплинка. А также, в силу того, что пример весьма синтетический, он также демонстрирует отказоустойчивое кольцо: связь между bgpd1 и bgpd4 не потеряется при падении bgpd2 или bgpd3 (но не обоих одновременно).
Но тема этой заметки не о самом протоколе BGP, а о его свободной реализации — quagga. Следует заметить, что quagga также поддерживает OSPF и RIP, но мы рассмотрим только BGP. Я приведу несколько несложных примеров использования quagga с конфигами и логами.
. . .
Quagga состоит из нескольких демонов:- bgpd, ospfd, ripd – занимаются соответствующими протоколами.
- watchquagga – следит за демонами и перезапускает их, если они упали.
- zebra – основной демон, занимающийся общением с другими демонами и ядром системы. Именно он прописывает маршруты в системе, получая их от других демонов.
hostname zebra password 123 enable password 456 log file /var/log/zebra.logОписание опций (с ними вы столкнетесь при настройке любого демона из пакета quagga):
- hostname — имя хоста. Опция служит для удобства, видна в консольном интерфейса.
- password — пароль для входа в консоль.
- enable password — пароль для выполнения административных задач.
Каждый демон из пакета quagga по умолчанию слушает определенный порт на 127.0.0.1 (2601 для zebra, 2605 для bgpd) и может управляться при помощи telnet. Интерфейс сделан в стиле Cisco.
Теперь опишу несколько примеров использования BGP.
1. Просто анонсировать одну свою подсеть на один аплинк
Конфиг bgpd (/etc/quagga/bgpd.conf):hostname test password 123 enable password 456 log file /var/log/bgpd.log router bgp 12002 bgp router-id 1.2.3.42 network 11.22.33.44.0/23 neighbor 1.2.3.41 remote-as 12001Описание опций:
router bgp 12002
– указываем, что bgp вообще должен работать; указываем номер нашей AS – 12002.bgp router-id 1.2.3.42
– тут должен быть указан IP нашего роутера. На самом деле особого значения не имеет, можно указать любой IP. Однако виден вашим соседям, так что стоит указать основной IP роутера.network 11.22.33.44.0/23
– сеть, которую мы будем анонсировать соседям. Таких записей может быть несколько.neighbor 1.2.3.41 remote-as 12001
– описание соседа. 1.2.3.41 – IP, по которому доступен сосед; 12001 –AS соседа.Пример связи двух BGP-роутеров приводить думаю смысла нет, перейдем сразу к более сложным примерам.
2. Цепочка из трех роутеров. Первый и последний прямой связи не имеют
Пример использования – связка: ваш аплинк; вы; ваш клиент, имеющий свою AS и подсеть и физический линк с вами. Привожу конфиг и вывод команды
sh ip bgp
на каждом из трех роутеров. Команда sh ip bgp
показывает таблицу маршрутизации, сформированную bgpd. router-id я указывал левые, что, конечно же, не является хорошим примером.hostname bgpd1 password 123 enable password 456 router bgp 12101 bgp router-id 172.16.1.1 network 192.168.12.0/24 neighbor 172.18.0.2 remote-as 12102 bgpd1> sh ip bgp BGP table version is 0, local router ID is 172.16.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 0.0.0.0 0 32768 i *> 192.168.13.0 172.18.0.2 0 0 12102 i *> 192.168.14.0 172.18.0.2 0 12102 12103 i Total number of prefixes 3 hostname bgpd2 password 123 enable password 456 router bgp 12102 bgp router-id 172.16.2.2 network 192.168.13.0/24 neighbor 172.18.0.1 remote-as 12101 neighbor 172.19.0.2 remote-as 12103 bgpd2> sh ip bgp BGP table version is 0, local router ID is 172.16.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 172.18.0.1 0 0 12101 i *> 192.168.13.0 0.0.0.0 0 32768 i *> 192.168.14.0 172.19.0.2 0 0 12103 i Total number of prefixes 3 hostname bgpd3 password 123 enable password 456 router bgp 12103 bgp router-id 172.16.3.3 network 192.168.14.0/24 neighbor 172.19.0.1 remote-as 12102 bgpd3> sh ip bgp BGP table version is 0, local router ID is 172.16.3.3 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 172.19.0.1 0 12102 12101 i *> 192.168.13.0 172.19.0.1 0 0 12102 i *> 192.168.14.0 0.0.0.0 0 32768 i Total number of prefixes 3
3. Четыре роутера, соединенные ромбиком
Пример использования – у вас два аплинка. А также, в силу того, что пример весьма синтетический, он также демонстрирует отказоустойчивое кольцо: связь между bgpd1 и bgpd4 не потеряется при падении bgpd2 или bgpd3 (но не обоих одновременно).
router bgp 12101 bgp router-id 172.16.1.1 network 192.168.12.0/24 neighbor 172.16.18.2 remote-as 12102 neighbor 172.16.19.2 remote-as 12103 bgpd1> sh ip bgp BGP table version is 0, local router ID is 172.16.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 0.0.0.0 0 32768 i * 192.168.13.0 172.16.19.2 0 12103 12104 12102 i *> 172.16.18.2 0 0 12102 i *> 192.168.14.0 172.16.19.2 0 0 12103 i * 192.168.15.0 172.16.18.2 0 12102 12104 i *> 172.16.19.2 0 12103 12104 i Total number of prefixes 4
router bgp 12102 bgp router-id 172.16.2.2 network 192.168.13.0/24 neighbor 172.16.18.1 remote-as 12101 neighbor 172.16.20.2 remote-as 12104 bgpd2> sh ip bgp BGP table version is 0, local router ID is 172.16.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 172.16.18.1 0 0 12101 i *> 192.168.13.0 0.0.0.0 0 32768 i * 192.168.14.0 172.16.20.2 0 12104 12103 i *> 172.16.18.1 0 12101 12103 i * 192.168.15.0 172.16.18.1 0 12101 12103 12104 i *> 172.16.20.2 0 0 12104 i Total number of prefixes 4
router bgp 12103 bgp router-id 172.16.3.3 network 192.168.14.0/24 neighbor 172.16.19.1 remote-as 12101 neighbor 172.16.21.2 remote-as 12104 bgpd3> sh ip bgp BGP table version is 0, local router ID is 172.16.3.3 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 192.168.12.0 172.16.19.1 0 0 12101 i * 172.16.21.2 0 12104 12102 12101 i * 192.168.13.0 172.16.19.1 0 12101 12102 i *> 172.16.21.2 0 12104 12102 i *> 192.168.14.0 0.0.0.0 0 32768 i *> 192.168.15.0 172.16.21.2 0 0 12104 i Total number of prefixes 4
router bgp 12104 bgp router-id 172.16.4.4 network 192.168.15.0/24 neighbor 172.16.20.1 remote-as 12102 neighbor 172.16.21.1 remote-as 12103 bgpd4> sh ip bgp BGP table version is 0, local router ID is 172.16.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * 192.168.12.0 172.16.21.1 0 12103 12101 i *> 172.16.20.1 0 12102 12101 i *> 192.168.13.0 172.16.20.1 0 0 12102 i * 192.168.14.0 172.16.20.1 0 12102 12101 12103 i *> 172.16.21.1 0 0 12103 i *> 192.168.15.0 0.0.0.0 0 32768 i Total number of prefixes 4
1 комментарий
Комментарий от: Andrew A. Sabitov [Посетитель]
Всё карачо, но не рассмотрен самый частый случай: Ваша АС с БГП-раутером + 2-3 аплинка к провайдерам. Всё настроено по варианту 3, всё работает, а потом у одного из провайдеров падает _его_ (единственный!!!) аплинк. Картина маслом...
Это кусочек рабочего конфига, который был в работе лет 9 тому назад. Все возможные совпадения адресов считать случайными :)
router bgp 25549
bgp router-id 217.70.98.105
network 195.49.168.0/22
!default AS (Electrosvyaz)
neighbor 217.70.98.106 remote-as 16054
neighbor 217.70.98.106 description Sibirtelecom aka Elektrosvyaz
neighbor 217.70.98.106 filter-list 21701 out
neighbor 217.70.98.106 filter-list 21700 in
! ZSTTK AS
neighbor 81.1.255.45 remote-as 21127
neighbor 81.1.255.45 description ZSTTK
neighbor 81.1.255.45 filter-list 8101 out
ip as-path access-list 21701 permit ^$
ip as-path access-list 21701 permit 25549$
ip as-path access-list 21701 deny .*
ip as-path access-list 21700 deny 21127$
ip as-path access-list 21700 deny 20651$
ip as-path access-list 21700 permit .*
ip as-path access-list 8101 permit ^$
ip as-path access-list 8101 permit 25549$
ip as-path access-list 8101 deny .*
Оригинал: http://blog.peter.am/index.php/2010/11/27/bgp-quagga
Это кусочек рабочего конфига, который был в работе лет 9 тому назад. Все возможные совпадения адресов считать случайными :)
router bgp 25549
bgp router-id 217.70.98.105
network 195.49.168.0/22
!default AS (Electrosvyaz)
neighbor 217.70.98.106 remote-as 16054
neighbor 217.70.98.106 description Sibirtelecom aka Elektrosvyaz
neighbor 217.70.98.106 filter-list 21701 out
neighbor 217.70.98.106 filter-list 21700 in
! ZSTTK AS
neighbor 81.1.255.45 remote-as 21127
neighbor 81.1.255.45 description ZSTTK
neighbor 81.1.255.45 filter-list 8101 out
ip as-path access-list 21701 permit ^$
ip as-path access-list 21701 permit 25549$
ip as-path access-list 21701 deny .*
ip as-path access-list 21700 deny 21127$
ip as-path access-list 21700 deny 20651$
ip as-path access-list 21700 permit .*
ip as-path access-list 8101 permit ^$
ip as-path access-list 8101 permit 25549$
ip as-path access-list 8101 deny .*
Оригинал: http://blog.peter.am/index.php/2010/11/27/bgp-quagga
Комментариев нет:
Отправить комментарий