更新
無論如何,如果有人偶然發現這篇文章。事實上,以下的解決方案確實有效,在沒有任何反饋/建設性批評或錯誤識別的情況下對該問題進行了否決,這似乎是不合理的。
目標
我需要最好的方法來設定 ubuntu 伺服器 vbox6.1 來賓以存取互聯網並啟用 ubuntu 20.04 桌面主機以 ssh 進入盒子。
進展/研究
雖然使用 2 個網路介面卡與 virtualbox 伺服器組合來為 virtualbox 建立主機-來賓通訊和網路存取是一種非常常見的解決方案,但這些常見方法有一定的注意事項。
橋接適配器和 NAT 適配器組合方法 - 迄今為止最簡單、最快的方法,但需要注意的是,如果您將終止開關與 UFW 防火牆/VPN 一起使用,那麼您通常必鬚根據 wi-fi 來調整防火牆設定由於網關位址變更而導致您連接到的網路(對於在vbox 上使用靜態IP 位址的使用者來說,這是常見問題)。如果您非常熟悉防火牆規則,那麼此方法適合您。
NAT 適配器和僅主機適配器組合方法 - nat 適配器在盒子內提供輕鬆的互聯網訪問,僅主機適配器為 apache 等應用程式提供主機訪客通訊。這裡要注意的是,某些應用程式在安裝時會根據主適配器 IP 位址進行自行設定(這是我目前的問題)並且由於 NAT IP 位址無法與主機通信,這會產生問題。
我正在研究的解決方案(最初設定可能有點困難)是配置僅主機適配器以透過主機的主網路適配器存取網際網路。
意義
一vboxnet0 僅主機適配器,可透過靜態或動態 ip 為您想要的任意數量的 vbox 提供 ssh、主機-來賓通訊和外部網際網路存取...不再有 vbox 連線問題。
這是優點和缺點以及我的進度步驟。
步驟1
為您的電腦建立一個僅主機適配器(vboxnet0)我的 IP 位址為 192.168.51.1
專業版:
如果您打算在同一個僅主機適配器上擁有多個 vbox,則可以選擇啟用 DHCP 伺服器
第2步:
為你的 vbox 建立一個靜態 IP 配置(我的是 Ubuntu 20.04 伺服器)。您可以選擇跳過此步驟並僅使用動態 ip
我在用
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses: ['192.168.51.47/24']
gateway4: 192.168.51.1
nameservers:
addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]
專業版
透過機器上的靜態 IP,您可以透過 SSH 連接到機器,而無需使用第二個 NAT 轉接器。
第三步
為主客機通訊建立簡單、最小的 UFW 防火牆規則
這就是配置僅主機適配器以與 UFW 配合使用所需的全部內容:
ufw allow allow in|out on vboxnet0
專業版
- 使用此方法,只要每個盒子都位於 vboxnet0 上,您就可以使用單一防火牆規則立即為多個 vbox 建立主機-來賓通訊(如果您打算建立許多需要主機-來賓通訊的 vbox,則非常有用)
第四步
創造永恆的透過使用 MASQUERADE 共享主機的主網路適配器來存取 vboxnet0 的互聯網
這是我目前的問題。我只能為 vboxnet0 建立臨時網路訪問,因為我對 ip 表和 MASQUERADE 不夠熟悉。
作為臨時解決方案,我在 bash 腳本中使用這 4 個命令:
sudo iptables -A FORWARD -o wg0 -i vboxnet0 -s 192.168.51.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
其中 wg0 是我的主機的主網路適配器。
此時,您應該能夠從 vbox 內部 ping 8.8.8.8,以確保它可以存取網路。
我從以下位置得到了上述命令:
https://help.ubuntu.com/community/Internet/ConnectionSharing
有人可以完成/完善為一個或多個 vbox 建立網路存取的僅主機適配器方法嗎?
看起來這可以幫助很多 ubunutu 用戶。透過這種方法,您的 vbox 是“網路便攜"並在初始配置後以最少的努力即可存取互聯網。
唯一的缺點以下是: 困難的初始設定和 vbox 無法被 LAN 上的其他電腦訪問,如果您只是進行本機 Web 開發,則可以忽略不計。
答案1
該解決方案旨在使 ubuntu 開發人員的生活更加方便和安全。我希望管理員和/或其他人能夠對我原來的問題進行投票,因為對於想要使用 Ubuntu 進行 Web 開發的人來說,這是一個非常常見的問題。
無論如何,我最近有一個軟體需求,需要一個用於可存取互聯網的虛擬機器的僅主機適配器。這意味著廣泛使用的雙適配器方法是不夠的。在解決這個問題的過程中,我基本上偶然發現了一個超級安全、超級方便、超級有效率的 ubuntu/virtualbox 開發環境。我在下面發布了我的所有步驟,以幫助其他正在尋求更有效率的 Web 開發環境的 Web 開發人員。
首先,快速概述一下:
橋接適配器和 NAT 適配器組合方法
優點:
- 如果您精通 UFW,則可輕鬆快速地進行設置
缺點:
- 需在訪客內部設定 2 個網路介面
- 由於網關值的原因,具有靜態 IP 位址的訪客可能會在變更 Wi-Fi 網路時遇到問題
- 需要更進階的防火牆配置
- 鼓勵使用 來
/etc/hosts
解析本地域名(隨著時間的推移會變得很麻煩)
NAT 適配器和僅主機適配器
優點:
- 易於設定
- 最低防火牆配置
缺點:
- 需在訪客內部設定 2 個網路介面
- 某些軟體套件在安裝時使用預設 ip,因此預設 10.XXX 位址不適合
(在我的情況下,透過virtualbox 首選項建立自訂NAT 位址不會有幫助,因為我的軟體僅安裝在預設NAT 位址上,而NAT 位址則不適用)可路由,主機可存取) - 需要更進階的防火牆配置
- 鼓勵使用 來
/etc/hosts
解析本地域名(隨著時間的推移會變得很麻煩)
最有效的解決方案:
可存取 Internet 的單主機專用適配器。
僅主機適配器 w.網路存取方式
優點:
- 適合所有客人的單一轉接器
- 簡化的防火牆配置
- 簡化賓客網絡
- 來賓的行為更像是通常具有單一網路介面“eth0”的產品伺服器
- 完全消除
/etc/hosts
使用
缺點:
- 初始配置更加困難。
了解了上面的內容後,我們就開始吧:
我假設:
- 您安裝了最新版本的 virtualbox
- 你有一個帶有 VPN KillSwitch 的 UFW 防火牆已經配置。 (請注意 IP Masquerade 部分,我們將重新訪問它。)
- 您已經在 virtualbox 中建立了一個訪客伺服器並為您的使用者新增了 ssh 公鑰
- 準備好在您的訪客內部進行 Web 訪問的 Web 項目,其網域以“.test”結尾(即 www.example.test)
步驟1
在虛擬盒>文件>主機網路管理員為您的電腦建立一個僅主機適配器(即 vboxnet0) 對於本指南,我的 IP 位址為 192.168.51.1
第2步
在Virtualbox > 設定 > 網絡, 點擊 ”啟用適配器“ 對於適配器 1 和對於 “附於“選擇您在”中建立的vboxnet0名稱步驟1」
步驟3
為您的訪客伺服器建立靜態 IP 配置(我的是 Ubuntu 20.04 伺服器)。這對於 ssh 和網域解析是必要的,但如果不需要 ssh/dns,可以使用動態 ip。
對於 Ubuntu 伺服器,我使用:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses: ['192.168.51.47/24']
gateway4: 192.168.51.1 #**NOTE** Your vboxnet0 ip address is the gateway for your static ip address.
nameservers:
addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]
記住
運行#netplan apply
和/或#netplan --debug generate
尋找您的拼字錯誤和錯誤。
重新啟動您的來賓以確保設定生效。
第四步
建立簡單、最小化的 UFW 防火牆規則以實現主客機通訊。這就是配置僅主機適配器以與 UFW 配合使用所需的全部內容:
$sudo ufw allow in on vboxnet0 && sudo ufw allow out on vboxnet0
此時,您應該從主機 ping 訪客的靜態 IP,並透過 ssh 進入主機。
測試:
ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address
ping -c 5 your-guest's-static-ip address
第五步
透過使用 MASQUERADE 共享主機的主網路適配器,為 vboxnet0 建立永久互聯網存取。當您設定 VPN Killswitch 時,您必須透過編輯使用 ip 偽裝您的 VPN 位址/etc/ufw/before.rules
,我們將再次編輯此檔案。
sudo nano /etc/ufw/before.rules
在文件的這一部分:
#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
添加:
-A POSTROUTING -s 192.168.51.1/24 -j MASQUERADE
#筆記這是 vboxnet0 僅主機適配器的 IP 位址,它充當訪客靜態 IP 位址的閘道。
關閉並儲存文件
現在,所有流量 192.168.51.1 都將透過主機的主網路介面發送,即使它發生變化(即 wi-fi 與 LAN)
您可以透過造訪 vbox guest 並在命令列上執行以下命令來測試這一點:
ping -c 5 8.8.8.8
如果成功,您的僅主機適配器現在可以存取網際網路。
步驟6
這是最後一步,也是迄今為止最複雜的一步。此時,要讓您的 virtualbox Web 開發環境可供使用,唯一需要做的就是安裝和設定 dnsmasq,以便可以在本機解析來自訪客伺服器的網域名稱。側邊欄dnsmasq 顯然可以與上面提到的組合網路適配器方法一起使用,以消除 的使用/etc/hosts
,但是當使用單一僅主機適配器時,需要 dnsmasq 來解析本地網域。
停用並停止 systemd 已解決
$
sudo systemctl 停用 systemd-resolved $ sudo systemctl stop systemd-resolved刪除符號連結
/etc/resolv.conf
並刪除文件$ ls -lh /etc/resolv.conf
$ sudo rm /etc/resolv.confetc/resolv.con
使用以下值建立一個新的 / :$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(網域的主機解析)
$ sudo bash -c 'echo "nameserver 208.67.222.222" >> /etc/resolv.conf' #(外部互聯網的 OpenDNS 公共 dns 伺服器 ip)
$ sudo bash -c 'echo "nameserver your-guest's-static-ip address" >> /etc/resolv.conf'
安裝 dnsmasq
$ sudo apt install dnsmasq
將 .test 新增到 dnsmasq 設定檔中:
$ sudo bash -c 'echo "address=/.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
筆記:開發需要通配符網域解析的 WordPress 多網站的人可以使用:
$ sudo bash -c 'echo "address=/example.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
為訪客的靜態 IP 位址建立目錄解析器:
$sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'
重新啟動 dnsmasq 和網路管理器
$ sudo systemctl 重新啟動 dnsmasq $ sudo systemctl 重新啟動網路管理器
測試您的 dnsmasq 設定
a.) 開啟瀏覽器並確認您仍可存取外部互聯網
b.) 運行dig example.test
你應該能夠看到你的訪客伺服器的靜態IP位址
c.) 在主機瀏覽器中開啟 example.test
砰!完畢。
借助此Web 開發環境,您可以隨意更改wi-fi newtworks,而不會出現ufw/來賓IP 位址問題,您只有一個僅用於主機的適配器,您可以在將來創建的所有來賓上使用該適配器,更輕鬆地將來賓聯網,並完全停止使用該/etc/hosts
檔案用於解析專案的本地域名,因為它是由 dnsmasq 自動完成的。
我的資料來源:
https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts- Between-dnsmasq-and-systemd-resolved
https://brunopaz.dev/blog/setup-a-local-dns-server-for-your-projects-on-linux-with-dnsmasq/
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq
https://linuxize.com/post/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/
https://superuser.com/questions/1237463/virtualbox-host-only-with-internet
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq
https://medium.com/soulweb-academy/docker-local-dev-stack-with-traefik-https-dnsmasq-locally-trusted-certificate-for-ubuntu-20-04-5f036c9af83d