Консоль предлагает переключатель раздельного туннеля, поэтому решение кажется флажком. Это не так. До клиента фактически доходит опубликованный набор маршрутов конечной точки, и этот список определяет, какие частные префиксы используют туннель, остаётся ли общий интернет-трафик локальным или выходит через AWS, и с каким resolver клиент ещё может говорить. Три вопроса решают дизайн, и на каждый можно ответить плохо, пока соединение всё равно устанавливается.

Флаг раздельного туннеля — не список назначений

AWS описывает раздельный туннель как добавление маршрутов конечной точки в таблицу маршрутов клиента при установлении соединения. Маршрут к частной VPC ограничивает туннель этим назначением; всё остальное идёт обычным путём клиента. Маршрут по умолчанию — другая инструкция с другим эффектом, поэтому документация по раздельному туннелю предупреждает против публикации 0.0.0.0/0 на конечной точке, настроенной для этого режима: это обычно ломает связность, а не расширяет её. Таблица маршрутов конечной точки — это политика, а таблица маршрутов клиента — результат, который можно проверить.

Читайте таблицу маршрутов конечной точки и установленные маршруты клиента вместе. Метка описывает намерение; маршруты описывают, что происходит.

Первое решение: должен ли общий интернет-трафик оставаться локальным?

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

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

Второе решение: какие частные префиксы и с чьей авторизацией?

Публикуйте наименьший набор назначений, который обслуживает реальную нагрузку, и проверьте, что каждая связанная подсеть может маршрутизировать к ним. Цель маршрута конечной точки и маршрутизация VPC подсети — разные уровни, и маршрут, существующий в одном, не является доказательством для другого. Авторизация снова отдельная: назначение может быть достижимым и всё равно отклонённым, потому что у группы клиента нет правила, которое его разрешает.

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

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

Третье решение: какой resolver следует за туннелем?

Клиент может получить DNS-сервер, доступный только через VPN, и этот resolver работает, только если его адрес сам находится внутри авторизованного маршрута. Проверьте обе половины: адрес resolver следует опубликованному маршруту, а сервер отвечает на имена, которые запрашивает приложение. Запрос, который успешен по адресу, но неудачен по имени хоста, указывает на именование, а не на маршрутизацию, и отладка туннеля в этом случае тратит впустую день.

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

Измените набор маршрутов, затем проверьте оба мира

AWS документирует, что изменение маршрутов на конечной точке раздельного туннеля сбрасывает клиентские соединения. Планируйте изменение с этим в виду: примените его, переподключитесь через поддерживаемый клиент и перечитайте установленные маршруты заново, вместо того чтобы доверять состоянию, применённому до правки. Устаревшее применённое состояние — самая частая причина, по которой правильное изменение выглядит сломанным.

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

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

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