配置 Ubuntu 20.04 Dekstop 主機和 Ubuntu 20.04 伺服器來賓以進行 Internet 存取、SSH 和主機到來賓通訊的最佳方法

配置 Ubuntu 20.04 Dekstop 主機和 Ubuntu 20.04 伺服器來賓以進行 Internet 存取、SSH 和主機到來賓通訊的最佳方法

更新
無論如何,如果有人偶然發現這篇文章。事實上,以下的解決方案確實有效,在沒有任何反饋/建設性批評或錯誤識別的情況下對該問題進行了否決,這似乎是不合理的。

目標

我需要最好的方法來設定 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使用

缺點:

  • 初始配置更加困難。

了解了上面的內容後,我們就開始吧:

我假設:

  1. 您安裝了最新版本的 virtualbox
  2. 你有一個帶有 VPN KillSwitch 的 UFW 防火牆已經配置。 (請注意 IP Masquerade 部分,我們將重新訪問它。)
  3. 您已經在 virtualbox 中建立了一個訪客伺服器並為您的使用者新增了 ssh 公鑰
  4. 準備好在您的訪客內部進行 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 來解析本地網域。

  1. 停用並停止 systemd 已解決

    $
    sudo systemctl 停用 systemd-resolved $ sudo systemctl stop systemd-resolved

  2. 刪除符號連結/etc/resolv.conf並刪除文件

    $ ls -lh /etc/resolv.conf
    $ sudo rm /etc/resolv.conf

  3. etc/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'

  4. 安裝 dnsmasq

    $ sudo apt install dnsmasq

  5. 將 .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'
  1. 為訪客的靜態 IP 位址建立目錄解析器:

    $sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'

  2. 重新啟動 dnsmasq 和網路管理器

    $ sudo systemctl 重新啟動 dnsmasq $ sudo systemctl 重新啟動網路管理器

  3. 測試您的 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

相關內容