V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
anyegongjue282
V2EX  ›  问与答

nat 模式虚拟机,为什么虚拟机可以 ping 通 vmnet8 网关,但是主机却 ping 不通?

  •  
  •   anyegongjue282 · 2017-01-09 09:43:07 +08:00 · 14834 次点击
    这是一个创建于 2686 天前的主题,其中的信息可能已经有所发展或是发生改变。
    vmware 虚拟机, nat 模式,主机物理网卡 ip 为 10.2.0.64(可联外网),主机虚拟网卡 vmnet8 ip 为 192.168.29.1 ,虚拟机网卡 ip 为 192.168.29.131 。此外 vmnet8 网络有一个网关 192.168.29.2 ,虚拟机通过 nat 访问外网就是通过这个网关。现在虚拟机访问外网正常,在主机和虚机上 ping 对方也正常。现在的问题是,在虚拟机上 ping 网关地址 192.168.29.2 可以 ping 通,但是在主机上 ping 这个网关却 ping 不通。
    在网上查了一下,也有人遇到这个困惑。其中一个答案和我的理解比较接近, vmware 创建了一个虚拟的路由器(同时也是 nat 服务器),该路由器其中一个接口的地址就是网关地址 192.168.29.2 ,连接虚拟机所在的子网 192.168.29.0/24 ,另一个接口是连接到一个虚拟网桥,该虚拟网桥的另一个端连接到主机的物理网卡 10.2.0.64 。不过这个也解释不了我的疑问。
    另外,我在主机上 ping 网关 192.168.29.2 ,抓包看了一下,请求网关 192.168.29.2 对应物理地址的 arp 报文没有收到应答。看来应该是这个原因导致的,但是为什么主机收不到 arp 应答报文呢?
    8 条回复    2017-01-13 09:34:16 +08:00
    xss
        1
    xss  
       2017-01-09 10:22:24 +08:00   ❤️ 1
    你的 ping 包发到路由上去了(也可能是交换机). 然而你的 192.168.29.2 这个虚拟出来的网关是在你本机上创建的.

    上层设备并不知道这个虚拟网关的 mac 地址. arp 被广播后当然收不到应答.
    julyclyde
        2
    julyclyde  
       2017-01-09 13:48:52 +08:00
    因为主机并不属于 vmnet8 啊
    anyegongjue282
        3
    anyegongjue282  
    OP
       2017-01-09 14:34:01 +08:00
    @xss 谢谢你的回复。我再想请问下,为什么虚拟机 ping 这个网关可以 ping 通呢。这个网关和虚拟机的网卡都可以看做是宿主机虚拟出来的吧。
    anyegongjue282
        4
    anyegongjue282  
    OP
       2017-01-09 14:37:37 +08:00
    @julyclyde 谢谢回复。主机上有一个 vmware 虚拟出来的网卡 vmnet8 , ip 是 192.168.29.1 。这个 ip 去 ping 虚拟机地址 192.168.29.131 是可以 ping 通的,个人理解它们应该是在一个子网吧。不知道是不是我的理解不对。
    julyclyde
        5
    julyclyde  
       2017-01-09 14:39:19 +08:00
    @anyegongjue282 那还真是比较奇怪了。我刚才想成 virtualbox 的情况了,跟 vmware 不太一样
    xss
        6
    xss  
       2017-01-09 16:11:06 +08:00
    @anyegongjue282 因为你做了 NAT, 虚拟机的 ping 请求会先发送到 HOST 机. HOST 机器因为 NAT 创建了路由表的原因, 知道发往 192.168.29.2 这个网关的包应该怎么转发. 从而能正确的发送和接受虚拟机出来的请求. 说白了就是你虚拟机 ping 192.168.29.2 的包, 不会被真正的发送到你的网络上面. 只是在你本机虚拟出来的一套网络环境里面转了一圈. 你看看 5 层网络协议吧, 弄明白 5 层模型, 就知道为什么会这个样子了.
    weyou
        7
    weyou  
       2017-01-09 16:50:04 +08:00   ❤️ 1
    VMWare 的设定就不允许 NAT 转发来自于 host 的虚拟网卡过来的包。应该是直接就不响应 ARP 了,

    The Host Computer and the NAT Network

    The host computer has a host virtual adapter on the NAT network (identical to the host virtual adapter on the host-only network). This adapter allows the host and the virtual machines to communicate with each other for such purposes as file sharing. The NAT never forwards traffic from the host virtual adapter.

    你可以试试设置 static ARP entry 到 host 的 MAC 表里,然后再 ping NAT gateway ,我怀疑还是 ping 不到,底层就屏蔽掉了。
    anyegongjue282
        8
    anyegongjue282  
    OP
       2017-01-13 09:34:16 +08:00
    @weyou 谢谢。我觉得这个解释我比较能理解了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1451 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:22 · PVG 01:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.