我在從線上來源連接到 PostgreSQL 資料庫時遇到問題。
PostgreSQL 似乎設定得很好,它在預設連接埠 5432 上運行,並且 postgresql.conf 有以下行
listen_addresses = '*'
pg_hba.conf 有以下內容
host dbname usname all md5
我可以在 pgadmin 中使用以下憑證從另一台電腦連接到 PostgreSQL 資料庫
Name local
Host 192.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
使用這些我可以完美連接它似乎工作正常。
然後我在ADSL路由器上轉送連接埠192.xx.xx.xx:5432,並使用公用IP位址197.xx.xx.xx(對網際網路IP可見)進行檢查 http://www.canyouseeme.org/ 我可以看到連接埠轉送正常。
我已經禁用了 SELinux 並暫時禁用了防火牆。
但是,當我嘗試使用連接時
Name online
Host 197.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
我收到伺服器不監聽錯誤訊息
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?
為什麼是這樣?我是否需要添加額外的步驟來使其透過連接埠轉送接受連線?
答案1
all
host
在 中某行的 CIDR 欄位中無效pg_hba.conf
。
來自預設檔案本身的註釋pg_hba.conf
:
# 主機資料庫使用者 CIDR 位址方法 [選項]
和
CIDR-ADDRESS 指定記錄符合的主機集。它由 IP 位址和 CIDR 遮罩組成,CIDR 遮罩是一個整數(介於 0 和 32 (IPv4) 或 128 (IPv6) 之間),指定遮罩中有效位數。或者,您可以在單獨的列中寫入 IP 位址和網路遮罩來指定主機集。
試試這個:
host dbname usname 197.xx.xx.xx/32 md5
這將允許僅從遠端主機 197.xx.xx.xx 從 usname 連接到 dbname
如果要允許整個 197.xx.xx /24 子網,請使用:
host dbname usname 197.xx.xx.0/24 md5