木匣子

Web/Game/Programming/Life etc.

Edge 浏览器无法访问 VirtualBox 内的网站

Issue

公司的项目会把 Development 阶段的网站用 Vagrant 管理,托管在 VirtualBox 虚拟机中。虚拟机使用的网络接口是 Host-Only 类型的,只允许主机访问虚拟机,而阻止内网中其它设备访问虚拟机(区别于桥接)。同时方便同一个主机上多个虚拟机之间组网通讯(提供 DHCP)。最近升级了 VirtualBox 到最新版 6.0 ,但遇到了个怪事。所有的浏览器都能正常打开虚拟机中的网站,唯独 Edge 浏览器不行:

issue-preview

访问网址会出现 DNS 错误的页面,并显示如下信息:

There was a temporary DNS error. Try refreshing the page.
Error Code: INET_E_RESOURCE_NOT_FOUND

发生临时 DNS 错误。请尝试刷新页面。
错误代码: INET_E_RESOURCE_NOT_FOUND

Solution

经过一番检索,试了好几种方法都没有搞定。最终在这个帖子里找了解决方案:

You can workaround this issue by changing your VirtualBox Host-Only Ethernet Adapter’s *NdisDeviceType to 0 and rebooting. You can find the key in Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\00XX. The downside to this is that now you’ll have an “Unidentified Network” in your Network and Sharing Center. It’s also managed by Windows Firewall now and by default it is in the Public Profile and it can’t be really changed easily.

– Jani L. Oct 4, 2017

如果你有多个 VirtualBox 网络接口,需要找到正确的网络适配器,可以在 Control Panel\All Control Panel Items\Network Connections 目录下右键相应的网络适配器,然后在 Properties > Networking > Configure... > EventsInformation 文本框架找到如下描述:

Driver Management has concluded the process to add Service
VBoxNetAdp for Device Instance ID ROOT\NET\0000 with the following
status: 0.

其中的 ROOT\NET\0000 应与注册表中 {4d36e972-e325-11ce-bfc1-08002be10318}\00XX\DeviceInstanceID 的键值相对应。则 00XX 就是你要修改的那个网络适配器了。

接下来要做的就是将该路径下键名为 *NdisDeviceType 的键值由 1 改为 0,并重启主机即可。

How / Why

MSDN 对 *NdisDeviceType 这个键的解释可以在这里找到。简而言之就是 UWP(Universal Windows Platform)程序会检查网络适配器的这个键来判断其是否是一个可以联网的网络接口,然后决定是否使用它。

IE 和其它浏览器不是使用 UWP 框架开发的,所以不受影响。而 Edge 正好躺枪。


本文在以下环境中测试

  • Windows 10 Pro(Version 1803, OS Build 17134.885)
  • Microsoft Edge 42.17134.1.0
  • Version 6.0.10 r132072 (Qt5.6.2)