一台Linux机器用iptables做防火墙,在其上做NAT以使外网可以访问内网web服务器,web服务器系统是redhat9
NAT做好后,通过外网访问,但是仍然不能访问,在web服务器上用tcpdump进行抓包,如下:
09:04:59.197945 218.108.10.18.1898 > 172.18.88.57.http: S 4283620706:4283620706(0) win 65535 (DF)
09:05:02.209721 218.108.10.18.1898 > 172.18.88.57.http: S 4283620706:4283620706(0) win 65535 (DF)
09:05:08.223887 218.108.10.18.1898 > 172.18.88.57.http: S 4283620706:4283620706(0) win 65535 (DF)
09:05:20.229363 218.108.10.18.2094 > 172.18.88.57.http: S 3198722777:3198722777(0) win 65535 (DF)
09:05:23.202336 218.108.10.18.2094 > 172.18.88.57.http: S 3198722777:3198722777(0) win 65535 (DF)
通过分析感觉是NAT已经做成功了,目的地址经转换为web服务器的地址,经地址转换的报文也发到web服务器上了,但是web服务器却没有响应
在内网直接访问该web服务器都是正常的,抓包如下:
09:05:37.897302 172.18.88.45.1158 > 172.18.88.57.http: S 2098025050:2098025050(0) win 65535 (DF)
09:05:37.897462 172.18.88.57.http > 172.18.88.45.1158: S 1276113486:1276113486(0) ack 2098025051 win 5840 (DF)
09:05:37.897573 172.18.88.45.1158 > 172.18.88.57.http: . ack 1 win 65535 (DF)
09:05:37.909370 172.18.88.45.1158 > 172.18.88.57.http: P 1:312(311) ack 1 win 65535 (DF)
09:05:37.909806 172.18.88.57.http > 172.18.88.45.1158: . ack 312 win 6432 (DF)
09:05:38.127255 172.18.88.57.http > 172.18.88.45.1158: . 1:1461(1460) ack 312 win 6432 (DF)
09:05:38.127420 172.18.88.57.http > 172.18.88.45.1158: . 1461:2921(1460) ack 312 win 6432 (DF)
09:05:38.127495 172.18.88.45.1158 > 172.18.88.57.http: . ack 2921 win 65535 (DF)09:05:38.127570 172.18.88.57.http > 172.18.88.45.1158: P 2921:3415(494) ack 312
win 6432 (DF)
将服务器80端口换成10000,也是如上进行测试,效果一样。
不知问题出在哪里,还望高手指点下。
另外,在作为防火墙的机器上,做NAT的语句为:
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to-destination 172.18.88.57:80
作者: zhsishi
发布时间: 2009-06-04