当前位置:Linux教程 - Linux文化 - 端口映射的问题

端口映射的问题


>>> 此贴的回复 >> iptables -A PREROUTING -t nat -d 192.168.1.234 -p tcp --dport 80 -j DNAT --to 192.168.0.100

dport指定80了后面就没必要加端口号了 还有个要确定的问题 你的192.168.0.100的Gateway必须是192.168.0.1

>>> 此贴的回复 >> 问题找到了,

是FORWARD的问题,

因为对FORWARD做了很强的控制,所以,默认不让随意进出的,

需要iptables -I FORWARD -o eth0 -d 192.168.0.100 -p tcp --dport 80 -j ACCEPT iptables -I FORWARD -i eth0 -s 192.168.0.100 -p tcp --sport 80 -j ACCEPT

>>> 此贴的回复 >> 呵呵,如果我没有猜错的话,你应该还有一台SNAT或者MASQUERADM的语句。如果这样的话,根据网络原理,数据包的源地址将会返回错误,因为数据包是这样走向的。 假如192.168.0.2(你的一台内网机器)访问你的WEB服务,在浏览器输入:http://192.168.1.234,这个时候,192.168.0.2的机器会用自己的子网掩码跟192.168.1.234进行运算,发现要访问的IP不在同一网段。于是把数据包转发给网关192.168.0.1。网关收到后,把数据包的目的地址改为192.168.0.100(你的WEB服务器)。然后把数据包发给WEB服务器。WEB服务器收到后,会发送响应的数据包,目的IP是192.168.0.2,源IP是192.168.0.100。根据网络原理,这两个IP在同一网段,于是直接发送过去,不经过网关。192.168.0.2收到后,发现源地址是192.168.0.100,而不是192.168.1.234,于是把数据包丢弃,继续等待192.168.1.234的会应,当然,这是永远也无法等到的。所以,你应该加一条语句进来。如果你学过TCP/IP或者CCNA的课程应该能明白的。 所以应该加一条语句:

iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.100/24 -j SNAT --to 192.168.0.1