如何为本地主机上的 postgresql 监听设置在端口转发?

如何为本地主机上的 postgresql 监听设置在端口转发?

我有一个在 SLES 上运行的 postgresql 实例。

我想将其设置为在本地主机上监听,并启用 iptables 来执行端口转发。

我当前的配置

postgresql.conf:

listen_addresses = 'localhost'
port = 5432

pg_hba.conf:

local   all         all                               md5
host    all         all         127.0.0.1/32          md5
host    all         all         0.0.0.0/0          md5

iptables(通过添加规则iptables -t nat -I PREROUTING -p tcp --dport 5432 -j REDIRECT):

Chain PREROUTING (policy ACCEPT 441 packets, 54049 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   420 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5432

像这样配置后,我无法打开到数据库的 psql 连接。

如果没有 iptables 规则,就会出现Connection refused错误。

使用 iptables 规则时出现Connection timed out错误。

答案1

您可能需要检查过滤表。例如,INPUT 的默认策略是什么?如果 CHAIN 策略不允许,您是否有明确的规则允许端口 5432。

另外,按照你的问题所示编写规则可能还不够。请阅读以下内容man iptables

REDIRECT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT
    chains, and user-defined chains which are only called from those chains. 
    It redirects the packet to the machine itself by changing the destination IP
    to the primary address of the incoming interface (locally-generated packets are mapped to  the  127.0.0.1 address).

因此,它会将请求重定向到 IP 地址,不一定是localhost127.0.0.1您可能需要在 NAT 规则中明确添加 127.0.0.1 IP 地址。您可以尝试:

iptables -t nat -I PREROUTING -p tcp --dport 5432 -j DNAT --to-destination 127.0.0.1

相关内容