Привет! Нашёл проблему в реализации IPsec у MikroTik. Сценарий такой:
Локация 1 — CCR1009-8G-1S-1S+ с полной таблицей BGP, без маршрута по умолчанию, приватная сеть 10.64.136.0/22
Локация 2 — RB750GL со статическим IP, маршрут по умолчанию, приватная сеть 10.64.12.0/22
Если настроить IPsec, оно не работает. Если с Локации 1 пинговать:
/ping 10.64.12.1 src-address=10.64.136.1
то получаем «No route to host». Если то же самое сделать с машины за маршрутизатором на Локации 1, приходит ответ «ICMP destination net unreachable». На Локации 2 пакеты не доходят.
Если пинговать с Локации 2:
/ping 10.64.136.1 src-address=10.64.12.1
то всё виснет — «Timed out». Пакеты доходят до Локации 1.
Выяснил, что MikroTik отбрасывает все пакеты с назначением, по которым нет маршрутов в ядре. Поскольку IPsec работает через политики, а не через маршруты ядра, политика IPsec не срабатывает. На Локации 2 такой проблемы нет из-за наличия маршрута по умолчанию.
На Локации 1 я решил это грязным хаком:
/interface bridge add name=br-loopback
/ip route add dst-address=10.0.0.0/8 gateway=br-loopback
Кто-нибудь может это подтвердить? Политики IPsec должны применяться ДО маршрутизации, и не должно быть «ICMP destination net unreachable», если для пакетов есть соответствующая политика IPsec.
Уже открыл тикет в саппорт MikroTik.
С уважением, Патрик
Локация 1 — CCR1009-8G-1S-1S+ с полной таблицей BGP, без маршрута по умолчанию, приватная сеть 10.64.136.0/22
Локация 2 — RB750GL со статическим IP, маршрут по умолчанию, приватная сеть 10.64.12.0/22
Если настроить IPsec, оно не работает. Если с Локации 1 пинговать:
/ping 10.64.12.1 src-address=10.64.136.1
то получаем «No route to host». Если то же самое сделать с машины за маршрутизатором на Локации 1, приходит ответ «ICMP destination net unreachable». На Локации 2 пакеты не доходят.
Если пинговать с Локации 2:
/ping 10.64.136.1 src-address=10.64.12.1
то всё виснет — «Timed out». Пакеты доходят до Локации 1.
Выяснил, что MikroTik отбрасывает все пакеты с назначением, по которым нет маршрутов в ядре. Поскольку IPsec работает через политики, а не через маршруты ядра, политика IPsec не срабатывает. На Локации 2 такой проблемы нет из-за наличия маршрута по умолчанию.
На Локации 1 я решил это грязным хаком:
/interface bridge add name=br-loopback
/ip route add dst-address=10.0.0.0/8 gateway=br-loopback
Кто-нибудь может это подтвердить? Политики IPsec должны применяться ДО маршрутизации, и не должно быть «ICMP destination net unreachable», если для пакетов есть соответствующая политика IPsec.
Уже открыл тикет в саппорт MikroTik.
С уважением, Патрик

«Будущее IPsec на Linux» Кена Бэнтофта.