PHP - Не удалось подключиться к базе данных PostgreSQL на виртуальной машине


Я пытаюсь подключиться к базе данных PostgreSQL на виртуальной машине с помощью php-скрипта, но безуспешно.

Я запускаю php с хоста (Windows 8.1), а postgresql находится на виртуальной машине (Debian 8.6). Я использую VirtualBox.

Вывод ошибки из браузера выглядит следующим образом:

Предупреждение: pg_connect(): Не удалось подключиться к серверу PostgreSQL: не удалось подключиться к серверу: Истекло время ожидания подключения (0x0000274c/10060) Сервер работает на хосте "10.0.2.15" и принимать соединения TCP/IP на порту 5432? в C:\xampp\htdocs\pg_test.php в строке 11

Со строкой 11, являющейся pg_connect($conn_string).

Параметры, переданные pg_connect($conn_string), следующие:

$host = "host=10.0.2.15";
$port = "port=5432";
$dbname = "dbname=postgres";
$user = "user=user_switch";
$password = "password=switch";
$conn_string = "$host $port $dbname $user $password";
pg_connect($conn_string);

Я использую host=10.0.2.15, потому что я проверил (с помощью ifconfig), что у гостя есть ip-адрес 10.0.2.15.

Я изменил файлы pg_hba.conf и postgresql.conf, включив в них строки:

Pg_hba.conf:

host all all 0.0.0.0/0 trust

Postgresql.conf:

listen_addresses = '*'

В iptables Я добавил правило -A INPUT -p tcp -m cp --dport 5432 -j ACCEPT

Я также попытался отключить брандмауэр на хосте Windows.

В некоторых местах говорят, что SELinux блокирует соединение, но у меня его нет в гостевой системе.

Я могу успешно подключиться к базе данных с помощью пользователя "user_switch" в гостевой с помощью команды psql -d postgres -U user_switch -W -h localhost, в которой он запрашивает у меня пароль.

Заранее спасибо, пожалуйста, не стесняйтесь спрашивать о дополнительных спецификациях, которые я, возможно, забыл.

Author: De Ripper, 2016-10-13

1 answers

Хост и гость должны находиться в одной сети. Вы должны назначить правильный адрес обоим, например 192.168.56.1 на хосте и 192.168.56.101 на госте. По соображениям безопасности вам следует удалить строку, разрешающую подключение с любого IP (0.0.0.0/0), и добавить следующую строку в pg_hba.conf:

host  all  all  192.168.56.0/24  trust

И перезапустите PostgreSQL. Это позволяет любой попытке подключения к гостю из 192.168.56.x.

 2
Author: pietrop, 2016-10-13 09:16:07