配置 Ubuntu 20.04 Dekstop Host 和 Ubuntu 20.04 Server Guest 以获得 Internet 访问、SSH 和主机到客户机通信的最佳方法

配置 Ubuntu 20.04 Dekstop Host 和 Ubuntu 20.04 Server Guest 以获得 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 仅主机适配器为您想要的任意数量的 vbox 提供 ssh、主机-客户机通信和外部互联网访问,并使用静态或动态 ip......不再有 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 开发的人来说,这是一个相当常见的问题。

无论如何,我最近遇到了一个软件需求,即为具有互联网访问功能的 VirtualBox 提供一个主机专用适配器。这意味着广泛使用的双适配器方法不够用。在解决这个问题时,我偶然发现了一个超级安全、超级方便、超级高效的 ubuntu/virtualbox 开发环境。我将在下面发布我的所有步骤,以帮助其他寻求更高效 Web 开发环境的 Web 开发人员。

首先,简单概述一下:

桥接适配器和 NAT 适配器组合方法

优点:

  • 如果您精通 UFW,则可以轻松快速地进行设置

缺点:

  • 需要在客户机内配置 2 个网络接口
  • 由于网关值的原因,具有静态 IP 地址的访客在更改 Wi-Fi 网络时可能会遇到问题
  • 需要更高级的防火墙配置
  • 鼓励使用/etc/hosts解析本地域名(随着时间的推移变得繁琐)

NAT 适配器和仅主机适配器

优点:

  • 易于设置
  • 最低限度的防火墙配置

缺点:

  • 需要在客户机内配置 2 个网络接口
  • 一些软件包在安装时使用默认 IP,因此默认的 10.XXX 地址不合适
    (在我的情况下,通过 virtualbox 首选项创建自定义 NAT 地址不会有帮助,因为我的软件只安装在默认 NAT 地址上,并且 NAT 地址不可路由,主机无法访问)
  • 需要更高级的防火墙配置
  • 鼓励使用/etc/hosts解析本地域名(随着时间的推移变得繁琐)

最有效的解决方案:
具有 Internet 访问权限的单个主机专用适配器。

仅主机适配器,带互联网访问方法

优点:

  • 所有客人可使用一个适配器
  • 简化防火墙配置
  • 简化宾客网络
  • 客户机的行为更像通常具有单个网络接口“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 Server,我使用:

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 客户机并在命令行上运行来测试这一点:
ping -c 5 8.8.8.8

如果成功,您的仅主机适配器现在就可以访问互联网。

第 6 步

这是最后一步,也是迄今为止最复杂的一步。此时,要让您的 virtualbox web dev 环境准备就绪,唯一需要做的就是安装和配置 dnsmasq,以便您的客户服务器中的域名可以在本地解析。侧边栏dnsmasq 显然可以与上面提到的组合网络适配器方法一起使用以消除使用/etc/hosts,但是当使用单个主机专用适配器时,需要 dnsmasq 来解析本地域名。

  1. 禁用并停止 systemd 已解决

    $ sudo systemctl disable 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 "名称服务器你的客户的静态 ip 地址" >> /etc/resolv.conf'

  4. 安装 dnsmasq

    $ sudo apt 安装 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 地址" > /etc/resolver/test'

  2. 重新启动 dnsmasq 和网络管理器

    $ sudo systemctl 重新启动 dnsmasq $ sudo systemctl 重新启动网络管理器

  3. 测试你的 dnsmasq 设置

a.) 打开浏览器并确认您仍然可以访问外部互联网

b.) 运行后dig example.test你应该能够看到你的客户服务器的静态 IP 地址

c.) 在主机的浏览器中打开 example.test

砰!完毕。

使用此 Web 开发环境,您可以随意更改 Wi-Fi 网络,而不会出现 ufw/guest 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

相关内容