![端口从外部 postgresql 转发到本地主机](https://linux22.com/image/148483/%E7%AB%AF%E5%8F%A3%E4%BB%8E%E5%A4%96%E9%83%A8%20postgresql%20%E8%BD%AC%E5%8F%91%E5%88%B0%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA.png)
我有几个数据库托管在应用程序服务器外部,例如:数据库实例:
192.168.178.21:5432
192.168.178.22:5432
192.168.178.23:5432
应用程序服务器:192.168.178.11
现在我想将外部数据库转发到端口 5431-5433 并能够使用 psql 连接到本地主机:
psql -h 127.0.0.1 -p 5432 -U <user> -d <db>
我得到:
psql: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
该服务器上的服务只允许连接到本地主机,此外这些端口将通过 ssh 转发。
我尝试了防火墙伪装:
firewall-cmd --zone=internal --add-masquerade --permanent
firewall-cmd --zone=internal --add-forward-port=port=5432:proto=tcp:toport=5432:toaddr=192.168.178.22 --permanent
firewall-cmd --reload
有任何想法吗? (我已经收藏了几本手册,包括 CentOS、Fedora 和 Redhat 介绍)
编辑:只有 Postgres 端口在各自的服务器上打开,没有其他。我将尝试使用 postgresql 感知网关,例如脆脆的代理
答案1
这取决于postgresql如何pg_hba.conf配置以及 postgresql 服务器是否侦听您列出的 IP 地址。
否则,如果您可以 ssh 到这些服务器,您可以-L
在 ssh(1) 示例中使用 ssh 端口转发选项:
ssh [email protected] -L 5431:localhost:5432 -f
ssh [email protected] -L 5432:localhost:5432 -f
ssh [email protected] -L 5433:localhost:5432 -f
您可以通过以下方式实现相同的效果~/.ssh/config
Host db1
Hostname 192.168.178.21
LocalForward localhost:5431 localhost:5432
Host db2
Hostname 192.168.178.22
LocalForward localhost:5432 localhost:5432
Host db3
Hostname 192.168.178.23
LocalForward localhost:5433 localhost:5432
然后就
ssh -f db1
ssh -f db2
ssh -f db3