由于我在多个地点工作,因此我的开发服务器出现了问题。由于我在各种网络上工作,因此我不想每次更换网络时都配置虚拟机的网络设置。有时网络要求我使用 DHCP。(公共图书馆等)
另外,我必须经常更换网络适配器,我更喜欢以太网,但有时我必须使用无线工作。
因此存在很多不同的网络,甚至不同的适配器。
要求
- 网络连接
- 从客户机访问主机
- 从主机访问客户机
我正在寻找一种配置,这样我就不必更改我的(虚拟机)网络设置。因为我必须更改网络(适配器)
眼镜
主机:Ubuntu,Virtualbox 客户机:debian。无线接口:wlp2s0 eth 适配器:eth1
尝试 #1
只需使用 NAT。
- 向 Virtualbox 添加了 NAT 适配器:(10.0.2.0/24,已启用 DHCP)
- 向客户机添加了 NAT 适配器。
- 配置访客界面:
- 自动 eth1
- 允许热插拔 eth1
- iface eth1 inet 静态
- 地址 10.0.2.5
- 网络掩码 255.255.255.0
- 网关 10.0.2.2
- 网络 10.0.2.0
- 广播 10.0.2.255
通过此配置可以进行以下工作:
- 网络连接
- 从客户机访问主机
采用此配置,以下操作不起作用:
- 从主机访问客户机
这似乎是使用 NAT 时的一个限制。
尝试#2
NAT 与桥接连接结合:
- Virtualbox NAT 适配器(10.0.2.0/24,已启用 DHCP)
- Virtualbox 桥接适配器(192.168.56.1/24,已启用 DHCP)
因为有时我必须从无线切换到以太网,所以我还尝试为主机上的两个网络适配器配置桥接适配器。
主机IP:192.168.56.101 客户机IP:192.168.56.100
通过此配置,以下操作可以工作:
- 网络连接
- 从客户机访问主机
采用此配置,以下操作不起作用:
- 从主机访问客户机
此示例存在问题,因为对于桥接连接,主机 IP 必须设置在桥接适配器的 IP 范围内。有时我不能这样做,因为我需要使用 DHCP。
鉴于我尝试的细节,你们能建议我一种实现我的目标的替代配置吗?
答案1
几天前我还在为这个问题苦苦挣扎。要解决这个问题,一个简单的设置需要在客户机上使用两个适配器。
NAT:这将允许访客与外部网络进行通信,并且还客户机到主机。要查看用于与主机通信的 IP,请在客户机上的
ifconfig
/ipconfig
输出中查看主机的 IP。这是 NAT 网络的网关。这不会显示在ifconfig
主机上,因为 VirtualBox 为每个虚拟机创建了一个 NAT 网络。仅主机:这将允许主机和客户机之间进行通信。默认情况下,VirtualBox 使用 DHCP 分配客户机 IP,但您可以使用低于 192.168.56.100 的 IP 为客户机分配静态 IP
如果您有多个客户机并且想要在客户机之间进行通信,您还可以设置第三个可选内部适配器。这是我上周就此问题提出的问题:*编辑* 使 virtualbox 主机仅网络双向
答案2
好的,有两种方法可以做到这一点。
1) 在客户端上使用 VirtualBox NAT 网络。这不提供从主机直接路由,但您可以设置首选项以转发端口。设置起来有点麻烦,但如果主机是 Windows 或 Mac,我可能会这样做,主要是因为我不确定这些系统上的防火墙/natting/路由功能(很确定 Mac 不会有问题,但我不知道 Windows)
2) 使用 VirtualBox Host Only Network。根据您的描述,这可能更好。请注意,您需要更改防火墙脚本以指向所连接的任何设备……以下是详细信息。
在主机上,首先在 vbox 首选项中设置仅主机网络。在管理器中,单击文件,然后单击首选项,然后选择网络。切换到仅主机,然后根据需要添加一个。以下是我的网络:
接下来,在主机上配置 vboxnet0 接口。它会自动为我设置主机,将我的主机设置为子网中的 .1 地址。这是ifconfig
我的主机上的输出,引用了我的以太网和 vboxnet0 地址。
在您的客户机中,将网络设置为子网中的某个地址(即使启用了 DHCP 服务器,这也使得获取网关/dns 服务器变得更容易)并以通常的方式设置名称服务器(即,/etc/network/interfaces
在那里编辑和设置静态地址/网络掩码/网关,然后/etc/resolv.conf
在那里编辑和设置名称服务器)。
此时,您的主机和客户机应该能够毫无问题地相互通信。您可能希望输入适当的条目,/etc/hosts
这样您就不必到处输入 IP...
最后一步是让客户机上网。这很简单,只需将主机变成路由器即可。由于接口vboxnet0
直到 vbox 启动并运行后才会出现,因此您不想在主机启动时执行此操作。
一个简单的防火墙脚本,允许客户虚拟机访问世界,并且主机仍然可以访问世界和 vboxonly 网络中的客户机。 请注意,此脚本可能更加安全. 实际上,它会接受主机所连接的任何网络上的某些客户端,并使用您的主机作为客户虚拟机的网关。
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables=`which iptables`
$iptables -F
/sbin/iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
$iptables -A FORWARD -i enp2s0 -o vboxnet0 -j ACCEPT
$iptables -A FORWARD -i vboxnet0 -o enp2s0 -j ACCEPT
答案3
在 VirtualBox 版本 5 中,当您同时使用 NAT 和 Host-Only 时,会出现冲突。您将看到 VM 的 Host-Only 适配器没有由 DHCP 分配的 IP 地址。
有两种可能的解决方案:
- 安装最新版本的 VirtualBox
- 将 NAT 和 Host-Only 替换为单个“桥接”
参考 VirtualBox 文档第 6 章:
NAT
启用了 NAT 的虚拟机就像通过路由器连接到互联网的真实计算机一样。在这种情况下,路由器是 Oracle VM VirtualBox 网络引擎,它透明地映射来自虚拟机和到虚拟机的流量。
NAT 模式的缺点是,就像路由器后面的私有网络一样,虚拟机看不见、摸不到来自外部互联网。