
我有一個 Oracle Linux 來賓,在 Windows 7 主機上的 VirtualBox 中執行 Web 伺服器。我需要設定網路以便我可以做三件事:
- 主機可以透過瀏覽器和 ssh 連接到訪客
- 訪客可以透過主機的 VPN 與內部網路上的其他伺服器通信
- 客人可以使用外部互聯網
我閱讀了一些答案並嘗試了一些配置,結果如下:
橋接
- 主人無法聯絡客人
- 訪客無法透過 VPN 查看
- 客人可以上網
網路位址轉換
- 主人無法聯絡客人
- 訪客可以透過VPN看到
- 客人無法上網
僅主機
3個條件全部失敗。
NAT-網絡
- 主人無法聯絡客人
- 訪客可以透過VPN看到
- 客人無法上網
我還應該指出,有時主機透過 VPN 連接,而其他時候則只是直接插入公司網路。當直接插入時,橋接適配器滿足所有 3 個條件。理想情況下,無論是 VPN 還是直接連接,都會有一個配置滿足所有 3 個條件。
答案1
我有精確的同樣的問題,並解決了它,所以我很樂意詳細解釋問題和解決方案。
不涉及VPN
了解滿足您的要求所需的配置非常重要沒有涉及VPN。此外,此資訊假設主機和來賓上都沒有軟體防火牆幹擾。
如果沒有 VPN,通常可以透過在虛擬機器配置中建立兩個網路介面卡來解決此問題。
第一個適配器必須設定為NAT
模式,使來賓能夠透過主機的網路介面存取網路資源(包括 Internet)。
第二個適配器必須設定為Host-only
,以啟用主機和來賓之間的雙向通訊。
此適配器的設定比第一個適配器稍微複雜一些,因為它需要修改 VirtualBox 的全域網路首選項才能配置僅主機適配器(注意:這需要管理員權限)。
在 VirtualBox 中,轉到File -> Preferences -> Network
.按一下Host-only Networks
選項卡,然後按一下小+
圖示新增適配器。系統將提示您提升 VirtualBox 的權限。
Adapter
必須填寫該選項卡;它應該看起來像這樣(忽略標記為 的適配器#2
;它用於不相關的事情):
伺服器選項卡上的值DHCP
是可選的。如果您打算在來賓網路設定中硬編碼此適配器的 IP 位址,則不需要這些值。另一方面,如果您打算使用 DHCP,則這些值可能如下所示:
配置 VirtualBox 的最後一步是返回虛擬機器的網路配置並新增第二個適配器,該適配器引用我們剛剛建立的僅主機適配器:
現在,在來賓作業系統中,必須將網路設定為使用這兩個網路介面。
在 Debian 或 Ubuntu GNU/Linux 上,配置非常簡單,只需修改/etc/network/interfaces
為如下所示:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
(純粹主義者可能更喜歡使用/etc/network/interfaces.d
目錄,但這超出了本解釋的範圍)
重新啟動來賓的網路服務,或者更簡單地說,重新啟動整個來賓虛擬機,一切都應該「正常運作」。
此時,應該能夠對來賓虛擬機器執行 ping 操作192.168.56.101
並收到回應(前提是軟體防火牆沒有乾擾)。
同樣,人們應該能夠 ping 通位於 的主機10.0.2.2
。這個IP位址似乎被「硬編碼」到VirtualBox的NAT實作中,或至少是透過一些不明顯的配置指令指定的,並且關於其來源的可用資訊很少。但是,唉,「它確實有效」。
鑑於此配置,您問題中概述的所有三個條件都已滿足。
輸入:VPN
但是,問題就在這裡。引入 VPN 會導致出現問題(取決於特定 VPN 及其配置)。
現代 VPN 能夠分割隧道,這是上述 VirtualBox 配置根據您的三個要求運行所必需的。出於(良好的)安全原因,分割隧道通常被禁用,這正是您(和我的)案例中的問題。
當您連接到VPN 時,VPN 用戶端(在我的例子中為Cisco AnyConnect 安全地行動用戶端,3.1.02026)檢查主機的路由表,記住它們,然後使用通常來自某些集中的值來覆蓋它們。
command.exe
您可以透過開啟(在 Windows 上)自行檢查路由表:
C:\>route print
在連接到 VPN 之前,路由表包含允許此 VirtualBox 配置正常運作的關鍵條目。連接到 VPN 會導致這些條目被刪除,從而阻止主機和訪客之間的通訊。
(還有許多其他條目,我在這裡省略了,因為它們與此行為的根本原因無關。)
連接 VPN 之前:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
連接VPN後:
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
VPN 用戶端刪除以下行:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
如果沒有最後兩個條目,主機和訪客將無法通信,而這正是在 VPN 配置中停用分割隧道時的預期行為。
通常,這兩個命令將恢復這些路由:
C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
但 VPN 用戶端仍然保持警惕:它攔截修改路由表的嘗試。我的客戶似乎允許第二個條目,但不允許第一個條目。 (它可能會定期鋪平兩者;我沒有對此進行測試。)
如果您的特定 VPN 及其附帶配置允許啟用分割隧道,它通常是這樣打開的:
與 VPN 斷開連線後,行為良好的 VPN 用戶端將恢復連線之前的路由表。我的 VPN 用戶端似乎可以可靠地執行此操作,這是有益的,因為這意味著當我連接到 VPN 或從 VPN 中斷開連接時,不需要重新啟動來賓虛擬機器。在這種情況下,虛擬機器的輔助適配器會被重置,但它會自動且透明地重新取得其 IP 位址,幾乎立即恢復主機和來賓之間的通訊。更好的是,主機和來賓之間的 NFS 安裝(我使用的是 CIFS 安裝)在 VPN 連接/斷開操作中保持連接。
萬一您的 VPN 允許分割隧道,啟用它可能是一個簡單的問題,在這種情況下,我很想聽聽您是否「一切正常」。