Arch-Linux

無法從 VirtualBox 來賓(Arch Linux)訪問網際網路

  • June 16, 2016

我正在使用 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 區域網路路由器之外的任何東西。房東的網際網路連接很好。

更多資訊:

[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 

根據我的設置,我有兩個 systemd 網路單元文件:一個用於橋接適配器,一個用於僅主機適配器。我希望橋接適配器具有動態地址,因為虛擬機位於在網路之間移動的筆記型電腦上,並且我希望僅主機適配器具有靜態地址,以便我可以訪問它,例如通過 ssh,而無需手動確定地址。

但是,在創建網路單元文件時,我盲目地複制了我在 wiki 教程中找到的內容——一節描述如何快速設置動態地址,另一節描述如何快速設置靜態地址。顯然,本教程假設我將使用一種或另一種簡單的設置,而不是並排使用,這是一個更複雜的場景。

可以說僅主機適配器的網路文件指定了網關選項,而橋接適配器的文件沒有。因此,僅主機適配器的網關似乎成為來自虛擬機的流量的首選路由。從網路文件中刪除此選項解決了該問題。

修復後的僅主機適配器網路文件(刪除了網關選項):

[root@arch64 ~]# cat /etc/systemd/network/host-only.network 
[Match]
Name=enp0s8

[Network]
Address=192.168.56.2/24

引用自:https://unix.stackexchange.com/questions/289884