我使用的是 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 局域网上的主机,但无法 ping 通 LAN 路由器之外的任何设备。房东的网络连接良好。
更多信息:
[root@arch64 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:1a:7d:74 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.5/24 brd 192.168.0.255 scope global dynamic enp0s3
valid_lft 3598sec preferred_lft 3598sec
inet6 fe80::a00:27ff:fe1a:7d74/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:3c:0a:7d brd ff:ff:ff:ff:ff:ff
inet 192.168.56.2/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe3c:a7d/64 scope link
valid_lft forever preferred_lft forever
[root@arch64 ~]# ip route
default via 192.168.56.1 dev enp0s8 proto static
default via 192.168.0.1 dev enp0s3 proto dhcp src 192.168.0.5 metric 1024
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.5
192.168.0.1 dev enp0s3 proto dhcp scope link src 192.168.0.5 metric 1024
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.2
答案1
根据我的设置,我有两个 systemd 网络单元文件:一个用于桥接适配器,一个用于仅主机适配器。我希望桥接适配器具有动态地址,因为虚拟机位于在网络之间移动的笔记本电脑上,并且我希望仅主机适配器具有静态地址,以便我可以通过 ssh 等方式访问它,而无需使用手动确定地址。
然而,在创建网络单元文件时,我盲目地复制了维基教程中的内容——一部分描述如何快速设置动态地址,另一部分描述如何快速设置静态地址。显然,本教程假设我将使用一种或另一种简单的设置,而不是同时使用两种设置,这是一个更复杂的场景。
可以说,仅主机适配器的网络文件指定了网关选项,而桥接适配器的文件则没有指定。因此,仅主机适配器的网关似乎成为来自虚拟机的流量的首选路由。从网络文件中删除此选项解决了该问题。
修复后的仅主机适配器网络文件(删除了网关选项):
[root@arch64 ~]# cat /etc/systemd/network/host-only.network
[Match]
Name=enp0s8
[Network]
Address=192.168.56.2/24