免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 12039 | 回复: 48
打印 上一主题 下一主题

[网络管理] 请教,dnat没有生效,如何检查??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-08 21:28 |只看该作者 |倒序浏览
本帖最后由 chong232 于 2010-08-08 21:36 编辑

环境:
   宿主机:ubuntu10.04  ip:  159.226.x.x
            虚拟机:windows xp sp3   防火墙关, 网络方式为host-only
            虚拟机软件为virtualbox 3.2.6    ip :  192.168.0.2
   已经打了ip转发,cat /proc/sys/net/ipv4/ip_forward 结果为1

测试目的:通过dnat可以从外部访问192.168.0.2上的web server

   在虚拟机上运行http server, 80端口,从宿主机上可以访问该服务器: http://192.168.0.2

            在宿主机上运行http server, 80端口,访问正常。
    
            设置宿主机的iptables的防火墙为:
  1. !/bin/sh
  2. # Flush the NAT table
  3. IPT='/sbin/iptables'
  4. $IPT -t nat -F
  5. $IPT -t nat -X
  6. $IPT -t nat -P PREROUTING ACCEPT
  7. $IPT -t nat -P POSTROUTING ACCEPT
  8. $IPT -t nat -P OUTPUT ACCEPT
  9. $IPT -t mangle -F
  10. $IPT -t mangle -X
  11. $IPT -t mangle -P PREROUTING ACCEPT
  12. $IPT -t mangle -P INPUT ACCEPT
  13. $IPT -t mangle -P FORWARD ACCEPT
  14. $IPT -t mangle -P OUTPUT ACCEPT
  15. $IPT -t mangle -P POSTROUTING ACCEPT
  16. $IPT -F
  17. $IPT -X
  18. $IPT -P FORWARD ACCEPT
  19. $IPT -P INPUT ACCEPT
  20. $IPT -P OUTPUT ACCEPT
  21. $IPT -t raw -F
  22. $IPT -t raw -X
  23. $IPT -t raw -P PREROUTING ACCEPT
  24. $IPT -t raw -P OUTPUT ACCEPT

  25. iptables -t nat -A PREROUTING -p tcp -d 159.226.x.x --dport 80 -j DNAT --to-destination 192.168.0.2
复制代码
这时在宿主机上访问http://159.226.x.x,看到的还是宿主机的http server欢迎页面,找不到问题所在,求教!!!!!!

论坛徽章:
0
2 [报告]
发表于 2010-08-08 21:44 |只看该作者
192.168.0.2 是虚拟机的 IP 地址吗?
与虚拟机相连的宿主机的 IP 地址又是多少?
虚拟机的默认网关设置的又是多少?
操作系统内核版本是多少?
iptables 版本又是多少?

论坛徽章:
0
3 [报告]
发表于 2010-08-08 21:45 |只看该作者
环境:
   宿主机:ubuntu10.04  ip:  159.226.x.x
            虚拟机:windows xp sp3   防火墙关, ...
chong232 发表于 2010-08-08 21:28



    我在宿主机上抓了包,发现发向159.226.x.x:80的包根本没有转换,,,谁知道怎么检查iptables规则生效???
 ps:  我可以在宿主机上使用SNAT,使guest访问外网。。。

论坛徽章:
0
4 [报告]
发表于 2010-08-08 21:49 |只看该作者
回复 2# platinum


    192.168.0.2 是虚拟机的 IP 地址
 与虚拟机相连的宿主机的 IP 地址是192.168.0.1,它的eth0的ip是159.226.x.x

  虚拟机的默认网关设置的是192.168.0.1
  操作系统内核版本是多少: 2.6.32
  iptables 版本又是多少: 1.4.4

论坛徽章:
0
5 [报告]
发表于 2010-08-08 21:52 |只看该作者
判断 iptables 是否有效的办法有 2 个,尝试访问 http://159.226.x.x
1、通过在宿主机上看 iptables -t nat -vnL 有没有匹配到数据
2、在 192.168.0.2 上去抓有没有收到数据包

论坛徽章:
0
6 [报告]
发表于 2010-08-08 21:54 |只看该作者
回复 5# platinum
  1. root@desktop:/home/chong232# iptables  -t nat -vnL
  2. Chain PREROUTING (policy ACCEPT 33 packets, 6769 bytes)
  3. pkts bytes target     prot opt in     out     source               destination         
  4.     0     0 DNAT       tcp  --  *      *       0.0.0.0/0            159.226.x.x      tcp dpt:80 to:192.168.0.2

  5. Chain POSTROUTING (policy ACCEPT 2146 packets, 135K bytes)
  6. pkts bytes target     prot opt in     out     source               destination         

  7. Chain OUTPUT (policy ACCEPT 2146 packets, 135K bytes)
  8. pkts bytes target     prot opt in     out     source               destination  
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-08-08 21:57 |只看该作者
有一种可能,就是你访问 159.226.x.x:80 时的数据包没有到达宿主机的 Linux 系统,所以它无法捕获并转向
检查你的测试方法

论坛徽章:
0
8 [报告]
发表于 2010-08-08 21:59 |只看该作者
回复 7# platinum


    种种现象表明iptables中的那条dnat规则没有生效,但http请求确实是被宿主机响应了,,,,

论坛徽章:
0
9 [报告]
发表于 2010-08-08 22:00 |只看该作者
本帖最后由 chong232 于 2010-08-08 22:02 编辑

回复 7# platinum


    我是在宿主机上打开浏览器,输入http://159.226.x.x,每次都能成功返回宿主机上的http server欢迎页面

 难道要关掉宿主机上的http server??那怎么单独打开宿主机上的80端口??

论坛徽章:
0
10 [报告]
发表于 2010-08-08 22:02 |只看该作者
回复  platinum


    我是在宿主机上打开浏览器,输入
chong232 发表于 2010-08-08 22:00


呵呵,果然是你的测试方法有问题
你在宿主机上测试,那么数据根本没有离开本机,所以无从谈起(首次到达)这个概念,数据直接走直通路由到达 192.168.0.1,又直接通往 192.168.0.2 了

建议让别人从外网测试,或者你自己在 192.168.0.2 上访问测试(前提是宿主机配置好 SNAT 或 MASQUERADE 让 192.168.0.2 可以上网)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP