Как заставить AWS запустить туннель Site-to-Site VPN
Действие запуска и действие тайм-аута DPD отвечают на разные вопросы. Задайте то, которое заставляет AWS инициировать, затем проверьте адрес партнёра и маршрут приложения.
По умолчанию AWS Site-to-Site VPN ждёт, пока customer gateway начнёт согласование. Это значение по умолчанию — настройка, а не закон, и настройка называется Startup action. Прежде чем браться за неё, разделите два вопроса, которые постоянно смешивают: кто строит туннель и есть ли у нужных вам пакетов маршрут через него. Только первый живёт в параметрах туннеля.
Отделите действие запуска от действия тайм-аута DPD
Две настройки для каждого туннеля управляют двумя разными событиями, и установка одной ничего не говорит о другой.
| Event | Option | Useful values |
|---|---|---|
| A new or modified VPN connection needs a tunnel | Startup action | add waits for the peer; start asks AWS to initiate |
| Dead peer detection times out | DPD timeout action | clear 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 позволяет менять один туннель за раз, и связность через выбранный туннель может прерываться на несколько минут.
- Выберите соединение Site-to-Site VPN и откройте Modify VPN tunnel options.
- Выберите туннель по внешнему IP-адресу и подтвердите его версию IKE и ресурс customer gateway.
- Задайте те действия запуска и DPD, которые действительно нужны, и сохраните в окне, которым управляете вы.
- Подтвердите, что изменённый туннель устанавливается, и проверьте другой туннель и маршрутизацию перед следующей правкой.
Одно поведение заслуживает внимания перед обслуживанием. При включённом инициировании со стороны AWS тайм-аута нет: AWS продолжает пытаться, пока туннель не поднимется, и инициирует заново, когда customer gateway отправляет сообщение delete-SA. Если вы намеренно отключите партнёра, AWS продолжит стучаться, и журналы партнёра это покажут.
Проверяйте путь приложения, а не только состояние туннеля
Туннель, сообщающий up, — не то же самое, что работающий запрос. Функции Lambda, подключённой к VPC, по-прежнему нужен subnet-маршрут к префиксу клиента, правила security group и network ACL, разрешающие трафик, разрешение имён, возвращающее правильный адрес, и обратный путь на стороне клиента.
Проверьте один раз реальным запросом из контекста приложения, а если не выйдет, прочитайте flow logs. Трафик keepalive — законный вариант, когда инициирование со стороны AWS выключено и простаивающему туннелю нужны пакеты, чтобы держаться, но это должно быть решение о мониторинге, которое вы можете назвать, а не необъяснённый цикл ping, прикрученный к функции.
Сначала выберите, кто строит туннель, затем диагностируйте оставшуюся неисправность на её собственном уровне. Документация AWS об инициировании описывает требования к адресу, идентичности и повторным попыткам подробнее, чем подсказки в консоли.