Трафик защищён, туннель работает, а затем он умирает при следующем обновлении ключей. Маршрут по умолчанию через интерфейс XFRM описывал трафик, который вы хотели защитить. Он также поглотил пакеты, необходимые для продолжения защиты.

Два задействованных назначения не взаимозаменяемы. Маршрутизация должна сказать это явно.

Куда на самом деле попадает поиск партнёра

Запишите активные правила, таблицу с маршрутом XFRM и публичный адрес партнёра. Затем посмотрите на путь, который выберет внешнее соединение со своим реальным источником и меткой. Общее назначение ничего не говорит об этом пути управления. Только фактический источник и метка дают полезный ответ.

Успешное начальное соединение тоже доказывает немногое. Сбой часто появляется после того, как установка маршрута меняет ответ. Запуск проходит, а первое обновление — нет.

ip rule show
ip route show table 220
ip -4 route get 198.51.100.44 from 10.40.0.2
ip xfrm policy list

Если поиск партнёра попадает в интерфейс XFRM, внешние пакеты маршрутизируются в туннель, который они сами строят. Это и есть петля, видимая одной командой.

Варианты исключения на современном шлюзе

Документация strongSwan о VPN на основе маршрутизации приводит два практических ответа. Один помечает IKE и ESP, чтобы правило на таблицу XFRM на них не срабатывало. Другой оставляет маршрут к партнёру или исключение, до которого поиск ещё может добраться.

Выберите тот, который ваш набор правил может выразить без побочных эффектов. Метка чиста, когда остальная часть стека уже использует метки. Она опасна, когда та же маска означает что-то другое в другом правиле. Оба типа пакетов в любом случае нуждаются в обработке.

Пометка только IKE оставляет пакеты данных на перехваченном пути. Это даёт туннель, который выполняет рукопожатие и затем ничего не несёт.

Метка — это один бит в fwmark пакета, на который больше ничто на шлюзе не претендует: 0x1 с маской 0x1 — обычный выбор, и его нужно задать в двух местах, чтобы исключение работало. Charon нужна она на сокете IKE, а настройкам входящей и исходящей метки дочернего соединения нужно то же значение, чтобы инкапсулированные пакеты тоже уходили помеченными. Маска 0x1 вместо 0xffffffff оставляет остальные биты свободными, что важно, когда другая подсистема уже помечает пакеты на том же хосте. Когда заданы оба, правило записывается как исключение, так что помеченные пакеты пропускают таблицу с маршрутом XFRM и попадают в основную таблицу:

ip rule add not fwmark 0x1/0x1 lookup 220 pref 1000
ip -4 route get 198.51.100.44 from 10.40.0.2 mark 0x1

Затем прочитайте ответ с применённой меткой. Без неё вы изучаете путь, по которому идёт защищённый трафик, — противоположность вопросу этого раздела.

Что автоматическая установка предполагает о сборке

Автоматическая установка маршрута для интерфейса XFRM зависит от версии strongSwan и её конфигурации. ID интерфейса, установленная политика и ассоциация должны все указывать на нужные объекты. Несоответствие проявляется как маршрут, который тихо указывает куда-то реальное.

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

Изменения адреса партнёра относятся к проектированию. Маршрут к хосту для вчерашнего адреса — не план восстановления конечной точки, тогда как метка переживает это изменение.

Следите за первым обновлением

Проверьте внешний путь после установки защищённых маршрутов, а не до неё. Затем следите за следующим обновлением и одним обменом приложения. Сбой обычно появляется на этом переходе, а не при запуске.

ip -4 route get 198.51.100.44
sudo swanctl --list-sas
sudo tcpdump -ni any 'udp port 500 or esp'

Временное удаление защищённого маршрута по умолчанию обычно восстанавливает связность. Этот результат диагностический, а не окончательный.

Цель — стабильное разделение внутреннего трафика и внешних пакетов, которые его несут. Запишите выбранный механизм и его таблицу или метку в заметки шлюза. Иначе следующий человек, коснувшийся правил, снова внесёт петлю.

Похожие статьи