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

使用桥接模式连接网络的虚拟机,其流量是否会经过路由器转发?

  •  
  •   LeeReamond · 2021-04-05 20:32:14 +08:00 · 2261 次点击
    这是一个创建于 1088 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,网络底层基础不好

    应用场景是目前 PC 上有一个 hyperV 虚拟机里面跑了一个 redis,应该是使用了桥接模式连接网络,我不是很确定。总之连接到同一个路由器,本机 IP 是 192.168.0.100 ,虚拟机是 192.168.0.101 这样,目前主机和虚拟机网络都可以互通,并且都能访问互联网。

    一个好奇是这种模式构建的网络,如果从主机向虚拟机发东西,或者反过来,流量是否需要经过路由,还是说在本地某一种虚拟网卡层面就能解决?我不知道如何模拟一个测试,直接来问老哥们了。

    =====

    另外一个好奇是,redis 虚拟机的使用场景,大多数时候不太需要单独使用互联网,大多数时候能保证与主机双向正常通讯就可以,有没有一种虚拟网络结构可以做到这种效果?这样既提高了通讯效率,又提高了安全性。只需要装机的时候下载东西时连接到互联网,之后稳定运行切换到这种网络就可以了

    20 条回复    2021-04-06 20:54:49 +08:00
    cmostuor
        1
    cmostuor  
       2021-04-05 20:41:06 +08:00   ❤️ 2
    流量会通过路由器, 子网内的设备必须通过网关去转发数据.
    Tink
        2
    Tink  
       2021-04-05 20:42:16 +08:00 via Android
    经过,流量怎么走,看网关
    cmostuor
        3
    cmostuor  
       2021-04-05 20:43:17 +08:00
    想知道经不经过你可以在路由器上用 tcpdump 抓包然后用 wireshark 分析
    alect
        4
    alect  
       2021-04-05 20:44:17 +08:00
    NAT 模式可以保证最低延迟,
    而且大多数不上外网的情况下不走路由器,
    然后还可通过共享母机网络方式让你的小鸡上网。
    noe132
        5
    noe132  
       2021-04-05 20:45:56 +08:00
    hyperv 虚拟机 和 主机 在同一个虚拟交换机下面,理论上到了虚拟交换机,直接走第二层转发,就不会从实际物理网卡发出去了。
    LeeReamond
        6
    LeeReamond  
    OP
       2021-04-05 20:48:31 +08:00
    @alect nat 模式下母鸡没法访问小鸡吧?
    jasonyang9
        7
    jasonyang9  
       2021-04-05 20:52:40 +08:00
    经不经过网关看是各自配的子网掩码,用自己的 IP 和子网掩码算的的网络号,比较对方的网络号(用对方的 IP 和自己的子网掩码计算),是否相同,相同就不经过网关,不同就查找本机路由表发送到对应的下一跳
    noe132
        8
    noe132  
       2021-04-05 20:56:37 +08:00
    我这是虚拟机在一个内部网络下面
    vm: 192.168.3.58(vm bridge)
    host: 192.168.3.1(vm bridge), 192.168.1.9(host nic)
    从 vm 往 192.168.1.9 发数据,192.168.3.1 所在的 nic 会有数据,192.168.1.9 的 nic 则没有动静。
    不确定直接桥接是不是也是这样,不过我猜测应该是类似的。可以用 iperf 测一下虚拟机到主机的带宽就明白了。
    just1
        9
    just1  
       2021-04-05 21:00:55 +08:00
    你可以设置两个网卡,一个是桥接,用来给虚拟机上网,一个是 host-only,用来与宿主机通信
    elfive
        10
    elfive  
       2021-04-05 21:01:44 +08:00 via iPhone
    @cmostuor #1 同一交换机下的数据交互,是可以不经过网关的,直接交换机就给你转发出去了。
    ysc3839
        11
    ysc3839  
       2021-04-05 21:15:13 +08:00 via Android
    理论上桥接模式是虚拟机和主机都接入一个交换机,这个交换机再接入上级网络设备。
    但是我之前用 VMware 测试的时候似乎是类似集线器,虚拟机能抓到主机的包,且主机用 WiFi 时虚拟机跟主机通信的速度也会受 WiFi 速度影响。
    ysc3839
        12
    ysc3839  
       2021-04-05 21:16:35 +08:00 via Android
    不过用 VMware 的 NAT 模式就没这问题。
    Osk
        13
    Osk  
       2021-04-05 21:49:02 +08:00 via Android
    桥接网络, hv 中叫外部网络(?),guest 和 host 在同一子网内,相互通信是不用经过路由器转发的,除非像 dns 找对方等特殊的情况需要一丁点流量。
    这个通讯的转发应该是由 hv 的虚拟交换机软件实现的。有一个缺点:拔了网线后,guest 和 host 之间的通讯也好像会断。


    问题二:你可以创建 NAT 网络 + hv 的内部网络交换机,这样,guest 和 host 的通信全部走那张虚拟内部网卡,路由器的子网和它没任何关系了,而且速度是 10gbps 。
    192.168.0.0/24 这个子网内的设备无法访问 guest,guest 倒可以访问它们(nat),给 guest 配上 192.168.0.1 的 dns 就能实现:上网走路由器,与 host 通信不出虚拟网卡。

    顺便:手动创建的 nat 网络无 dns 与 dhcp 服务,guest 需要手动配置 ip 和 dns (不是 host 的 ip 哦)。Win 10 自动创建的 default switch 也是 nat ,且有 dns 和 fhcp 服务,server 上手动创建的好像就没有。。。
    Zien
        14
    Zien  
       2021-04-05 22:34:47 +08:00 via iPhone
    桥接可以的呀,就类似于虚拟机 guest 和 host 在同一子网下
    ryd994
        15
    ryd994  
       2021-04-05 23:57:58 +08:00 via Android   ❤️ 1
    桥接模式下是可以的
    hyper v 的 vmswitch 启用后,vmswitch bind 到网卡( pnic )上。然后创建一个 vnic 给宿主系统。虚拟机绑定的也是 vnic 。
    所以无论是 host os 还是 guest os,流量都会经过 vmswitch 。

    有这个前提,那么你的问题就很容易解答了。这两个 IP 都在同一网段,所以不需要经过路由器,直接 vmswitch 转发就行。

    强制 vswitch 不本地转发而直接去 router 的,那叫 vepa mode 。vmswitch 是否支持 vepa mode 我不记得了。
    ryd994
        16
    ryd994  
       2021-04-06 00:04:21 +08:00 via Android   ❤️ 2
    1 楼说的是错的。同一网段下不需要路由器。有 arp,有 switch 就行了。也不需要网关。这是计算机网络的基础吧?这也能说错?

    如果你想要降低开销,internal switch 是个比较好的选择。还可以启用 jumbo frame 减少网络栈的开销。如果想要极致降低开销,https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service
    这是直通,不走网络,自然也就没有网络栈的开销。内存直接传输数据。
    alphatoad
        17
    alphatoad  
       2021-04-06 00:09:04 +08:00
    @ryd994 本帖最正确的回答。一楼看的我头皮发麻
    deorth
        18
    deorth  
       2021-04-06 09:21:53 +08:00
    此贴是程序员不一定都懂网络的证明,CS EE 还是要分家的
    cubecube
        19
    cubecube  
       2021-04-06 16:15:47 +08:00
    @ryd994 一楼的确把我看懵了,主要是还有点赞的。
    不跨广播域就不用到三层
    LeeReamond
        20
    LeeReamond  
    OP
       2021-04-06 20:54:49 +08:00 via Android
    @cubecube 我点的赞,我又不明白,看一楼回复还说你可以抓包验证,就以为是正确答案了。不过现在说来,似乎抓发出的包也不能分析路由路线。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   941 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.