V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyyz
V2EX  ›  程序员

Hyper-V 虚拟机的网络到底怎么配才好?内容挺复杂的,请看正文。

  •  
  •   fyyz · 2017-09-22 09:21:23 +08:00 · 5368 次点击
    这是一个创建于 2620 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的问题的核心就是,虚拟机如何才能在除了关机以外的任何情况下,都能保持与宿主机畅通的通信,同时拥有类似宿主机的网络性能?

    首先说下我的环境。

    我系统是 Windows Server 2016 DataCenter。开了 Hyper-V 虚拟机。机器是笔记本电脑。

    你可能会说:这还不简单?开个桥接啊,桥接到路由器就行了。但是,如果真的这么简单就能解决了,我也不会来发个贴问了。

    问题的关键就在我的笔记本:
    * 笔记本是有两个网络接口的,一个是 RJ45,就是网线接口,另一个就是无线接口。
    * 笔记本会经常被带着走,接上不同的网线,或者接入不同的 WiFi,导致拿到不同的 IP。不仅宿主机的 IP 变了,虚拟机的 IP 也变了。有些网络是不开 DHCP 的,就比如说我公司里的那个,就要手动设置 IP。
    * 经常由于测试的需求导致要开个虚拟机跑个程序。

    根据上述需求可以很明显地看出,需要在我的 Windows Server 里开一个局域网。Hyper-V 自带虚拟交换机,但是没 DHCP 这种东西。于是我开了个虚拟机,做了个 Router OS x86 进去,开了 DHCP 和 NAT。

    最后就做成这样一个东西:

    简单说下,是创建了两个虚拟交换机,分别连接到物理接口,即有线和无线。每台交换机分别再拖出两根网线,一根接到宿主机,另一根接到 Router OS。连接宿主机是为了保证了宿主机的网络不会额外走一遍 NAT。此外,宿主机还连到了虚拟交换机 3,这个其实就是我 Router OS 的内网了。

    这样一来,实现了不管外面网络怎么变,我的宿主机和虚拟机能始终畅通地通信。不过我最近发现一个非常严重的问题,就是我宿主机的网络可以达到 5MB/s 的下载速度,虚拟机最高只有 100KB/s,网络性能极差。但是如果虚拟机直接桥接物理网卡,就能达到 5MB/s 的下载速度。

    如何解决 NAT 效率极低的问题?
    或者,你们有谁搞过类似的虚拟机的网络方案?感觉我这套方案太复杂了。
    16 条回复    2017-09-23 02:14:45 +08:00
    mhycy
        1
    mhycy  
       2017-09-22 09:38:04 +08:00
    Hyper-V 应该有类似 VM 的 NAT 模式虚拟网卡吧?那个到母机的网段是固定的
    xuan880
        2
    xuan880  
       2017-09-22 09:50:02 +08:00 via Android
    虚拟机开三个个网卡,两个绑定有线和 WIFI 用 nat 模式来上网,另一个弄成本地网络,专门和宿主机通信。我的 vbox 就是这样的。
    kokutou
        3
    kokutou  
       2017-09-22 09:57:24 +08:00
    除了有线和 wifi,开再开个网卡。。。不就行了。。。
    sacuba
        4
    sacuba  
       2017-09-22 10:00:40 +08:00
    二楼三楼的解决方案是没毛病的,我家里也是这样用的,和你不同的是我有两个物理网卡,没有无线
    wweir
        5
    wweir  
       2017-09-22 10:18:18 +08:00
    然而,我还是喜欢直接上网桥模式,主要是对外文件传递方便。
    是的,我是 ssh 到 服务器上的几层 docker 里,直接 sftp(scp) 虚拟机传文件
    tywtyw2002
        6
    tywtyw2002  
       2017-09-22 10:55:15 +08:00
    nat 效率不应该那么低才对。

    我很老的服务器( l5420 )跑了 vyos 在 vsphere 下,nat 网络性能大于 300Mbps。
    你应该是桥接的问题。
    bxb100
        7
    bxb100  
       2017-09-22 11:01:14 +08:00 via Android
    nat+host only
    fyyz
        8
    fyyz  
    OP
       2017-09-22 11:12:10 +08:00 via Android
    @mhycy 没有,只有虚拟交换机
    fyyz
        9
    fyyz  
    OP
       2017-09-22 11:23:43 +08:00 via Android
    @xuan880 这种方法我也尝试过,但是有比较严重的问题。因为 ROS 的跳数最少,所以在虚拟机上 ROS 的这条路由优先级最高。这样一来,所有流量都会走 ROS。我不知道 DHCP 服务器能不能设目标网络?就是从连上 ROS 的虚拟机上看到的路由表。我现虚拟机上 ROS 这条路由的目标网络 0.0.0.0,如果能在 DHCP 服务器上声明目标网络上一个局域网网络其实也能解决问题。
    Osk
        10
    Osk  
       2017-09-22 11:46:22 +08:00 via Android
    我是在 hyperv 中跑一个 lede x64,把所有物理网卡桥接上去,并创建一个内部网络,用于虚拟机之间、虚拟机与宿主机通信和虚拟机上网,让 lede 处理。
    缺点就是,任务管理器里一堆虚拟网卡看着闹心,谁让 hyperv 没有好用的 nat 支持呢,不像 vbox 等软件那样,windows 的 ics 更是问题一堆
    flynaj
        11
    flynaj  
       2017-09-22 20:29:09 +08:00 via Android
    Router OS 云服务器免费授权就是 1M 的带宽,是不是这个问题
    fyyz
        12
    fyyz  
    OP
       2017-09-22 22:12:21 +08:00
    @flynaj 我装的就是 Router 的 Hyper-V 的虚拟机镜像,官方直接有提供。
    https://mikrotik.com/download
    就是下面的 VHDX image 镜像
    xuan880
        13
    xuan880  
       2017-09-22 22:53:32 +08:00
    @fyyz 如果是 windows 的虚拟机我记得可以设置网络的跃点数手动指定优先线路.
    flynaj
        14
    flynaj  
       2017-09-23 00:48:20 +08:00 via Android
    @fyyz 就是了,200 多一个 p1 授权,默认只有 1mbps,p1 是 1g 带宽
    fyyz
        15
    fyyz  
    OP
       2017-09-23 01:18:32 +08:00 via Android
    @flynaj 那还有什么适合跑在 x86 虚拟机里路由器镜像推荐吗?不要 openwrt。
    flynaj
        16
    flynaj  
       2017-09-23 02:14:45 +08:00 via Android
    功能强大还是 ros,我是买了授权,不嫌弃可以试试国产 ikuai ,OpenWrt 没有什么问题么,
    @fyyz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3018 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.