Ich habe Probleme, von einer Onlinequelle aus eine Verbindung zu meiner PostgreSQL-Datenbank herzustellen.
PostgreSQL scheint einwandfrei eingerichtet zu sein, es läuft auf dem Standardport 5432 und die Datei postgresql.conf enthält die folgende Zeile
listen_addresses = '*'
Und die pg_hba.conf hat folgendes
host dbname usname all md5
Ich kann von einem anderen Computer aus mit den folgenden Anmeldeinformationen in pgadmin eine Verbindung zur PostgreSQL-Datenbank herstellen
Name local
Host 192.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
Damit kann ich problemlos eine Verbindung herstellen, es scheint gut zu funktionieren.
Anschließend habe ich den Port 192.xx.xx.xx:5432 auf dem ADSL-Router weitergeleitet und ihn anhand der öffentlichen IP-Adresse 197.xx.xx.xx (für das Internet sichtbare IP) überprüft. http://www.canyouseeme.org/ Wo ich sehen kann, wurde der Port ordnungsgemäß weitergeleitet.
Ich habe SELinux deaktiviert und auch die Firewall vorübergehend deaktiviert.
Wenn ich jedoch versuche, eine Verbindung herzustellen,
Name online
Host 197.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
Ich erhalte die Fehlermeldung „Server hört nicht zu“
could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "197.xx.xx.xx" and accepting TCP/IP connections on port 5432?
Warum ist das so? Muss ich einen zusätzlichen Schritt ausführen, damit Verbindungen über die Portweiterleitung akzeptiert werden?
Antwort1
all
host
ist im CIDR-Feld einer Zeile in ungültig pg_hba.conf
.
Aus den Kommentaren in der Standarddatei pg_hba.conf
selbst:
# Host-Datenbankbenutzer-CIDR-ADRESSE-Methode [OPTION]
Und
CIDR-ADDRESS gibt die Gruppe der Hosts an, mit denen der Datensatz übereinstimmt. Es besteht aus einer IP-Adresse und einer CIDR-Maske, die eine Ganzzahl (zwischen 0 und 32 (IPv4) oder 128 (IPv6) einschließlich) ist, die die Anzahl der signifikanten Bits in der Maske angibt. Alternativ können Sie eine IP-Adresse und eine Netzmaske in separate Spalten schreiben, um die Gruppe der Hosts anzugeben.
Versuchen Sie stattdessen Folgendes:
host dbname usname 197.xx.xx.xx/32 md5
Dadurch werden Verbindungen zu dbname von usname nur vom Remote-Host 197.xx.xx.xx zugelassen.
Wenn Sie das gesamte Subnetz 197.xx.xx /24 zulassen möchten, verwenden Sie:
host dbname usname 197.xx.xx.0/24 md5