Итак, имеем три виртуальных FreeBSD, две из них соединённых GRE-туннелем с сетью 10.0.0.0/30 через внешние интерфейсы (за схему извините):
lan1 -- (gre0 10.0.0.1 | em0 1.1.1.2) server1 -- gateway -- server2 (em0 2.2.2.2 | gre0 10.0.0.2) -- lan2
На "серверах" gateway_enable=YES, frr_enable=YES и запущены zebra с ospfd.
Если все три машины сделать роутерами и поднять на реальных интерфейсах OSPF, маршрутизация идеально работает, hello ходят каждые 10 секунд, соседи видятся, связность какая положено и пингуется всё отовсюду.
Если же с gateway убрать динамику, соединить серверы GRE-туннелем, настроить транспортный режим IPsec на внешних интерфейсах и пустить OSPF через туннель (собсна, такую схему хочу в продакшен), то начинается магия:
- hello начинают идти подряд в одну сторону, ответные же приходят примерно через dead interval секунд (хотя второй роутер точно так же шлёт их подряд в туннель, так же не получая hello от первого, пока не пройдёт dead interval);
- таблицы маршрутов, соответственно, обновляются невовремя, а также роутеры пропадают друг у друга из соседей;
- пинги до lan за туннелем вообще не идут, при этом маршрут до этой сети, если он приходил через OSPF, пропадает из таблицы, стоит запустить пинг;
- во время прохождения мультикастов пинги не идут даже до другого конца туннеля.
Всё это происходит с обеих сторон. Фаерволлы выключены, со статическими маршрутами lan'ы за туннелем доступны друг другу. Но с OSPF вот такая ерунда.
Помогите найти, где зарыта собака - во мне или где-то ещё.
Спасибо.