修改iptables端口转发目标端口后无法生效,求排查方案
问题分析与解决
你遗漏了两个关键配置调整:
旧DNAT规则未移除
你用-A参数是在PREROUTING链末尾追加新规则,原来那条把1046端口转发到172.27.255.4:1046的规则还存在。iptables规则按顺序匹配,外网流量会先命中旧规则,被转发到服务器已停止监听的1046端口,自然无法连接。
解决:先通过iptables -t nat -L PREROUTING --line-numbers找到旧规则的行号,再用iptables -t nat -D PREROUTING [行号]删除;或者直接用-R参数替换原规则,而非追加。FORWARD链规则未更新
原来的filter表FORWARD规则只允许目标端口为1046的流量通过防火墙,但现在DNAT后,转发到服务器的流量目标端口是22,这条规则会拦截这些22端口的流量,导致连接失败。
解决:要么修改原FORWARD规则,把--dport 1046改成--dport 22;要么追加一条新规则:iptables -t filter -A FORWARD -p tcp -i ppp0 -d 172.27.255.4 --dport 22 -j ACCEPT若修改旧规则,同样需先查行号删除后添加新规则,或用
-R替换。
最后别忘了保存iptables规则(不同系统命令不同,比如iptables-save > /etc/sysconfig/iptables或netfilter-persistent save),避免重启防火墙后配置丢失。
内容的提问来源于stack exchange,提问作者felix
相关产品推荐
相关产品推荐

