这里特别指出的是远程端口转发,而不是内外网端口映射,意思是:公网上两台机器,利用HostA(IpA)的PortA端口映射到远程HostB(IpB)的PortB端口;用户虽然访问的是IpA的PortA端口,但实际最终连接到的是IpB的PortB端口。

前提是已经安装了iptables,再以root身份运行以下配置,如果重启了机器,需要重新执行,可以写到启动脚本文件中去。

引用
#将访问目的地址为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,需要重新设置



example


附常用命令:
引用
iptables -F -t nat #清空nat规则
iptables -vnL -t nat #查看nat规则

cat /proc/net/ip_conntrack #查看iptables nat服务器当前的连接状态




参考:
iptables中DNAT与SNAT,MASQUERADE的理解:http://www.cublog.cn/u1/38994/showart_2183587.html,我一直对于iptables处理机制的经典的说明图(见该网页第二张图)抱有疑问
iptables


大家可以再看看第三张图,我觉得这个流程才是可理解的
iptables
标签: ,
发表评论   请注意:本站已经启用评论审核机制,审核通过才能显示!
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称 *   
网址   电邮   [注册]
               

验证码 不区分大小写