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

Два решения, две границы

Site-to-siteRemote access
Endpointstwo gatewaysa gateway and each client
Who configuresnetwork ownerseach user or an MDM
Scope of reachwhatever the gateways routewhatever the client is granted
Broadcast discoverynot carriednot carried

Ни одно из решений не расширяет широковещательный домен LAN. Устройства на дальней стороне не появляются в локальном списке обнаружения, и ожидать этого — первое допущение, от которого нужно отказаться. Частные DNS-имена, которые вы намеренно публикуете, предсказуемее любого протокола обнаружения и переживают смену поставщика.

Возьмите 10.10.0.0/24 на одной площадке и 10.20.0.0/24 на другой. Шлюзу A нужен маршрут или селектор трафика, отправляющий префикс 10.20.0.0/24 в туннель, а шлюзу B нужно его зеркальное отражение. Затем хосты по обе стороны используют обычную IP-связность и никогда не узнают, что туннель существует. Эта невидимость и есть функция, и поэтому сбои выглядят как обычные сетевые ошибки, а не как ошибки туннеля.

На основе политики и на основе маршрута — это не один и тот же туннель

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

StrongSwan показывает оба представления напрямую, и читать их вместе — это способ понять, какую модель вы на самом деле развернули.

swanctl --list-sas
ip xfrm policy
ip -4 route show table all | grep -E '10\.(10|20)\.'

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

Спланируйте адресацию до туннеля

Пересекающиеся диапазоны — это ошибка проектирования, которую нельзя исправить конфигурацией. Если обе площадки используют 192.168.1.0/24, у хоста, которому нужен 192.168.1.50, есть два кандидата и никакого способа выбрать. Туннель пройдёт аутентификацию, ассоциации безопасности установятся, а решение маршрутизации всё равно будет неверным или неоднозначным.

Выберите один из трёх честных вариантов: перенумеровать одну площадку, транслировать пересекающийся диапазон на шлюзе, чтобы каждая сторона видела отдельный префикс, или отказаться от прямой маршрутизации для этих хостов и опубликовать сервис иначе. У каждого есть цена, и первый обычно самый дешёвый на двухлетнем горизонте. Решите до того, как туннель появится, потому что потом изменение затронет каждое устройство со старым адресом.

Вопрос с MTU тоже решите заранее. Туннель уменьшает полезную нагрузку, и решение, полагающееся на фрагментацию, ведёт себя иначе, чем то, которое фиксирует MSS на шлюзах.

Пересылка и политика находятся вне туннеля

Шлюз должен быть готов пересылать пакеты между интерфейсом туннеля и интерфейсом LAN, и обоим направлениям нужна политика, разрешающая сервис. В Linux это две отдельные настройки, плюс правила брандмауэра, которые решают, разрешён ли пересылаемый поток вообще.

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -s 10.20.0.0/24 -d 10.10.0.0/24 -j ACCEPT
iptables -A FORWARD -s 10.10.0.0/24 -d 10.20.0.0/24 -j ACCEPT

Принимающий хост добавляет третий уровень: его собственный брандмауэр всё ещё должен принять клиента из удалённой подсети. Файловый сервер, разрешающий только свою локальную /24, отклонит пересылаемый трафик от 10.20.0.7, как бы здраво ни выглядел туннель, и это отклонение легко прочитать как сбой маршрутизации.

Проверяйте с хоста, а не со шлюза

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

ip route get 10.10.0.5 from 10.20.0.7
ping -I 10.20.0.7 10.10.0.5
curl -sv --max-time 5 http://files.10-10.internal/ -o /dev/null

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

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

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