c# Не могу подключиться к postgresql которая на virtualbox

Рейтинг: 0Ответов: 1Опубликовано: 01.04.2023

С официального сайта скачал .ovm файл для запуска сервера postgresql в виртуальной машине. Запускаю, создал там бд, создал таблицу, добавил данные, всё работает. В c# делаю соединение через Npgsql:

        bool boolfound = false;
        using (NpgsqlConnection conn = new NpgsqlConnection("Server=192.168.56.101;Port=5432;User Id=postgres;Password=4Oyat6gh7SfV;Database=postgres_db;"))
        {
            conn.Open();
            NpgsqlCommand cmd = new NpgsqlCommand("select * from postgresql", conn);
            NpgsqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                boolfound = true;
                Console.WriteLine("Connection established");
            }
            if (boolfound == false)
            {
                Console.WriteLine("bad things...");
            }
            dr.Close();
            conn.Close();
        }

Вызов conn.Open() выдает следующее: Npgsql.NpgsqlException: "Failed to connect to 192.168.56.101:5432" TimeoutException: Timeout during connection attempt

Настройки следующие: Сеть для машины - Виртуальный адаптер хоста

При запуске и выводе ip address адрес машины - 192.168.56.101

В настройках самого сервера файл postgresql.conf listen_addresses = '*', port = '5432' и в pg_hba.conf стоит host all all 192.168.56.1/24 md5

Машина из консоли винды пингуется, но c# отказывается подключаться. В чем может быть дело? А вот сервер не может пингануть 192.168.56.1 - адрес интерфейса который выдает команда ipconfig в консоли винды.

UPD:

пробовал так же сделать NAT сеть для машины, сделал проброс портов с хоста на гостя. В таком случае ошибка conn.Open(): Npgsql.NpgsqlException: "Exception while reading from stream"

UPD2:

делал просто сетевой мост в настройке vm для машины. Одна локальная сеть, 3 разных устройства в ней (сама вм, основной хост, второй ноут), всё пингуется во всех направлениях, а подключение к серверу просто не идет, без понятия что там нужно крутить в конфигах postgre сервера...

Ответы

▲ 1Принят

Решено:

  1. Нужно использовать сетевой мост для машины в VBox

  2. По умолчанию стоит nft firewall в debian(11) postgresql(15.2.0) машине, в его файле /etc/nftables.conf нужно включить 5432 порт на принятие внешних соединений

    chain inbound {

    ...

    tcp dport { 22,5432 } accept

    ...

    }

22 там и так стоит, это для ssh, далее перезапустить конфиг командой sudo /usr/sbin/nft -f /etc/nftables.conf (команда ничего не выведет при успешном выполнении). Настройка firewall на этом окончена.

  1. Командой ip address узнать ip виртуальной машины в сети, в моем случае 192.168.204.52/24, этот ip адрес нужно указать как принимающий соединения в файле /opt/bitnami/posrgresql/conf/postgresql.conf, строчка listen_addresses изначально неактивна и сервер принимает по localhost, убираем решетку перед строчкой, в итоге делаем listen_addresses = '192.168.204.54'

  2. Далее нужно указать серверу в файле /opt/bitnami/posrgresql/conf/pg_hba.conf на то, что бы он принимал любые соединения от нашей подсети, добавляем строчку host all all 192.168.204.0/24 md5

  3. Делаем перезапуск сервера sudo /opt/bitnami/ctlscript.sh restart

  4. Убеждаемся что сервер already running командой sudo /opt/bitnami/ctlscript.sh status

  5. Если already running, значит всё хорошо, пытаемся подключиться извне, что pgadmin, что c# должны подключаться в моем случае по адресу 192.168.204.52:5432. Если не already running, значит где-то ошиблись при вводе параметров в nft, postgresql.conf или в pg_hba.conf