Вопрос или проблема
У меня возникли проблемы с настройкой BGP, использующей FRRouting для обработки внутренней балансировки нагрузки, и я надеюсь, что кто-то здесь сможет помочь! Вот основная структура (WAN-соединение через eth9 на маршрутизаторе):
[Интернет] ---> [Маршрутизатор (FRRouting)] ---> [Несколько узлов, объявляющих, что могут маршрутизировать 123.0.2.108/32]
FRRouting корректно добавляет маршрут для 123.0.2.108/32
в таблицу маршрутизации маршрутизатора (после получения маршрутов), и я могу пинговать 123.0.2.108
с маршрутизатора. Однако я столкнулся с проблемой, когда назначил 123.0.2.108
WAN-интерфейсу маршрутизатора с помощью команды:
ip addr add 123.0.2.108/32 dev eth9
В этот момент FRRouting прекращает маршрутизировать 123.0.2.108/32
через BGP, и похоже, что управление принимается ядром. Когда я выполняю show ip route
в vtysh, маршрут меняется с B> (BGP) на C (connected), что означает, что FRRouting больше не обрабатывает маршрут вообще.
Если я не использую ip addr add
, то маршрутизатор не отвечает на ARP-запросы для 123.0.2.108
, и вышестоящий маршрутизатор не корректно пересылает трафик.
Я могу смягчить проблему, включив proxy_arp
, но я понимаю, что это не оптимальное решение.
Спасибо за любую помощь заранее!
Ответ или решение
Почему BGP в FRRouting не маршрутизирует после назначения IP WAN интерфейсу
Введение
Ваша проблема с конфигурацией BGP в FRRouting, где маршрутизация прекращается после назначения IP-адреса 123.0.2.108/32
на WAN интерфейс (eth9), поднимает важные аспекты маршрутизации и взаимодействия между BGP и локальными маршрутами в Linux. В этом ответе мы подробно проанализируем вашу ситуацию и предложим пути решения.
Описание проблемы
Вы правильно указали, что после выполнения команды:
ip addr add 123.0.2.108/32 dev eth9
маршрут для 123.0.2.108/32
, ранее объявленный через BGP, становится C
(связанным) в таблице маршрутизации. Это означает, что ядро Linux теперь обрабатывает этот маршрут как локальный, и FRRouting перестает управлять им, что приводит к остановке маршрутизации через BGP.
Причины проблемы
Когда вы назначаете IP-адрес непосредственно интерфейсу, он становится "подключенным" (Connected) и тем самым заменяет маршрут, объявленный через BGP. Это поведение связано с тем, как Linux управляет маршрутизацией. В частности:
- Ограничения Сетевого Стека: При добавлении IP на интерфейс, маршрут становится "C", и ядро Linux отдает приоритет локальным маршрутам.
- BGP и Локальные Маршруты: BGP не может поддерживать контроль над маршрутом, который помечен как локальный. Ядро автоматически управляет маршрутами, которые связаны с интерфейсами.
Возможные решения
-
Использование Route Map:
Один из способов обеспечить, чтобы BGP сохранял контроль над маршрутом — использовать маршруты маршрутизации с помощьюroute map
. Это позволяет вам указать, какой маршрут следует использовать при наличии конфликта. -
Использование Loopback Интерфейса:
Вместо назначения IP-адреса напрямую на WAN интерфейс, рассмотрите возможность использования виртуального интерфейса (например, loopback интерфейса). Назначьте IP123.0.2.108/32
наlo
, а затем создайте статический маршрут к этому IP через eth9. Это позволит FRRouting продолжать обрабатывать BGP маршруты:ip addr add 123.0.2.108/32 dev lo
-
Настройка Proxy ARP:
Хотя вы уже упомянули использованиеproxy_arp
, это действительно может помочь в специфических сценариях. Однако, как вы отметили, это не оптимальное решение, и его следует использовать только в необходимых ситуациях. -
Конфигурация BGP:
Убедитесь, что ваша BGP конфигурация разрешает как входящие, так и исходящие маршруты для необходимого пространства адресов и что маршруты правильно анонсируются.
Заключение
Ваша проблема связана с тем, как Linux обрабатывает маршруты, связанные с интерфейсами. Для обеспечения корректной маршрутизации через BGP после назначения IP на интерфейс необходимо предпринять дополнительные меры, такие как использование loopback интерфейса или применение route maps. Эти решения помогут сохранить управление маршрутизацией на уровне FRRouting и исправить возникшую проблему.
Если у вас возникнут дополнительные вопросы или потребуется помощь в настройке, не стесняйтесь задавать их.