Вопрос или проблема
Я только что потратил час своей жизни, пытаясь понять, почему pgAdminIII не может подключиться к серверу на localhost
. После попыток отредактировать конфигурацию, перезапустить службу postgresql и т.д., я наконец осознал, что с последнего использования pgAdminIII изменилось только одно: я был подключен к своему VPN.
Я не сетевой гуру, поэтому и спрашиваю здесь: почему я не могу подключиться к PostgreSQL (localhost), когда я активно подключен к своему VPN-провайдеру?
Бонус: какие команды/шаги я могу использовать, чтобы показать именно почему?
ПОПРАВКА:
pg_hba.conf:
...
# ВНИМАНИЕ: Конфигурация системы для локальной аутентификации "trust"
# позволяет любому локальному пользователю подключаться как любой пользователь PostgreSQL, включая
# суперпользователя базы данных. Если вы не доверяете всем своим локальным пользователям,
# используйте другой метод аутентификации.
# TYPE DATABASE USER ADDRESS METHOD
# "local" предназначен только для подключений по сокетам Unix
local all all trust
# IPv4 локальные подключения:
host all all 127.0.0.1/32 trust
# IPv6 локальные подключения:
host all all ::1/128 trust
# Разрешить репликационные подключения с localhost, пользователю с
# правом репликации.
#local replication chris trust
#host replication chris 127.0.0.1/32 trust
#host replication chris ::1/128 trust
Версия OS X: 10.12.6 (Sierra)
Версия PostgreSQL: 9.6.3
VPN-провайдер: ExpressVPN
Я не гуру сетей, поэтому и спрашиваю здесь: почему я не могу
подключиться к PostgreSQL (localhost), когда я активно подключен к своему
VPN-провайдеру?
Вы настроили свою установку PostgreSQL так, чтобы разрешать подключения только с localhost.
Какие команды/шаги я могу использовать, чтобы показать именно почему?
Измените pg_hba.conf, чтобы включить запись для вашего IP-адреса ExpressVPN
host all all xxx.xxx.xxx.xxx trust
Я не советую вам предоставлять всем локальным и базовым пользователям, которые подключаются к вашему серверу с использованием VPN-адреса, доступ к вашей базе данных. Если бы вы хотели, чтобы это было так, вы бы изменили xxx.xxx.xxx.xxx
на ваш IP-адрес ExpressVPN, и любой пользователь смог бы подключиться к вашему серверу базы данных.
Ответ или решение
Когда вы подключены к VPN и пытаетесь подключиться к PostgreSQL на localhost
, возможны несколько причин, почему соединение не удается. Вот основные моменты, которые следует рассмотреть:
Причины проблемы
-
Изменение сетевых маршрутов: Когда вы подключаетесь к VPN, все ваши сетевые подключения могут направляться через интерфейсы VPN. Это может привести к перенаправлению вашего локального трафика через удаленный сервер VPN, что может блокировать доступ к вашей локальной базе данных.
-
Настройки файрвола: VPN-клиенты иногда имеют собственные настройки фаервола, которые могут блокировать соединения, даже если конфигурация PostgreSQL разрешает их. Убедитесь, что ваш фаервол не блокирует трафик на порту PostgreSQL.
-
Конфигурация
pg_hba.conf
: Вы предоставили фрагмент вашего файла конфигурацииpg_hba.conf
, который выглядит правильно для локальных подключений, как таковых. Однако, если VPN создает новый интерфейс с другим IP-адресом и вы попытаетесь подключиться через него, это может вызвать проблемы с аутентификацией.
Решение проблемы
1. Проверьте настройки VPN
- Отключите VPN и проверьте, можете ли вы подключиться к PostgreSQL.
- Если подключение возможно без VPN, это подтверждает, что проблема связана с VPN.
2. Настройте pg_hba.conf
Если вы хотите, чтобы PostgreSQL принимал соединения от адресов из вашего VPN, вам нужно будет изменить файл pg_hba.conf
. Например, вы можете добавить строку, которая разрешает доступ к PostgreSQL для IP-адресов вашего VPN:
host all all xxx.xxx.xxx.xxx trust
Замените xxx.xxx.xxx.xxx
на IP-адрес вашего VPN. Обратите внимание, что это может создать риски безопасности, если любой пользователь сети VPN сможет подключаться к вашей базе данных.
3. Запустите команды для диагностики
В терминале вы можете использовать несколько команд для диагностики проблемы:
-
Проверьте активные соединения:
netstat -an | grep 5432
-
Проверьте конфигурацию PostgreSQL:
psql -U ваш_пользователь -c "SHOW listen_addresses;"
-
Проверьте IP-адреса:
ifconfig
-
Проверьте маршруты:
route -n
Эти команды помогут вам выяснить, какие порты слушает PostgreSQL, и какие IP-адреса активны на вашем устройстве.
Заключение
Использование VPN может изменять маршрутизацию сетевого трафика, что может привести к проблемам с подключением к локальным службам, таким как PostgreSQL. Убедитесь, что ваша конфигурация сервера PostgreSQL соответствует новым условиям вашей сети, когда вы подключены к VPN. Если необходимо, проверяйте соединение и в случае необходимости вносите изменения в настройки безопасности, чтобы избежать проблем с доступом.