Quagga — популярный сервис для организации динамической маршрутизации. Обычно, он используется по своему прямому назначению на узлах, которые участвуют в маршрутизации и должны устанавливать принимаемые маршруты в ядро сети. Сегодня мы рассмотрим недокументированные возможности, которые достаточно плохо гуглятся, но требуются для реализации специальных кейсов: BGP Route Reflector и сервер реализации BGP Blackhole.
Данные кейсы примечательны тем, что сам сервер, на котором установлен BGPD никак не занимается маршрутизацией, поэтому установка маршрутов в таблицу ядра малополезна, а зачастую вредна. Недавно мы настраивали сервер для реализации BGP Blackhole и столкнулись с необходимостью настройки BGPD для предотвращения экспорта маршрутов в таблицы ядра. Для того, чтобы BGPD не экспортировал маршруты из BGP в ядро, можно использовать два способа, которые не описаны в man-страницах сервиса.
Первый способ основывается на использовании специального параметра «-n» или «—no_kernel», который не описан в документации. В Ubuntu 16.04 и старше указать этот параметр можно в соотвествующем элементе systemd:
# cat /lib/systemd/system/bgpd.service [Unit] Description=BGP routing daemon BindTo=zebra.service After=network.target zebra.service ConditionPathExists=/etc/quagga/bgpd.conf Documentation=man:bgpd [Service] Type=forking ExecStartPre=-/bin/chmod -f 640 /etc/quagga/bgpd.conf ExecStartPre=-/bin/chown -f quagga:quagga /etc/quagga/bgpd.conf ExecStart=/usr/sbin/bgpd -n -d -A 127.0.0.1 -f /etc/quagga/bgpd.conf Restart=on-abort [Install] WantedBy=network.target
Обратите внимание на строку ExecStart. Здесь и добавлен данный параметр. После внесения данного изменения выполните команды для перезапуска сервиса BGPD:
# systemctl daemon-reload # service bgpd restart
Теперь при поступлении маршрутной информации через BGPD эти маршруты в ядро устанавливаться не будут. Данный способ может не подойти, если вы хотите иметь избирательную установку, в зависимости от VRF или локальной ASN. В этом случае вам подойдет способ, основанный на изменении параметра «distance bgp» в секции «router bgp»:
router bgp 11111 distance bgp 255 255 255
Указание данных значений (255) препятствует установке маршрутов в ядро.
Таким образом, с помощью этих несложных настроек можно решить задачи, в которых требуется обмен маршрутной информацией без установки ее в ядро маршрутизатора под управлением ОС Linux.