如何在linux下使用iptables进行远程端口转发
这里特别指出的是远程端口转发,而不是内外网端口映射,意思是:公网上两台机器,利用HostA(IpA)的PortA端口映射到远程HostB(IpB)的PortB端口;用户虽然访问的是IpA的PortA端口,但实际最终连接到的是IpB的PortB端口。前提是已经安装了iptables,再以root身份运行以下配置,如果重启了机器,需要重新执行,可以写到启动脚本文件中去。
[quote]#将访问目的地址为IpA:PostA的数据包转换为访问目的地址为IpB:PortB,建立转发的正向数据通道
iptables -t nat -I PREROUTING -p tcp --dport PortA -j DNAT --to IpB:PortB
#将访问目的地址为IpB:PortB的数据包中客户端Client的原始地址动态转换为HostA的地址IpA,建立转发的反向数据通道;尝试过用SNAT题替代,但是未成功,不知道是写的规则不对还是怎么的。我觉得MASQUERADE要比SNAT多一些处理,应该是维护了一张返回通道的转发对应表,类似我们常用NAT网关
iptables -t nat -I POSTROUTING -p tcp -d IpB --dport PortB -j MASQUERADE
/etc/rc.d/iptables save #保存
/etc/rc.d/iptables restart #重启iptables服务,否则不生效
echo 1 > /proc/sys/net/ipv4/ip_forward #重启iptables后,ip_forward会变回0,需要重新设置
[/quote]
附常用命令:
[quote]iptables -F -t nat #清空nat规则
iptables -vnL -t nat #查看nat规则
cat /proc/net/ip_conntrack #查看iptables nat服务器当前的连接状态
[/quote]
参考:
iptables中DNAT与SNAT,MASQUERADE的理解:http://www.cublog.cn/u1/38994/showart_2183587.html,我一直对于iptables处理机制的经典的说明图(见该网页第二张图)抱有疑问
大家可以再看看第三张图,我觉得这个流程才是可理解的
发表评论