Как подключиться к PostgreSQL из другой сети
Подключите уже работающую тестовую PostgreSQL к psql или DBeaver на втором компьютере через частный TCP-канал DevProxy без публичного порта.
Обновлено:
Содержание
Допустим, у вас на компьютере есть тестовая база PostgreSQL. Коллеге нужно посмотреть её в DBeaver, но он работает из дома и подключиться напрямую не может. DevProxy поможет открыть ему доступ: программа на вашем ПК принимает соединение, а программа у коллеги передаёт его к базе через закрытый канал.
В основном примере база остаётся на вашем компьютере, а подключается коллега со своей учётной записью DevProxy и своим ключом. Тестовая база уже должна открываться на компьютере с PostgreSQL по 127.0.0.1:5432 с ограниченной ролью. Если это не так, сначала решите вопрос с владельцем базы. Для этого не нужны права администратора базы или открытый в интернете порт PostgreSQL.
Что понадобится
- Компьютер, на котором работает PostgreSQL, и второй компьютер коллеги для psql или DBeaver.
- Уже созданная тестовая база и роль с доступом к ней. В примерах используются
demo_dbиdemo_reader; замените их на свои. - DevProxy на обоих компьютерах. Если программа ещё не установлена, начните с руководства по началу работы.
- Две отдельные учётные записи DevProxy с подтверждённой почтой и по одному обычному ключу у каждой.
- Свободный порт
15432на втором компьютере. Порт5432остаётся на компьютере с базой.
Сначала проверьте TCP на компьютере с PostgreSQL
Откройте обычный терминал на компьютере, где работает база, и выполните:
psql -h 127.0.0.1 -p 5432 -U demo_reader -d demo_db -WЗдесь мы явно указали адрес 127.0.0.1 и порт 5432: так проверяется именно то подключение, которое потом будет передавать DevProxy. Параметр -W включает запрос пароля. Введите его в запросе psql, не добавляйте пароль в URL или командную строку.
Если psql запросил пароль и открыл базу, локальный TCP-вход работает. Если появилась ошибка входа, неизвестная роль или база либо соединение отклонено, проверьте с владельцем базы имя роли, пароль, локальный порт и права роли на demo_db. Не ослабляйте проверку паролей и не заменяйте её доверительным режимом.
Создайте два ключа
Ключу компьютера с базой нужно право создавать TCP-канал: host:tcp. Коллеге нужен отдельный ключ в его учётной записи с правом connect:tcp. Публичный TCP и управление пространством в основном сценарии не нужны. Не передавайте коллеге ваш ключ и не копируйте его файл настроек.
Для компьютера с PostgreSQL выберите вариант «Удалённый стол или TCP-сервис», оставьте право публиковать TCP-сервисы и дайте ключу понятное название. Коллега в своём аккаунте создаёт ключ с вариантом «Подключение к частному сервису» и правом connect:tcp. Публичный TCP-порт и управление пространством не включайте.
На бесплатном тарифе доступны три канала, два активных доступа к частным туннелям и 5 ГиБ трафика в месяц. Лимиты общие для вашего пространства. Уже выданные доступы, другие каналы и их трафик тоже учитываются.
Настройте компьютер с PostgreSQL
Откройте файл настроек DevProxy на компьютере с базой. Если файл пустой, вставьте такой пример целиком:
server: https://control.devtunnels.ru
reconnect: true
tunnels:
- name: postgres-demo
kind: tcp
local: tcp://127.0.0.1:5432
privateRelay: true
transport: relay
token: КЛЮЧ_ПК_С_БДЗамените КЛЮЧ_ПК_С_БД на ключ этого компьютера. Если в файле уже есть другие каналы, сохраните их и добавьте запись postgres-demo, не заменяя весь файл и не отключая остальные каналы.
Сохраните файл и запустите DevProxy:
devproxy startДождитесь готовности канала и найдите postgres-demo в разделе «Туннели». Канал будет иметь адрес вида relay://postgres-demo.ваше-пространство.devtunnels.ru. Скопируйте фактическое имя без relay://: оно понадобится на втором компьютере.
Пригласите коллегу и настройте второй компьютер
Перед приглашением подтвердите почту в обеих учётных записях. Когда канал postgres-demo появился и работает, откройте раздел «Туннели» этого пространства в кабинете. В блоке «Доступ по почте» в списке «Закрытый TCP-туннель» выберите postgres-demo, укажите в поле «Почта пользователя» адрес учётной записи коллеги и нажмите «Открыть доступ». Кабинет покажет приглашение по этой почте.
Укажите именно почту коллеги. Он должен войти в DevProxy с этим адресом и подтвердить его. После входа в аккаунт он открывает раздел «Доступные мне», находит канал и использует свой ключ connect:tcp.
Письмо может не прийти. Доступ всё равно привязан к приглашённой почте: после входа с ней туннель появляется в разделе «Доступные мне». Если почта не подтверждена, подключение по приглашению не откроется.
На компьютере коллеги откройте файл DevProxy. Для пустого файла используйте пример:
server: https://control.devtunnels.ru
reconnect: true
connectors:
- kind: tcp
host: postgres-demo.ваше-пространство.devtunnels.ru
localPort: 15432
transport: relay
token: КЛЮЧ_НОУТБУКАВ host вставьте имя канала без relay://, косой черты и пути. В token укажите ключ коллеги. Пароль PostgreSQL сюда не вставляется. Если в файле уже есть другие подключения, не удаляйте их: добавьте ещё одну запись.
Сохраните файл и запустите DevProxy на втором компьютере:
devproxy startКогда подключение готово, DevProxy слушает только 127.0.0.1:15432 на этом компьютере. Оставьте работающими нужные каналы. Останавливать все каналы DevProxy для проверки базы не требуется.
Подключитесь через psql
Откройте на втором компьютере обычный терминал:
psql -h 127.0.0.1 -p 15432 -U demo_reader -d demo_db -WПароль снова введите в запросе psql. На компьютере с базой остаётся порт 5432, а здесь используется локальный порт 15432. Адрес канала не заменяет адрес 127.0.0.1 в этой команде.
После входа выполните короткую проверку:
SELECT current_database(), current_user;Запрос только показывает выбранные базу и роль. Пользовательские таблицы читать и менять для проверки не нужно. PostgreSQL отдельно проверит пароль и права роли после того, как DevProxy передаст соединение.
Подключитесь через DBeaver
В DBeaver нажмите «Новое подключение», выберите PostgreSQL и укажите:
- В поле Host:
127.0.0.1. - В поле Port:
15432. - В поле Database: свою базу, в примере
demo_db. - В поле Username: ограниченную роль, в примере
demo_reader. - Пароль: в поле «Пароль» и только для этого подключения.
Нажмите «Test Connection». Отдельный SSH-туннель в настройках DBeaver включать не нужно: DevProxy уже подготовил подключение на 127.0.0.1:15432.
Если для базы уже настроено шифрование, сохраните его настройки во вкладке SSL. Закрытый доступ DevProxy не заменяет проверку сертификата PostgreSQL. Если после смены адреса появляется ошибка имени сертификата, не отключайте проверку: правильное имя и настройки подключения лучше уточнить у владельца базы. Поля подключения описаны в справке DBeaver.
После работы
Когда работа закончена, выйдите из psql командой \q или нажмите Disconnect в DBeaver. Если доступ коллеге больше не нужен, найдите приглашение по его почте и нажмите «Отозвать доступ». Другие каналы и доступы сохраните.
Если что-то не получилось
- Connection refused. Проверьте, запущена ли PostgreSQL на компьютере с базой и слушает ли она
127.0.0.1:5432. На втором компьютере проверьте, что подключение DevProxy готово и использует порт15432. - password authentication failed for user. Сверьте имя роли и пароль. Ошибка относится к PostgreSQL, даже если канал DevProxy уже работает.
- no pg_hba.conf entry. Попросите владельца базы проверить, разрешён ли вход с компьютера, где работает PostgreSQL. Не ослабляйте правило до
trustи не открывайте базу в интернет. - DevProxy сообщает, что доступ отклонён. Проверьте, что коллега вошёл в свою учётную запись, использует свой ключ
connect:tcp, а приглашение отправлено на ту же подтверждённую почту. - Порт 15432 занят. Выберите другой свободный локальный порт в конфигурации коннектора и укажите тот же порт в psql или DBeaver.
Если psql работает на компьютере с базой, а через DevProxy соединение не появляется, проблема находится в разрешении, имени канала или второй стороне подключения. Если канал готов, но PostgreSQL отклоняет вход, проверяйте роль и пароль уже в самой базе.
Настройки psql и проверки сертификатов описаны в официальной справке PostgreSQL: параметры psql, правила входа, имя и адрес сервера, SSL.
Попробуйте бесплатно
Бесплатного тарифа хватает на все сценарии из инструкций.
Другие инструкции
- Как начать пользоваться DevProxy: регистрация, ключ и установка программы
- Как показать заказчику сайт, который открыт только на вашем компьютере
- Как подключиться к рабочему компьютеру из дома без белого IP и VPN
- Как открыть умный дом Home Assistant с телефона вне дома без проброса портов
- Как смотреть свою домашнюю медиатеку Jellyfin вне дома
- Как пользоваться нейросетью на домашнем компьютере со своего телефона
- Как слушать музыку с домашнего компьютера как своё интернет-радио
- Как дать доступ к папке на компьютере по ссылке
- SSH к домашнему Linux без белого IP
- Minecraft Java с другом через интернет на бесплатном тарифе DevProxy
- Синхронизация папок между двумя компьютерами через интернет
- n8n на своём компьютере: как принять webhook из интернета
- Telegram-бот на своём компьютере: настройка webhook
- DevProxy вместо ngrok: туннели для работы и дома
- Как проверить GitHub webhook на localhost через HTTPS