AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1387393
Accepted
nightwatch
nightwatch
Asked: 2022-01-17 03:52:43 +0800 CST2022-01-17 03:52:43 +0800 CST 2022-01-17 03:52:43 +0800 CST

配置 Ubuntu 20.04 Dekstop 主机和 Ubuntu 20.04 服务器来宾以进行 Internet 访问、SSH 和主机到来宾通信的最佳方式

  • 772

更新
无论如何,如果有人偶然发现这篇文章。实际上,下面的解决方案确实有效,在没有任何反馈/建设性批评或错误识别的情况下对该问题投反对票似乎是不合理的。

目标

我需要最好的方法来设置 ubuntu 服务器 vbox6.1 来宾以访问互联网并启用 ubuntu 20.04 桌面主机以 ssh 进入盒子。

进展/研究
虽然使用 2 个网络适配器与 virtualbox 服务器组合来为 virtualbox 建立主机-客户机通信和 Internet 访问是一种非常常见的解决方案,但这些常见方法有一些警告。

桥接适配器和 NAT 适配器组合方法 - 迄今为止最简单和最快的方法,但需要注意的是,如果您在 UFW 防火墙/VPN 中使用 killswitch,那么您通常必须根据哪个 wi-fi 调整防火墙设置您连接到的网络是因为网关地址发生了变化(对于那些在 vbox 上使用静态 IP 地址的人来说,这是一个常见问题)。如果您非常擅长防火墙规则,那么此方法适合您。

NAT 适配器和仅主机适配器组合方法 - nat 适配器在盒子内提供轻松的互联网访问,而仅主机适配器为 apache 等应用程序提供主机访客通信。这里需要注意的是,一些应用程序在安装时根据主适配器 IP 地址进行自我配置(这是我当前的问题),并且由于 NAT IP 地址无法与主机通信,这会产生问题。

我正在研究的解决方案(最初可能有点难以设置)是配置一个仅限主机的适配器以通过主机的主网络适配器访问 Internet。


意味着一个vboxnet0仅主机适配器,可通过静态或动态 ips 为您想要的尽可能多的 vbox 提供 ssh、主机-来宾通信和外部 Internet 访问......不再为 vbox 连接而烦恼。

这是优点和缺点以及我的进步步骤。

Step1
为你的机器创建一个host-only adapter (vboxnet0) 我的IP地址是192.168.51.1

PRO:
如果您计划在同一个仅主机适配器上拥有多个 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]

Pro
在您的机器上使用静态 IP,您可以通过 SSH 进入盒子,而无需使用第二个 NAT 适配器。

第三步

为主客通信创建简单、最小的 UFW 防火墙规则

这就是配置仅主机适配器以与 UFW 一起使用所需的全部内容:

ufw allow allow in|out on vboxnet0

临

  • 使用这种方法,只要每个盒子都在 vboxnet0 上,您就可以使用单个防火墙规则立即为多个 vbox 创建主机-来宾通信(如果您计划制作许多需要主机-来宾通信的 vbox,那就太好了)

第四步通过使用 MASQUERADE 共享主机的主网络适配器为 vboxnet0
创建永久互联网访问

这是我目前的问题。我只能为 vboxnet0 创建临时 Internet 访问权限,因为我对 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 以确保它可以访问 Internet。

我从以下位置获得了上述命令:
https ://help.ubuntu.com/community/Internet/ConnectionSharing

有人可以完成/完善为一个或多个 vbox 创建 Internet 访问的仅主机适配器方法吗?

似乎这可以帮助很多 ubunutu 用户。使用这种方法,您的 vbox 是“网络便携的”,并且在初始配置后可以轻松访问 Internet。

这里唯一的缺点是:初始设置困难,并且您 LAN 上的其他机器无法访问 vbox,如果您只是在进行本地 Web 开发,这可以忽略不计。

networking
  • 1 1 个回答
  • 707 Views

1 个回答

  • Voted
  1. Best Answer
    nightwatch
    2022-01-21T00:34:59+08:002022-01-21T00:34:59+08:00

    该解决方案旨在使 ubuntu 开发人员的生活更加方便和安全。我希望管理员和/或其他人会看到合适的投票支持我原来的问题,因为对于想要使用 Ubuntu 进行 Web 开发的人来说,这是一个非常常见的问题。

    无论如何,我最近有一个软件要求,即为具有 Internet 访问权限的 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 访问权限的单一主机适配器。

    仅主机适配器 w。上网方式

    优点:

    • 所有客人的单一适配器
    • 简化的防火墙配置
    • 客人的简化网络
    • 来宾的行为更像是通常具有单个网络接口“eth0”的产品服务器
    • 完全消除/etc/hosts使用

    缺点:

    • 更难的初始配置。

    了解了以上内容,让我们开始吧:

    我会假设:

    1. 你安装了最新版本的 virtualbox
    2. 你有一个已经配置了 VPN KillSwitch 的 UFW 防火墙。(注意IP Masquerade部分,我们将重新访问它。)
    3. 您已经在 virtualbox 中创建了一个访客服务器并为您的用户添加了一个 ssh pub 密钥
    4. 一个 Web 项目,可以在您的访客内部进行 Web 访问,其域以“.test”结尾(即 www.example.test)

    步骤1

    在Virtualbox > Files > Host Network Manager中为您的机器创建一个仅主机适配器(即 vboxnet0)对于本指南,我的 IP 地址为 192.168.51.1

    第2步

    在Virtualbox > Settings > Network中,单击 Adapter 1 的“ Enable Adapter ”,并为“ Attached to ”选择您在“ Step 1 ”中创建的 vboxnet0 名称

    第 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 创建永久 Internet 访问。当您配置您的 vpn killswitch 时,您必须通过编辑为您的 vpn 地址使用 ip 伪装/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

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

    第 6 步

    这是最后一步,也是迄今为止最复杂的一步。此时,要让您的 virtualbox Web 开发环境可供使用,唯一需要做的就是安装和配置 dnsmasq,以便可以在本地解析来自您的来宾服务器的域名。侧边栏dnsmasq 显然可以与上面提到的组合网络适配器方法一起使用,以消除使用/etc/hosts,但是当使用单个 host-only 适配器时,需要 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 public dns server ip for external internet)

      $ 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 和 network-manager

      $ sudo systemctl restart dnsmasq $ sudo systemctl restart network-manager

    3. 测试你的 dnsmasq 设置

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

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

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

    砰!完毕。

    使用此 Web 开发环境,您可以随意更改 wi-fi newtworks,而不会出现 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-互联网
    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

    • 3

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve