Bird OSPF на интерфейсах WireGuard не работает

Вопрос или проблема

Я пытаюсь анонсировать статические маршруты от Linux сервера к пирами WG. Но не вижу ни одного пакета, приходящего от Bird к пирами WG на интерфейсе WG.

Пробовал различные типы интерфейсов: ptmp, ptp, broadcast безуспешно.

Весь трафик между пирами WG проходит нормально.

IPTABLES не имеет правил (политика ACCEPT)

Версия Bird 2.0.8

berd.conf

log "/var/log/bird.log" { debug, trace, info, remote, warning, error, auth, fatal, bug };

protocol device {}


protocol kernel {
        ipv4 {                  # Подключить протокол к таблице IPv4 через канал
              import none;      # Импорт в таблицу, по умолчанию - импорт всех
              export none;      # Экспорт в протокол. по умолчанию - экспорт none
        };
}

protocol kernel {
        ipv6 { export none; };
}

protocol static STATIC {
        ipv4 { export all; };
        route 1.1.1.1/32 via 10.8.0.1;
        route 209.85.233.198/32 via 10.8.0.1;
        route 140.82.121.4/32 via 10.8.0.1;
}

protocol ospf MyOSPF {
        area 0 {
                interface "wg*" {
                        authentication none;
                        type ptmp;
                        neighbors {
                                10.8.0.3;
                        };
                        tx length 1300;
                        cost 100;              
                        hello 5;
                };
        };
}

wg0.conf

[Interface]
Address = 10.8.0.1/32
SaveConfig = true
PostUp = ip link set wg0 multicast on; iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51820
FwMark = 0xca6c
PrivateKey = wLlkhfaCVgtucw1gnE+svr4ll8ViwhgkqTCjRJfwAko=


[Peer]
PublicKey = KAMkexIcsRi4218NPg7oss3YJkn4YAqu0totQ7N0dXU=
AllowedIPs = 10.8.0.3/32
Endpoint = 62.217.187.15:50130
# birdc show interfaces
BIRD 2.0.8 готов.
lo up (index=1)
        MultiAccess AdminUp LinkUp Loopback Ignored MTU=65536
        127.0.0.1/8 (Предпочтительный, область host)
        ::1/128 (Предпочтительный, область host)
ens3 up (index=2)
        MultiAccess Broadcast Multicast AdminUp LinkUp MTU=1500
        188.241.197.22/32 (Предпочтительный, область univ)
        fe80::5054:ff:fe73:ce7b/64 (Предпочтительный, область link)
wg0 up (index=9)
        PtP Multicast AdminUp LinkUp MTU=1420
        10.8.0.1/32 (Предпочтительный, область site)
# birdc show route
BIRD 2.0.8 готов.
Table master4:
1.1.1.1/32           unicast [STATIC 15:44:20.605] * (200)
        via 10.8.0.1 на wg0
10.8.0.1/32          unicast [MyOSPF 15:44:20.706] * I (150/0) [10.8.0.1]
        dev wg0
209.85.233.198/32    unicast [STATIC 15:44:20.605] * (200)
        via 10.8.0.1 на wg0
140.82.121.4/32      unicast [STATIC 15:44:20.605] * (200)
        via 10.8.0.1 на wg0
# birdc show ospf ne
BIRD 2.0.8 готов.
MyOSPF:
Router ID       Pri          State      DTime   Interface  Router IP

Нормально ли, что нет ни одного соседа, даже себя?

# birdc show ospf state
BIRD 2.0.8 готов.

area 0.0.0.0

        router 10.8.0.1
                distance 0
                stubnet 10.8.0.1/32 metric 0

Когда я прослушиваю с помощью tcpdump, я вижу только пакеты от пира WG (Mikrotik), но не от IP хоста Bird (WG сервер).

tcpdump -i wg0 -n -v
tcpdump: слушает на wg0, тип-канала RAW (Raw IP), длина снимка 262144 байт
15:45:31.868877 IP (tos 0x0, ttl 1, id 40884, offset 0, flags [DF], proto OSPF (89), length 64)
    10.8.0.3 > 224.0.0.5: OSPFv2, Hello, length 44
        Router-ID 10.8.0.1, Backbone Area, Authentication Type: none (0)
        Options [External]
          Hello Timer 10s, Dead Timer 40s, Mask 255.255.255.0, Priority 128
15:45:41.864248 IP (tos 0x0, ttl 1, id 41569, offset 0, flags [DF], proto OSPF (89), length 64)
    10.8.0.3 > 224.0.0.5: OSPFv2, Hello, length 44
        Router-ID 10.8.0.1, Backbone Area, Authentication Type: none (0)
        Options [External]
          Hello Timer 10s, Dead Timer 40s, Mask 255.255.255.0, Priority 128

На интерфейсе l2tp/IPSec на том же хосте и с тем же удалённым пиром всё работает.

Ответ или решение

Описание проблемы с OSPF в интерфейсах WireGuard

На вашем Linux сервере, возможно, возникли проблемы с протоколом OSPF при использовании интерфейсов WireGuard. Несмотря на корректно настроенные конфигурационные файлы, OSPF не может обнаружить соседей на интерфейсе wg0, что может быть причиной недоступности статических маршрутов для ваших пиров WireGuard.

Возможные причины

  1. Настройки интерфейса OSPF:

    • Вы использовали type ptmp, что подходит для одноточечных (point-to-point) соединений. Однако, если у вас есть несколько соседей на этом интерфейсе или используется широковещательная связь, следует рассмотреть возможность использования type broadcast. Убедитесь, что ваши настройки соответствуют реальной конфигурации сети.
  2. Настройки IP-адресов:

    • Убедитесь, что IP-адреса, используемые для WireGuard и OSPF, правильно настроены и в пределах одной подсети. Адреса 10.8.0.1 (ваш) и 10.8.0.3 (пир) выглядят корректно, но перепроверьте их.
  3. Файрвол и настройки iptables:

    • Вы указали, что у вас нет правил со значением policy ACCEPT, что должно позволять весь входящий трафик. Но стоит убедиться, что другие файрволы или сетевые конфигурации (например, настройки маршрутизатора на pira) не блокируют OSPF-пакеты.
  4. Тип маршрутизируемого трафика:

    • Используемая вами настройка route {} в секции protocol static может нуждаться в более четком указании для OSPF. Проверьте, чтобы ваши статические маршруты были доступны в OSPF-объявлениях.
  5. tcpdump для анализа трафика:

    • Tcpdump показывает, что OSPF-пакеты от 10.8.0.3 до 224.0.0.5 (широковещательный адрес для OSPF) проходят, но пакеты от вашего сервера не видны. Это может указывать на проблемы с настройками OSPF или неправильное определение интерфейса.
  6. Логи Bird:

    • Проверьте файл логов Bird (/var/log/bird.log) для более детальной информации о возможных ошибках или предупреждениях, касающихся работы OSPF.

Рекомендации по исправлению

  1. Попробуйте изменить настройки интерфейса OSPF с type ptmp на type broadcast и посмотрите, повлияет ли это на обнаружение соседей.

  2. Проверьте правильность настройки конфигурации OSPF, убедившись, что все IP-адреса находятся в одной подсети и правильно указаны в конфигурационных файлах.

  3. Запустите команду birdc show ospf neighbors после внесения изменений, чтобы проверить наличие соседей.

  4. Проверьте наличие конфликтующих настроек или правил на уровне маршрутизатора peer и в случае необходимости измените их.

  5. Обратите внимание на логи Bird на наличие ошибок, которые могут помочь в диагностике проблемы.

  6. Убедитесь, что все изменения сохранены и применены, перезагрузите соответствующие службы (например, bird) для применения новой конфигурации.

Заключение

Проблема с обнаружением соседей OSPF на интерфейсах WireGuard может быть вызвана множеством факторов, начиная от неправильных настроек интерфейса и заканчивая проблемами с маршрутизацией. Следуя вышеуказанным рекомендациям, вы сможете устранить проблему и обеспечить корректную работу OSPF на вашем сервере.

Оцените материал
Добавить комментарий

Капча загружается...