无法从 VirtualBox 来宾 (Arch Linux) 访问互联网

无法从 VirtualBox 来宾 (Arch Linux) 访问互联网

我使用的是 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

相关内容