Как подключиться к 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 и укажите:

  1. В поле Host: 127.0.0.1.
  2. В поле Port: 15432.
  3. В поле Database: свою базу, в примере demo_db.
  4. В поле Username: ограниченную роль, в примере demo_reader.
  5. Пароль: в поле «Пароль» и только для этого подключения.

Нажмите «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.

Попробуйте бесплатно

Бесплатного тарифа хватает на все сценарии из инструкций.

Создать аккаунт

Другие инструкции