По умолчанию AWS Site-to-Site VPN ждёт, пока customer gateway начнёт согласование. Это значение по умолчанию — настройка, а не закон, и настройка называется Startup action. Прежде чем браться за неё, разделите два вопроса, которые постоянно смешивают: кто строит туннель и есть ли у нужных вам пакетов маршрут через него. Только первый живёт в параметрах туннеля.

Отделите действие запуска от действия тайм-аута DPD

Две настройки для каждого туннеля управляют двумя разными событиями, и установка одной ничего не говорит о другой.

EventOptionUseful values
A new or modified VPN connection needs a tunnelStartup actionadd waits for the peer; start asks AWS to initiate
Dead peer detection times outDPD timeout actionclear ends the session, restart reinitiates, none does nothing

Если AWS должна поднять новый или изменённый туннель, выберите start. Если AWS должна также перезапустить согласование после тайм-аута DPD, настройте restart для этого события отдельно. Ни одна из настроек не является политикой повторных попыток приложения, и ни одна не является интервалом смены ключа: DPD проверяет, жив ли партнёр, а смена ключа заменяет security associations на работающем туннеле.

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

Проверьте, что AWS есть куда отправить согласование

Инициирование со стороны AWS работает только с IKEv2, и AWS нужен публичный адрес customer gateway, чтобы знать, куда отправлять предложение. Самый болезненный случай — ресурс customer gateway с аутентификацией по сертификату, созданный без адреса: документация AWS описывает создание нового ресурса customer gateway с адресом и последующее изменение VPN-соединения, чтобы оно указывало на него.

Сертификат доказывает, кто такой партнёр. Он не сообщает AWS, где партнёр находится, и это два разных требования. Поэтому решение — новый ресурс customer gateway, а не новый сертификат. Замена сертификата оставляет AWS с той же отсутствующей целью.

Если customer gateway стоит за NAT, AWS также нужен настроенный responder identity, IDr, чтобы идентичность партнёра совпадала с тем, что ожидает устройство. Подтвердите это значение и путь через межсетевой экран, пропускающий трафик IKE, прежде чем винить настройку, которую вы только что изменили. Выбор start не может заставить недоступного или неверно определённого партнёра принять предложение.

Примените изменение к одному туннелю и ожидайте перерыва

У VPN-соединения два туннеля с независимыми настройками, поэтому по внешнему адресу убедитесь, какой именно вы редактируете. AWS позволяет менять один туннель за раз, и связность через выбранный туннель может прерываться на несколько минут.

  1. Выберите соединение Site-to-Site VPN и откройте Modify VPN tunnel options.
  2. Выберите туннель по внешнему IP-адресу и подтвердите его версию IKE и ресурс customer gateway.
  3. Задайте те действия запуска и DPD, которые действительно нужны, и сохраните в окне, которым управляете вы.
  4. Подтвердите, что изменённый туннель устанавливается, и проверьте другой туннель и маршрутизацию перед следующей правкой.

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

Проверяйте путь приложения, а не только состояние туннеля

Туннель, сообщающий up, — не то же самое, что работающий запрос. Функции Lambda, подключённой к VPC, по-прежнему нужен subnet-маршрут к префиксу клиента, правила security group и network ACL, разрешающие трафик, разрешение имён, возвращающее правильный адрес, и обратный путь на стороне клиента.

Проверьте один раз реальным запросом из контекста приложения, а если не выйдет, прочитайте flow logs. Трафик keepalive — законный вариант, когда инициирование со стороны AWS выключено и простаивающему туннелю нужны пакеты, чтобы держаться, но это должно быть решение о мониторинге, которое вы можете назвать, а не необъяснённый цикл ping, прикрученный к функции.

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

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