Подключение к удалённой базе данных за NAT
Вам нужно обратиться к базе данных — PostgreSQL, MySQL, Redis, MongoDB — которая работает на сервере без публичного IP, и вы хотите использовать привычный клиент: psql, DBeaver, инструмент миграций. Правильный путь — не открывать порт базы в интернет. С LRO база продолжает слушать на localhost на своей машине, а вы дотягиваетесь до неё на локальном порту своей через зашифрованный туннель.
-
Убедитесь, что база слушает локально
На машине с базой сервер должен слушать на
127.0.0.1— так настроено по умолчанию в большинстве установок. Ничего из этого не должно смотреть в интернет; LRO подключается к базе с той же машины.$ ss -ltn | grep 5432 # postgres on 127.0.0.1:5432 (3306 for MySQL, 6379 Redis)Это безопасная конфигурация: база привязана к loopback, поэтому напрямую из сети недоступна, и LRO этого не меняет. Удалённая машина запускает агента LRO в режиме Client (клиент); ваш компьютер — в режиме Support (саппорт).
-
Добавьте эндпоинт базы на агенте-клиенте
В панели Endpoints → Create endpoint (эндпоинты → создать эндпоинт). Выберите агента-клиента (машину с базой), назовите его, например, Office Postgres, и задайте target
127.0.0.1и port5432.
Рис. 1. Эндпоинт базы живёт на агенте-клиенте — target 127.0.0.1:5432, локальный Postgres. -
Откройте туннель со своей машины
Tunnels → Add tunnel (туннели → добавить туннель). Выберите свой компьютер как агента-саппорта, укажите эндпоинт Office Postgres и задайте локальный порт — совпадение со стандартным портом базы (
5432) упрощает команды клиента, но подойдёт любой свободный локальный порт. Создайте туннель; через мгновение он станет Active (активным).
Рис. 2. Активный туннель — ваша машина слушает на 5432 и пробрасывает на удалённый 127.0.0.1:5432. -
Подключитесь своим клиентом БД
На вашем компьютере направьте клиент на локальный порт. Соединение приходит на удалённую базу через туннель — здесь с помощью
psql:$ psql -h 127.0.0.1 -p 5432 -U appuser -d shopdb
Рис. 3. Реальный запрос к удалённой базе — через порт, который существует только на вашем ноутбуке. Всё, что говорит на протоколе базы, работает так же, будучи направленным на локальный порт — дампы, восстановления, миграции:
$ pg_dump -h 127.0.0.1 -p 5432 -U appuser shopdb > shopdb.sql $ DATABASE_URL=postgres://appuser@127.0.0.1:5432/shopdb npm run migrateGUI-клиенты — то же самое: в DBeaver, pgAdmin или TablePlus укажите хост
127.0.0.1и порт5432— туннель сделает остальное.
Заметки
- Любая база, любой TCP-порт — MySQL/MariaDB (
3306), Redis (6379), MongoDB (27017), SQL Server (1433). Меняются только целевой порт и клиентская утилита; три шага LRO идентичны. - Порт никогда не выставлен — база остаётся привязанной к
127.0.0.1на своей машине и к локальному порту на вашей. Ничто ни в один момент не открывается в публичный интернет. - Ограничьте доступ — задайте Allowed addresses (ACL) на туннеле, чтобы листенером могла пользоваться только ваша машина, и оставьте собственную аутентификацию базы включённой. Туннель — это транспорт, а не замена учётных данных БД.
- Как любой TCP-сервис — механика совпадает с доступом к SSH за NAT; база данных — это просто ещё один порт.
Работайте с любой базой данных где угодно — не выставляя ни одного порта.
Создать аккаунт →