更新
无论如何,如果有人偶然发现这篇文章。实际上,下面的解决方案确实有效,在没有任何反馈/建设性批评或错误识别的情况下对该问题投反对票似乎是不合理的。
目标
我需要最好的方法来设置 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 开发,这可以忽略不计。
该解决方案旨在使 ubuntu 开发人员的生活更加方便和安全。我希望管理员和/或其他人会看到合适的投票支持我原来的问题,因为对于想要使用 Ubuntu 进行 Web 开发的人来说,这是一个非常常见的问题。
无论如何,我最近有一个软件要求,即为具有 Internet 访问权限的 virtualbox 提供仅主机适配器。这意味着广泛使用的双适配器方法是不够的。在解决这个问题时,我基本上偶然发现了一个超级安全、超级方便、超级高效的 ubuntu/virtualbox 开发环境。我在下面发布了我的所有步骤,以帮助其他正在寻求更高效的 Web 开发环境的 Web 开发人员。
首先,快速概述:
桥接适配器和 NAT 适配器组合方法
优点:
缺点:
/etc/hosts
来解析本地域名(随着时间的推移变得很麻烦)NAT 适配器和仅主机适配器
优点:
缺点:
(在我的情况下,通过 virtualbox 首选项创建自定义 NAT 地址无济于事,因为我的软件仅安装在默认 NAT 地址上,而 NAT 地址不是可路由,主机可访问)
/etc/hosts
来解析本地域名(随着时间的推移变得很麻烦)最有效的解决方案:
具有 Internet 访问权限的单一主机适配器。
仅主机适配器 w。上网方式
优点:
/etc/hosts
使用缺点:
了解了以上内容,让我们开始吧:
我会假设:
步骤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 服务器,我正在使用:
记住
运行
#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
在文件的这一部分:
添加:
-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 来解析本地域名。禁用和停止 systemd 已解决
$ sudo systemctl disable systemd-resolved
$ sudo systemctl stop systemd-resolved
删除符号链接
/etc/resolv.conf
并删除文件$ ls -lh /etc/resolv.conf
$ sudo rm /etc/resolv.conf
创建一个新的 /
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'
安装 dnsmasq
$ sudo apt install dnsmasq
将 .test 添加到 dnsmasq 配置文件:
$ sudo bash -c 'echo "address=/.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
注意:开发需要通配符域解析的 wordpress 多站点的人们可以使用:
为访客的静态 IP 地址创建目录解析器:
$sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'
重启 dnsmasq 和 network-manager
$ sudo systemctl restart dnsmasq $ sudo systemctl restart network-manager
测试你的 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