我使用的是 VirtualBox 5.0.20。主机是一台运行 OS X 10.11.5(El Capitan)的 MacBook。客户机操作系统是 64 位 Arch Linux。当我从 ISO 安装 Arch 时,客户机的互联网连接很好。但是,一旦我启动到已安装的系统,我就无法再访问互联网(例如,ping 8.8.8.8 就会无限期挂起)。
虚拟机有两个网络适配器:一个是桥接的,一个是主机专用的。我尝试过将桥接适配器更改为 NAT 适配器,以及将桥接适配器连接到主机的无线接口,另一次连接到主机的有线接口。在任何这些设置下,客户机都无法访问互联网。
客户操作系统已启用 systemd-networkd.service 和 systemd-resolved.service。据我所知,它没有启用任何其他网络服务。如果可能的话,我希望坚持使用这些服务,而不是切换到其他服务,但如果这些服务中存在一些固有缺陷,而这正是我的问题的根源,我就会切换。
在客户操作系统中,桥接适配器的网络文件的内容:
[root@arch64 ~]# cat /etc/systemd/network/bridged.network
[Match]
Name=enp0s3
[Network]
DHCP=ipv4
主机专用适配器的网络文件内容如下:
[root@arch64 ~]# cat /etc/systemd/network/host-only.network
[Match]
Name=enp0s8
[Network]
Address=192.168.56.2/24
Gateway=192.168.56.1
桥接适配器成功获取 DHCP 租约,我还可以 ping 通 LAN 上的主机,但无法 ping 通 LAN 路由器以外的任何设备。主机的互联网连接正常。
答案1
答案来自我收到的一条提示Unix & Linux StackExchange 中也提出了同样的问题。
根据我的设置,我有两个 systemd 网络单元文件:一个用于桥接适配器,一个用于仅主机适配器。我希望桥接适配器有一个动态地址,因为虚拟机位于在网络之间移动的笔记本电脑上,我希望仅主机适配器有一个静态地址,这样我就可以访问它,例如通过 ssh,而不必手动确定地址。
然而,在创建网络单元文件时,我盲目地复制了我在 wiki 教程中找到的内容——其中一部分描述了如何快速设置动态地址,另一部分描述了如何快速设置静态地址。显然,该教程假设我会使用其中一种简单设置——而不是同时使用两种设置,后者的情况更为复杂。
只需说明主机专用适配器的网络文件指定了网关选项,而桥接适配器的文件则没有。因此,主机专用适配器的网关似乎成为来自虚拟机的流量的首选路由。从网络文件中删除此选项可解决问题。
修复后的仅主机适配器网络文件(删除了网关选项):
[root@arch64 ~]# cat /etc/systemd/network/host-only.network
[Match]
Name=enp0s8
[Network]
Address=192.168.56.2/24