
我正在硬連線到 LAN 的主機上運行虛擬機器。主機顯示在我的本地網路上(與透過 Wifi 連接的其他主機一樣),但 VM Guest 卻沒有。最初這是因為 VM Guest 是從主機進行 NAT 的。 VM Guest 可以存取網際網路和 LAN 上的其他伺服器,但其他伺服器無法存取它。這是有道理的。我希望發生的是來賓虛擬機器顯示在網路上,就好像它們像主機一樣直接硬連線到它。我一生都無法弄清楚我錯過了什麼。
我有基本的家庭網路設定。它看起來如下圖所示:
- Netgear 夜鷹 wifi/路由器
- 英特爾 NUC 主機硬體連線到路由器
- Ubuntu 伺服器作業系統
- KVM/QEMU虛擬化
我最初使用 NATed 配置設定虛擬機,如下所示(預設網路是 NATed 橋接網路):
上面的方法效果很好,但同樣,我無法從 LAN 上的其他裝置存取虛擬機器(因為它們的虛擬機器已進行 NAT)。
然後,我嘗試設定路由配置,以便每個虛擬機器都可以獲得自己的 IP,並且可以:
- 到達網路
- 可從 LAN 上的其他主機存取
然而,透過上述設置,虛擬機器無法存取互聯網,也無法從網路上的其他主機存取。如果我以某種方式在主機後面的 DMZ 中進行設置,那幾乎就是這樣。
根據我讀到的所有內容,設定路由配置(透過 virbr3,如上圖所示)應該在主機上建立一個「路由」類型的虛擬網絡,這將導致主機直接通過。我可以在主機的 ARP 表中看到它了解 VM Guest:
當我登入 Netgear 路由器時,我希望看到的是列為有線連接的 VM Guest,但它並未列出。我嘗試進入路由器並手動為 VM Guest 的 IP 添加保留的 IP 位址(以及 VM Guest 的 MAC 位址),認為該 IP 的網路請求將被正確路由,但事實並非如此。幾乎就像主機知道虛擬機,但沒有正確通告路由,而且路由器不知道訪客虛擬機,因此當我嘗試從 LAN 上的其他主機 ping 訪客的 IP 時,路由器不會這樣做不知道發送到哪裡?關於如何解決這個問題有什麼建議嗎?
編輯
我意識到缺少的一步是在我的 NetGear 路由器中新增靜態路由,以便它知道將請求轉送到與虛擬機器關聯的 IP 位址(透過 eth0 閘道)。現在我可以從網路上的其他主機 ping 虛擬機,這是一個巨大的進步。唯一剩下的問題是現在虛擬機器無法存取網路(即 google.com)。
編輯2
Guest VM 上的輸出traceroute google.com
如下:
192.168.100.1是本地網關。
我相信192.168.1.1是我的無線網關。我之所以撥打此電話,是因為它在主機和我的 Mac(也連接到 LAN)上顯示為預設閘道。