Вопрос или проблема
Я пытаюсь анонсировать статические маршруты от 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.
Возможные причины
-
Настройки интерфейса OSPF:
- Вы использовали
type ptmp
, что подходит для одноточечных (point-to-point) соединений. Однако, если у вас есть несколько соседей на этом интерфейсе или используется широковещательная связь, следует рассмотреть возможность использованияtype broadcast
. Убедитесь, что ваши настройки соответствуют реальной конфигурации сети.
- Вы использовали
-
Настройки IP-адресов:
- Убедитесь, что IP-адреса, используемые для WireGuard и OSPF, правильно настроены и в пределах одной подсети. Адреса
10.8.0.1
(ваш) и10.8.0.3
(пир) выглядят корректно, но перепроверьте их.
- Убедитесь, что IP-адреса, используемые для WireGuard и OSPF, правильно настроены и в пределах одной подсети. Адреса
-
Файрвол и настройки iptables:
- Вы указали, что у вас нет правил со значением policy ACCEPT, что должно позволять весь входящий трафик. Но стоит убедиться, что другие файрволы или сетевые конфигурации (например, настройки маршрутизатора на pira) не блокируют OSPF-пакеты.
-
Тип маршрутизируемого трафика:
- Используемая вами настройка
route {}
в секцииprotocol static
может нуждаться в более четком указании для OSPF. Проверьте, чтобы ваши статические маршруты были доступны в OSPF-объявлениях.
- Используемая вами настройка
-
tcpdump для анализа трафика:
- Tcpdump показывает, что OSPF-пакеты от
10.8.0.3
до224.0.0.5
(широковещательный адрес для OSPF) проходят, но пакеты от вашего сервера не видны. Это может указывать на проблемы с настройками OSPF или неправильное определение интерфейса.
- Tcpdump показывает, что OSPF-пакеты от
-
Логи Bird:
- Проверьте файл логов Bird (
/var/log/bird.log
) для более детальной информации о возможных ошибках или предупреждениях, касающихся работы OSPF.
- Проверьте файл логов Bird (
Рекомендации по исправлению
-
Попробуйте изменить настройки интерфейса OSPF с
type ptmp
наtype broadcast
и посмотрите, повлияет ли это на обнаружение соседей. -
Проверьте правильность настройки конфигурации OSPF, убедившись, что все IP-адреса находятся в одной подсети и правильно указаны в конфигурационных файлах.
-
Запустите команду
birdc show ospf neighbors
после внесения изменений, чтобы проверить наличие соседей. -
Проверьте наличие конфликтующих настроек или правил на уровне маршрутизатора peer и в случае необходимости измените их.
-
Обратите внимание на логи Bird на наличие ошибок, которые могут помочь в диагностике проблемы.
-
Убедитесь, что все изменения сохранены и применены, перезагрузите соответствующие службы (например,
bird
) для применения новой конфигурации.
Заключение
Проблема с обнаружением соседей OSPF на интерфейсах WireGuard может быть вызвана множеством факторов, начиная от неправильных настроек интерфейса и заканчивая проблемами с маршрутизацией. Следуя вышеуказанным рекомендациям, вы сможете устранить проблему и обеспечить корректную работу OSPF на вашем сервере.