none
谁碰到过这样的Hyper-v网络问题? RRS feed

  • 问题

  • 用Windows Server 2008 R2 Enterprise中的Hyper-v管理器做了1台虚拟机

    网卡是Broadcom BCM5708C,将网卡虚拟成交换机(另一块网卡在排错时禁用了),虚拟网络是用的外部模式,没有启用“允许管理系统共享此适配器”(该网卡上也没有启用TCP/IP协议)。

    Guest中的虚拟网卡在192.168.1.0/24网段,地址192.168.1.8,网关192.168.1.10(随便设的,改成什么都无所谓),DNS192.168.1.2(网络里另一台虚拟服务器,只做内部地址解析)

    突然发现该虚拟机访问内部资源的时候,DNS有50%的几率解析不出来,查了DNS服务器没有问题。而出解析问题的时候,该虚拟机可以解析到外部的域名(DNS服务器没有设置转发,按道理说是发不出去的)。更妖的是,可以Ping得通外部网站如www.163.com!!!(外部IP是一直可以ping通,不论DNS是否正常的时候)。ipconfig的结果一切正常,查了本机路由表,都很正常,没有特殊的路由,默认路由是到192.168.1.10,这是个不存在的地址,理论上不会起作用。做tracert,第一跳是192.168.2.1,这个地址是网络里另外一个网段192.168.2.0/24的网关,物理网卡可以连到该网段。

    不知虚拟机是如何得到192.168.2.1这个地址的,疑心是DHCP,因为该网段中有DHCP,做DNS测试,有点印证这个观点,50%的几率可以解析出192.168.2.0/24中的域名,说明获得网关的同时也获得了DNS。但是上DHCP服务器上去看,没有看到分配地址给这台物理机或虚拟机网卡的痕迹。

    另外,192.168.2.0网段中的所有机器也可以访问该虚机,同样是用192.168.2.1做网关。

    启用“允许管理系统共享此适配器”,问题依旧,在共享出来的网卡上设了一个网关192.168.2.10(随便设置的),但是问题依旧,虚拟机仍然可以走192.168.2.1这条路由,但是物理机本身此时ping不通虚机了,而其他192.168.2.0/24中的机器都可以ping通该虚拟机。

    关闭物理机/虚机上的所有TCP Checksum Offload选项,问题依旧

    将虚拟机上的网关删掉(不设置网关),倒是ping不出去了

    打上所有补丁,该问题依旧,操作系统从中文换成英文,该问题依旧,换了两台Dell,一台IBM,问题依旧存在。

    有心把DHCP上的网关和DNS改一下看看,但实验条件不允许

    问了熟悉微软的一个朋友,说是用Hyper-v的时候,最好物理机和虚拟机都在同一个网段里。但我觉得,如果这个问题被同一个网段这种方式掩盖的话,会有安全或是其他的问题。

    不知有没有朋友遇到同样的状况,有条件的朋友,不妨测试一下,这个测试环境应该不难搭建。
    2010年1月27日 9:16

答案

  • 问题暂时解决

    怀疑与最初生成虚拟机的一个镜像做过NLB有关,尽管NLB的配置已经删除过了。

    按如下文章中的Enable Spoofing of MAC addresses以后,现象消失,暂时还没有发现新的问题。
    http://robwhitehouse.com/virtualisation/enable-nlb-in-a-hyper-v-guest/.
    2010年2月3日 7:58

全部回复

  • dns没有设置转发并不代表不能解析公网上的地址,只要DNS能正常上网
    简单看了一下你的说明,不知道是你结构复杂,还是我理解有问题,不妨画个结构图出来。

    微软官方的建议是不虚拟机最好两张网卡,一张做虚拟机的管理,一张做虚拟机的网络用

    2010年1月27日 14:46
  • 可能测试做了太多,不太容易理顺,看起来比较复杂吧
    只用了一张网卡,专用于虚拟机的网络连接,用于管理的网卡都禁用了以避免干扰,管理操作直接在物理机的KVM上完成
    DNS不是该问题的关键,而是最开始因为DNS才发现问题,所以也可以简化掉

    那么来个最简单的环境,一台物理机上做一台虚拟机,虚拟网卡设为外部模式且没有启用“允许管理系统共享此适配器”
    虚拟机IP为192.168.1.8/24 ,虚拟机网关为任意一空地址
    同一物理网络中,有一台DHCP服务器,还有一个网关,但是地址都在192.168.2.x/24网段中
    ______________________________________________________________________________________
            |                                          |                                       |
            |                                          |                                       |
    物理机网卡上没有启用TCP/IP        DHCP服务器                到Internet的Gateway
    虚拟机IP 192.168.1.8/24            IP 192.168.2.3            IP 192.168.2.1/24
    虚拟机网关随意设置一个空地址        网关 192.168.2.1/24
                                                 分配192.168.2.X/24的地址


    按我所知道的常识,这时候虚拟机192.168.1.8应该不可以和任何192.168.1.x/24网段以外的IP地址通信,但是现在的现象是可以,它 自己会找到网关192.168.2.1,通过网关访问Internet, 而且可以和192.168.2.x/24这个网络中的任何一台计算机通信
    2010年1月28日 1:39
  • 检查下路由或者是VLan的设置吧,我觉得和虚拟机的没有关系。
    还有就是做过dhcp的中继没有

    2010年1月28日 16:22
  • 虚拟机本地路由表肯定是没问题的,至于VLAN,没做过任何设置,而且与该问题无关(在虚拟机没有一个能做路由的网关的情况下)

    DHCP没有设置中继,而且DHCP有没有中继也应该与本问题无关,物理机的网卡只装了虚拟交换机协议,连TCP/IP都没有安装,而虚拟机是设置的固定IP

    我觉得这肯定是Hyper-V的一个bug,想要有条件的朋友简单测试一下,看看问题可不可以复现。
    2010年1月29日 0:29
  • 比你结构复杂的架构我都做过,也没有出现你这样的情况
    我内部也有虚拟机器做的DHCP服务器
    既然你没有做过vlan,那么你的交换机是没有做个任何配置,物理机器和你的DHCP服务器都接在一个交换机。
    你的虚拟机既然是静态的ip地址,能得到dhcp的网关地址,是有点奇怪.
    那你重新安装一台虚拟机,设置ip到192.168.1.x/24
    看是否能得到192.168.2.1网关的地址了?

    2010年1月29日 5:49
  • 问题暂时解决

    怀疑与最初生成虚拟机的一个镜像做过NLB有关,尽管NLB的配置已经删除过了。

    按如下文章中的Enable Spoofing of MAC addresses以后,现象消失,暂时还没有发现新的问题。
    http://robwhitehouse.com/virtualisation/enable-nlb-in-a-hyper-v-guest/.
    2010年2月3日 7:58