我正在尝试通过 IPtables 将单个端口重定向到本地服务器。目前我有以下规则:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 55555 -j DNAT --to-destination 10.188.44.125:3306
iptables -t nat -A POSTROUTING -j MASQUERADE
当我制定了这些规则时,我的 ssh rsync 进程将失败。我假设这里有一些冲突,但我不确定是什么。有什么建议么?谢谢!
更新:这是我制定的允许 rsync over ssh 连接的规则。我的输入策略设置为丢弃。其他政策被设置为接受。
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -i lo -j ACCEPT
更新 2
以下是 nat 的 iptables-save 的结果:
*nat
:PREROUTING ACCEPT [8:468]
:INPUT ACCEPT [7:408]
:OUTPUT ACCEPT [2:134]
:POSTROUTING ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp -m tcp --dport 53306 -j DNAT --to-destination 10.183.42.125:3306
[2:134] -A POSTROUTING -j MASQUERADE
COMMIT
您的 DNAT 和 MASQUERADE 规则缺少接口规范。如果没有这些,他们会尝试处理双向的所有流量,这不是您想要的。
-i enp2s1
DNAT 规则应指定连接到达的入站接口(例如);通常这是面向 WAN/Internet 的接口。SNAT 或 MASQUERADE 规则应指定-o enp2s1
流量离开的出站接口(例如);同样,这通常是面向 WAN/Internet 的接口。