我正在尝试通过 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 进程失败了。我假设这里有冲突,但我不确定是什么。有什么建议吗?谢谢!
更新:以下是我制定的允许通过 ssh 连接进行 rsync 的规则。我的输入策略设置为丢弃。其他策略设置为接受。
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
以下是 iptables-save 对 nat 的结果:
*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
答案1
您的 DNAT 和 MASQUERADE 规则缺少接口规范。如果没有这些,它们会尝试在全部交通堵塞,两个方向都是如此,这不是你想要的。
DNAT 规则应指定-i enp2s1
连接到达的入站接口(例如);通常这是面向 WAN/Internet 的接口。而 SNAT 或 MASQUERADE 规则应指定-o enp2s1
流量离开的出站接口(例如);同样,这通常是面向 WAN/Internet 的接口。