如何在linux下使用iptables进行远程端口转发

分类:技术备忘 阅读:13328 评论:0
这里特别指出的是远程端口转发,而不是内外网端口映射,意思是:公网上两台机器,利用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]


example


附常用命令:
[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处理机制的经典的说明图(见该网页第二张图)抱有疑问
iptables


大家可以再看看第三张图,我觉得这个流程才是可理解的
iptables

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。