Почему отказано в соединении с PostgreSQL на Vagrant VM? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть две виртуальные машины Vagrant, одна из которых настроена как веб-сервер, а другая - как сервер базы данных.Когда я пытаюсь выполнить команду psql на веб-сервере для своей базы данных инвентаризации на сервере базы данных, соединение отклоняется:

psql -h db00 -U dsmith -d inventory -p 15432

psql: could not connect to server: Connection refused
        Is the server running on the host "db00" (192.168.2.101) and accepting
        TCP/IP connections on port 15432?

Вот мой Vagrantfile:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "debian/stretch64"
  config.vm.synced_folder "./shared", "/vagrant", type: "virtualbox"
  ENV['ANSIBLE_ROLES_PATH'] = "/Users/dsmith/playbooks/roles-debian9"

  config.vm.define "db" do |db|
    db.vm.hostname = "db00.example.com"
    db.vm.network :private_network, ip: "192.168.2.101"
    db.vm.network :forwarded_port, guest: 5432, host: 15432
    config.vm.provision "ansible" do |ansible|
      ansible.playbook = "provision.yml"
      ansible.compatibility_mode = "2.0"
      ansible.become = true
    end
  end

  config.vm.define "web" do |web|
    web.vm.hostname = "web00.example.com"
    web.vm.network :private_network, ip: "192.168.2.102"
    web.ssh.forward_agent = true
    config.vm.provision "ansible" do |ansible|
      ansible.playbook = "provision.yml"
      ansible.compatibility_mode = "2.0"
      ansible.become = true
    end
  end
end

Ключевой линией здесь является линия сети forwarded_port.Я думаю, что говорю Вагранту, что если запрос поступает на виртуальную машину сервера базы данных через порт 5432, перенаправьте его на порт 15432 на самом сервере, который является портом, который я настроил для прослушивания PostgreSQL на этом сервере.Из моих исследований я думаю, что это то, что я должен делать, но я не уверен.

Вот мой файл конфигурации PostgreSQL:

# /etc/postgresql/9.6/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.6/main'
hba_file = '/etc/postgresql/9.6/main/pg_hba.conf'
ident_file = '/etc/postgresql/9.6/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.6-main.pid'
listen_addresses = '*'
port = 15432
unix_socket_directories = '/var/run/postgresql'

Вот мой файл конфигурации аутентификации:

# /etc/postgresql/9.6/main/pg_hba.conf
local   all             postgres                                peer
local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
host all all 0.0.0.0/0 trust

Из моего исследования строка "listen_addresses" важна в файле конфигурации postgres, а строка "host all all ..." важна в файле конфигурации hba.

Вот правила брандмауэра, работающие на сервере базы данных:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1037:93696]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m state --state NEW -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -s 192.168.2.102/32 -d 192.168.2.101/32 -p tcp -m tcp --sport 1024:65535 --dport 15432 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -s 192.168.2.101/32 -d 192.168.2.102/32 -p tcp -m tcp --sport 5432 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
COMMIT

Важное правило гласит, что принято от 192.168.2.102 (web00) до 192.168.2.101 (db00) на порту 15432,Но я действительно не думаю, что проблема заключается в брандмауэре, поскольку я получаю ту же ошибку, если сбрасываю все правила.

Что я здесь не так делаю?Я пытался обдумать это, но мне чего-то не хватает.

...