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

Проверка первая: где на самом деле находится конечная точка?

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

ShapeWhat it meansPass condition
Software on your VMOrdinary subnet addressingRoute and security group permit the client
Attached to your VPCPrivate, but only inside that VPCEndpoint associated, source allowed, route present
Provider-hosted, public endpointOptional private link, not private by defaultA private endpoint exists and DNS points at it

Большинство потерянных послеобеденных часов возникает из-за пропуска этой классификации и перехода сразу к таблице маршрутов. Сервис, размещённый у провайдера, с публичной конечной точкой не находится за вашим туннелем, что бы ни говорила схема, а подключённый к VPC никогда не появится в публичном ответе DNS.

Проверка вторая: сервис, подключённый к VPC, например ElastiCache

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

Частая ошибка — считать, что соединение где-то рядом тоже учитывается. Подключение VPN к другому VPC или опора только на peering не расширяет группу безопасности кэша или таблицу маршрутов его подсети на ваших клиентов. Когда существующий туннель заканчивается в другом месте, обычный обходной путь — промежуточный хост или VPN-сервер, размещённый внутри этого VPC. Такой обход — это не проект, а именно обход, и в инструкции его следует так и помечать.

Проверка третья: конечная точка PaaS с публичным именем

Azure Database for PostgreSQL представляет публичное имя сервера. Он не даёт вам приватный адрес, который можно закрепить в файле hosts и направить через шлюз. Конечные точки службы виртуальной сети ограничивают, какие подсети могут достичь ресурса; они не дают разрешения локальному клиенту, приходящему через VPN.

Получение приватного доступа означает введение приватной конечной точки или схемы приватного канала, а затем добавление приватной зоны DNS, чтобы публичное имя отвечало этой точкой, а не интернетом. VPN в сочетании с правилом конечной точки службы — это другая архитектура, которая выглядит одинаково только на схеме. App Service следует той же логике с противоположной стороны: интеграция с VNet позволяет приложению делать исходящие вызовы в VNet и не создаёт входящий приватный путь из вашего туннеля. Поэтому входящий приватный доступ требует приватной конечной точки, среды App Service или шлюза перед приложением, и что из этого доступно, зависит от плана.

Проверка четвёртая: продукты с собственной входной дверью

Firebase Hosting нельзя подключить к Cloud VPN, потому что уровень хостинга — это глобальный фронтенд, а не что-то внутри VPC проекта. Документированная альтернатива — построить контролируемую точку входа самостоятельно, с прокси-инстансом или балансировщиком нагрузки на основе бакета. В любом случае сайт перестаёт быть чистым продуктом хостинга и становится инфраструктурой, которой теперь управляете вы. Эту сделку стоит назвать до того, как кто-то пообещает, что туннель её покроет.

Private API Gateway стоит ближе к стороне сервисов VPC: конечная точка VPC типа interface публикует имя хоста, ответами которого являются приватные адреса, а трафик из вашего офиса приходит через туннель или выделенное соединение. Конечная точка должна быть связана с API, а сертификат вместе с именем хоста должны соответствовать пользовательскому домену, который используют вызывающие.

Туннели Google Cloud VPN привязываются к IP-адресам партнёров, а не к именам. Переадресация DNS настраивается отдельно, поэтому туннель может быть полностью исправным, пока поиск в удалённой приватной зоне всё ещё не работает.

Затем определите границу

Выполните то же соединение с VM внутри VPC. Если там оно удаётся, а с клиента VPN нет, разрыв находится между путём клиента и конечной точкой сервиса: маршрут, группа безопасности, политика конечной точки или имя. Если не удаются обе попытки, ничто в этой сети не может достичь сервиса, и VPN никогда не был препятствием.

getent hosts db.internal.example
nc -vz db.internal.example 5432

Делайте поиск имени и проверку порта отдельно, потому что они терпят неудачу по разным причинам, и эта пара говорит вам, какая половина пути нарушена. Имя, которое разрешается в публичный адрес, говорит вам, что приватная зона DNS не задействована.

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