|
|
发表于 2006-6-1 09:42:33
|
显示全部楼层
来自Client端口为Port的数据包:Client ort->A:80,经过防火墙PREROUTING的DNAT,数据包变为:Client ort->192.168.0.5:80,数据包到达192.168.0.5,HTTP服务器返回数据包:192.168.0.5:80->Client ort,数据包到达防火墙,经过DNAT的逆过程UN-DNAT,变为A:80->Client ort,这个过程与MASQUERADE无关.
我试验了一下,就是把防火墙上的MASQUERDE关上,只有DNAT,从外网也可以访问内网提供的服务(我试验了telnet和www服务),只不过内网不能访问INTERNAT而已,因为是私有地址.试验时要注意把FORWARD链打开为允许,比如我的iptables这几项如下:
iptables -P FORWARD ACCEPT
1 iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
2 iptables -A FORWARD -i ppp0 -p tcp -m multiport --dports 23,80,3389 -j ACCEPT
3 iptables -A FORWARD -i ppp0 -j DROP
4 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 23 -j DNAT --to-destination 192.168.0.2:23
5 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
Post by startredhat
我从外网访问221.101.104.2:80,数据包从eth2进来到达192.168.0.5后,数据包返回的时候有可能从61.153.4.2。eth1接口出去。怎样保证回来的包也从eth2出去?
为什么一定要保证来自eth2的包一定从eth2包出去呢?我很困惑,来自内网的返回数据包到这里之后就UN-DNAT为A:80->Client ort,或是B:80->Client ort(如果Client开始是通过B地址访问内网的WWW服务时),至少从那个口出去没有大的影响,只是路由而已,源地址不会变,因为与MASQUERADE没有关系,上面已经说过的.
以上是我的想法,欢迎讨论!(看看你的FORWARD链是否允许访问内网的服务) |
|