我的问题的核心就是,虚拟机如何才能在除了关机以外的任何情况下,都能保持与宿主机畅通的通信,同时拥有类似宿主机的网络性能?
首先说下我的环境。
我系统是 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 效率极低的问题?
或者,你们有谁搞过类似的虚拟机的网络方案?感觉我这套方案太复杂了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/392720
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.