Пропуск IPsec на домашнем роутере: что он на самом деле делает
Переключатель пропускает один протокол через трансляцию адресов; он не регистрирует роутер как клиента. Запишите обмен, прочитайте ассоциации и затем решите.
Переключатели пропуска на роутере — это уступки перенаправления для устройства за ними, а не VPN-сервисы. Они не регистрируют роутер как клиента, не хранят учётные данные и не проталкивают каждое устройство в доме через удалённый выход. Они делают то, что формируют, как один протокол пересекает трансляцию адресов и фильтры. Как только это ясно, переключатель легко проверить и легко оставить выключенным.
Что роутер на самом деле делает
Роутер стоит между клиентом и партнёром IPsec и пересылает пакеты, которые никогда не был рассчитан понимать. Производители реализуют функцию как минимум тремя способами: помощник протокола, который отслеживает или перезаписывает состояние; исключение в фильтре, которое перестаёт отбрасывать ESP; или режим совместимости для старых клиентов. Надпись в веб-интерфейсе редко говорит, какой из трёх у вас. Об этом скажут только примечания к прошивке или запись пакетов.
Помощник может и ухудшить положение. Поддержка, написанная для старого потока, иногда мешает клиенту, который уже правильно обрабатывает трансляцию. Когда современный клиент работает с выключенной опцией, оставить её выключенной — лучшая конфигурация.
Пропуск никогда не отдаёт роутеру ключи партнёров. Он по-прежнему видит внешние адреса и порты и по-прежнему применяет к ним свою политику пересылки.
NAT и NAT-T решают путь
IPsec не создавался, чтобы пережить трансляцию адресов, поэтому стандарты добавили обёртку. NAT traversal инкапсулирует ESP внутрь UDP, позволяя обычной таблице NAT нести поток, и переговоры договариваются об этом переключении во время IKE (RFC 3948). Сам IKE использует UDP 500, а инкапсулированный путь обычно использует UDP 4500.
Поэтому правила брандмауэра, разрешающего только протокол 50, недостаточно на транслированном пути. Блокировка 4500 ломает случай, ради которого существует обёртка, а блокировка 500 останавливает переговоры до того, как образуется какой-либо туннель. Оба направления важны, потому что роутер с отслеживанием состояния обычно разрешает ответ только после того, как увидел запрос. Достичь порта — не то же самое, что завершить аутентификацию, и не то же самое, что переслать защищённый трафик.
Старые схемы отличаются достаточно, чтобы написанное для них руководство могло ввести в заблуждение. Когда клиент предлагает оба режима, проверяйте тот, который документирует ваш партнёр, а не тот, у которого больше результатов поиска.
Найдите отказывающий этап
Разделите проблему на переговоры, аутентификацию, защиту дочернего соединения и внутреннюю пересылку, затем собирайте доказательства для одной стадии за раз. Перезагрузка, временно меняющая результат, доказывает лишь то, что в деле участвовало какое-то состояние.
sudo tcpdump -ni any 'udp port 500 or udp port 4500'
ip xfrm state list
ip xfrm policy list
Запись показывает, доходит ли обмен до партнёра и возвращаются ли ответы, что отделяет проблему фильтрации от проблемы учётных данных. Список состояний показывает установленные ассоциации безопасности, поэтому пустой список после попытки указывает на переговоры, а не на маршрутизацию. Список политик показывает, какие селекторы установлены, и именно там исключается назначение вне подсети. Прочитайте оба вывода xfrm, прежде чем трогать роутер, потому что они описывают, что думает хост, а не что разрешает роутер.
Если пакеты уходят и ничего не возвращается, перенесите запись на сторону WAN роутера. Сравнение двух записей локализует отбрасывание без догадок.
Отключите то, что не нужно
Один работающий ноутбук не доказывает, что роутер обслуживает несколько клиентов одновременно. Каждый клиент создаёт собственное состояние трансляции и собственные переговоры, а некоторые помощники отслеживают только один поток. Проверьте число одновременных сеансов, которое вам действительно нужно, из сетей, которые вы действительно используете. Если второй клиент терпит неудачу, пока первый процветает, это и есть находка, а не нестабильный туннель.
Оставляйте опцию включённой только когда запись показывает, что она нужна. Запишите версию прошивки рядом с результатом, потому что это поведение меняется между выпусками. Цель — проверенный вами клиентский туннель, а не переключатель, включённый с надеждой.