iptables实现端口映射

通过iptables进行端口映射,可以实现发送给A机器指定端口的请求被转发到B机器上。

设置入路径的转发规则:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to xx.xx.xx.xx:80

设置出路径的转发规则:

iptables -t nat -A POSTROUTING ! -o lo -j MASQUERADE

注意:如果不排除掉lo,会导致DNS解析无法正常工作,DNS的缓存机制会用到lo接口。

完成上面的设置,就可以实现从机器S访问机器A的8080端口,而实际访问到的是机器B的80端口。但是却不能直接在机器A上访问本地的8080端口,原因在于PREROUTING是在数据包到达A机器的程序进程之前,而如果我们使用ping、telnet、curl之类在机器A上操作,数据包是从程序进程出发的,已经跳过了PREROUTING,此时我们需要在OUTPUT链的nat表中添加规则:

iptables -t nat -A OUTPUT -p tcp -m tcp --dport 8080 -j DNAT --to xx.xx.xx.xx:80 -m comment --comment '本地转发'

这样就实现了,无论外部访问,还是本机访问,都能将请求转发到外部其他机器的效果。

发表于 2023年10月09日 11:46   评论:0   阅读:378  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo