BGP - настраиваем Border Gateway Protocol c помощью Quagga

Версия для печатиОтправить другуPDF version

Вообще-то по настройке Quagga уже есть статья, но решил, что настройке BGP необходимо посвятить отдельную статью. Итак, на днях получила дружественная сеть свою автономную систему и блок адресов. Соответственно необходимо все это дело настроить под собственные нужды, и с этой просьбой и обратилась ко мне.

Для глобальной маршрутизации будем использовать протокол BGP, информацию можно получить здесь. Ознакомившись с литературой, приступим к настройке.

Поставленная задача: получить от провайдера по одному BGP-соединению список сетей UA-IX, по второму - Full-view. Ну а дальше уже можно будет по представленной схеме настраивать соединения с несколькими аплинками.

Исходные данные (не буду их изменять, думаю ничего криминального и конфиденциального в этой информации нет):

  • Название сети: ValorNet
  • Номер AS: 50956
  • Блок PI: 194.28.100.0/22
  • Провайдер:  BGNet
  • AS провайдера: 12998
  • Адресация соединения для UA-IX: 195.3.156.216/30 (195.3.156.217 со стороны BGNet, и 195.3.156.218, соответственно, со стороны ValorNet)
  • Адресация соединения для Full-view: 195.3.157.84/30 (195.3.157.85 со стороны BGNet, 195.3.157.85 - со стороны ValorNet)
  • Со стороны провайдера уже все настроено согласно исходных данных

ПРИМЕЧАНИЕ: для начала советую выделить из выделенного блока IP-адресс для маршрутизации (так называемый router-id), и добавить его на loopback-интерфейс маршрутизатора. В моем случае это 194.28.100.1:

# ifconfig lo0 alias 194.28.100.1/32

Теперь осталось добавить в rc.conf следующие строки, чтобы конфигурация сохранилась после перезагрузки:

ifconfig_lo0="inet 127.0.0.1  netmask 255.0.0.0"
ifconfig_lo0_alias0="inet 194.28.100.1  netmask 255.255.255.255"

Итак, продолжим. Будем отталкиваться от того, что пакет Quagga уже установален и zebra корректно настроена и работает (см. здесь). Для того, чтобы запустить демон bgpd, необходимо создать конфигурационный файл:

# touch /usr/local/etc/quagga/bgpd.conf
# chown quagga:quagga /usr/local/etc/quagga/bgpd.conf

 Для того, чтобы можно было подключиться к виртуальному терминалу, который предоставляет bgpd, необходимо наличие пароля. Соответственно:

# echo 'password pass1' >> /usr/local/etc/quagga/bgpd.conf
# echo 'enable password pass2' >> /usr/local/etc/quagga/bgpd.conf

Дальше добавим в rc.conf запуск демона bgpd, правкой конфигурационного файла rc.conf до следующего состояния (за условия, что zebra уже настроена и работает):

# cat /etc/rc.conf | grep quagga
quagga_enable="YES"
quagga_daemons="zebra bgpd"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d; /usr/local/sbin/bgpd -d' zebra bgpd"
Теперь перезапускаем quagga, чтобы запустить демон bgpd:
# sh /usr/local/etc/rc.d/quagga restart
bgpd not running? (check /var/run/quagga/bgpd.pid).
Stopping zebra.
Starting zebra.
Starting bgpd.

Дальше настройка идет с виртуальной консоли, которую нам предоставляет демон bgpd. Чтобы подключиться к виртуальной консоли, воспользуемся командой telnet и паролями, которые добавили в конфигурационный файл /usr/local/etc/quagga/bgpd.conf:

# telnet localhost bgpd
Trying ::1...
Trying 127.0.0.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:

test.server> enable
Password:
test.server#

 Итак, успешно подключились к виртуальному терминалу. Теперь приступаем к настройке.

Перейдем в режим глобальной конфигурации:

test.server# configure terminal

Даем название роутеру, исходя из демона маршрутизации (чтобы не путаться в дальнейшем)

test.server(config)# hostname bgpd-router

Включаем сервис шифрования паролей

bgpd-router(config)# service password-encryption

Настройка логгирования:

bgpd-router(config)# log stdout
bgpd-router(config)# log file /var/log/quagga/bgpd.log

Разрешаем коннекты в виртуальному терминалу только с localhost (создаем acl, куда добавляем "разрешенные ip-адреса", потом этот acl применяем к линии виртуального терминала):

bgpd-router(config)# access-list 1 remark Localhost only
bgpd-router(config)# access-list 1 permit 127.0.0.1 bgpd-router(config)# line vty bgpd-router(config-line)# access-class 1 bgpd-router(config-line)# exit

Проверим, что у нас еще нету никакой информации по BGP

bgpd-router(config)# do show ip bgp summary

А теперь приступаем непосредственно к настройке BGP. Присвоим роутеру номер автономной системы:

bgpd-router(config)# router bgp 50956

Укажем принудительно идентификатор маршрутизатора (иначе берется наименьший присвоенный маршрутизатору IP-адресс). Этот IP-адресс добавляем на loopback (о том как это сделать, описано выше).

bgpd-router(config-router)# bgp router-id 194.28.100.1

Теперь укажем "соседа". Для начала - только UA-IX (ознакомимся с возможностями BGP),  а потом уже настроим роутер для приема Full-view.

bgpd-router(config-router)# neighbor 195.3.156.217 remote-as 12998
bgpd-router(config-router)# neighbor 195.3.156.217 description BGNet(UA-IX)

Посмотрим, что у нас получилось:

bgpd-router(config-router)# do show ip bgp summary
BGP router identifier 194.28.100.1, local AS number 50956
RIB entries 7511, using 704 KiB of memory
Peers 1, using 4560 bytes of memory
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
195.3.156.217   4 12998    1519      15        0    0    0 00:00:27     3998
Total number of neighbors 1

Неплохо. Список сетей UA-IX уже получаем. Теперь необходимо "отдать" провайдеру наши сети. Укажем наши сети в конфигурации роутера. Также, настроим дополнительно фильтры, чтобы не отдать чего-либо "лишнего". Создадим route-map, согласно которого будем анонсировать свои сети:

bgpd-router(config-router)# network 194.28.100.0/22
bgpd-router(config-router)# neighbor 195.3.156.217 route-map ValorNet-Network out
bgpd-router(config-router)# exit

 Теперь "опишем" этот route-map:

bgpd-router(config)# route-map ValorNet-Network permit 10
bgpd-router(config-route-map)# description "Include all ValorNet network for announces"
bgpd-router(config-route-map)# match ip address prefix-list ValorNet-AllNets bgpd-router(config-route-map)# exit

 Далее необходимо создать prefix-list ( в нашем случае ValorNet-AllNets), и перечислить в нем все сети для анонсирования:

bgpd-router(config)# ip prefix-list ValorNet-AllNets description "Insert network for announces here"
bgpd-router(config)# ip prefix-list ValorNet-AllNets seq 10 permit 194.28.100.0/22 bgpd-router(config)# exit

Теперь осталось только "очистить" анонсы и сохранить конфигурацию:

bgpd-router# clear ip bgp 195.3.156.217 out
bgpd-router# copy running-config startup-config
Configuration saved to /usr/local/etc/quagga/bgpd.conf

 Настройка BGP-сессии для UA-IX завершена. Теперь соответственно наведу команды, чтобы получить от провайдера full-view:

bgpd-router# configure terminal
bgpd-router(config)# router bgp 50956
bgpd-router(config-router)# neighbor 195.3.157.85 remote-as 12998
bgpd-router(config-router)# neighbor 195.3.157.85 description BGNet(World)
bgpd-router(config-router)# neighbor 195.3.157.85 route-map ValorNet-Network out

 Проверяем, что у нас получилось:

bgpd-router# show ip bgp summary
BGP router identifier 194.28.100.1, local AS number 50956
RIB entries 598190, using 55 MiB of memory
Peers 2, using 9120 bytes of memory
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
195.3.156.217   4 12998    1734     103        0    0    0 01:39:54     4002
195.3.157.85    4 12998   58658     103        0    0    0 01:39:52   322768
Total number of neighbors 2

После того, как получил еще и full-view, трафик к некоторым сетям UA-IX-a побежал через мировой канал (поскольку в full-view входят также сети UA-IX-a). Устранить эту оплошность можно несколькими методами. Я остановился на установке для peer-а, от которого получам UA-IX большего значения weight (этим сделал эти маршруты более приоритетными):

bgpd-router# configure terminal
bgpd-router(config)# router bgp 50956
bgpd-router(config-router)# neighbor 195.3.156.217 weight 10000
bgpd-router(config-router)# neighbor 195.3.157.85 weight 5000

Чтобы изменения вступили в силу, необходимо выполнить reset BGP-сесии с peer'ом:

bgpd-router# clear ip bgp 195.3.156.217
bgpd-router# clear ip bgp 195.3.157.85

Вот и все. Получаем от провайдера UA-IX и full-view по двум соединениям, анонсируем свою сеть (опять же, в UA-IX и в мир). На этом базовую настройку можно считать оконченной. Для более тонкой настройки - читаем документацию.

 

Ваша оценка: Нет Средняя: 4.9 (10 голосов)

Супер

Супер

Действительно супер! Всё

Действительно супер!

Всё отлично написано и то как оно есть!

Респект Автору!

С Ув. Олег Torvald

http://muff.kiev.ua/content/n

Статья одна и та же. Есть две

Статья одна и та же. Есть две ссылки, которые индексируются в поисковых системах и ведут на одну и ту же статью.

Когда-то переименовал статью и ссылку, чтобы упорядочить материал к одному стилю названий. А в поисковых системах еще были ссылки на старый адрес. Поэтому старую ссылку оставил рабочей. Пройдет время - должна остаться только одна.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература