通过 vpn 的 virtualbox 来宾操作系统

ewo*_*wok 60 networking vpn virtualbox

我有一个 Oracle Linux 来宾在 Windows 7 主机上的 VirtualBox 中运行 Web 服务器。我需要设置网络,以便我可以做 3 件事:

  1. 主机可以通过浏览器和 ssh 连接到访客
  2. 来宾可以通过主机的 VPN 与内部网络上的其他服务器通话
  3. 客人可以访问外部互联网

我阅读了一些答案并尝试了一些配置,结果如下:

桥接

  1. 主人无法联系到客人
  2. 访客无法通过 VPN 看到
  3. 客人可以上网

网络地址转换

  1. 主人无法联系到客人
  2. 客人可以通过VPN看到
  3. 客人无法上网

仅限主机

所有 3 个条件都失败了。

NAT-网络

  1. 主人无法联系到客人
  2. 客人可以通过VPN看到
  3. 客人无法上网

我还应该指出,有时主机通过 VPN 连接,而有时它只是直接插入公司网络。直接插入时,桥接适配器满足所有 3 个条件。理想情况下,无论是 VPN 还是直接连接,都会有一个满足所有 3 个条件的配置。

Ben*_*son 80

我遇到了完全相同的问题,并且看到了解决方案,所以我很高兴详细解释问题和解决方案。

不涉及VPN

了解在涉及 VPN 的情况下满足您的要求所需的配置非常重要。此外,此信息假设主机和来宾上都没有软件防火墙干扰。

如果没有 VPN,这通常可以通过在虚拟机配置中创建两个网络适配器来解决。

第一个适配器必须设置为NAT模式,这使来宾可以通过主机的网络接口访问网络资源(包括 Internet)。

适配器 1:NAT

第二个适配器必须设置为Host-only,这将启用主机和来宾之间的双向通信。

这个适配器的设置比第一个稍微复杂,因为它需要修改 VirtualBox 的全局网络首选项以配置仅主机适配器(注意:这需要管理员权限)。

在 VirtualBox 中,转到File -> Preferences -> Network. 单击Host-only Networks选项卡并单击小+图标以添加新适配器。系统将提示您提升 VirtualBox 的权限。

必须填写该Adapter选项卡;它应该看起来像这样(忽略标记为 的适配器#2;它用于不相关的东西):

网络首选项 1

DHCP服务器选项卡上的值是可选的。如果您打算在来宾的网络配置中对此适配器的 IP 地址进行硬编码,则这些值是不必要的。另一方面,如果您打算使用 DHCP,则这些值可能如下所示:

网络首选项 2

关于配置 VirtualBox 的最后一步是返回到 VM 的网络配置并添加第二个适配器,它引用我们刚刚创建的仅主机适配器:

适配器 2:仅主机

现在,在客户操作系统中,网络必须配置为使用这两个网络接口。

在 Debian 或 Ubuntu GNU/Linux 上,配置就像修改/etc/network/interfaces成这样简单:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The secondary network interface
auto eth1
iface eth1 inet static
     address 192.168.56.101
     netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)

(纯粹主义者可能更喜欢使用/etc/network/interfaces.d目录,但这超出了本解释的范围)

重新启动来宾的网络服务,或者更简单地说,重新启动整个来宾 VM,一切都应该“正常工作”。

此时,应该能够 ping 来宾 VM192.168.56.101并收到回复(前提是软件防火墙不干扰)。

同样,应该能够在 ping 主机10.0.2.2。这个 IP 地址似乎被“硬编码”到 VirtualBox 的 NAT 实现中,或者至少是通过一些不明显的配置指令指定的,关于它的来源几乎没有可用的信息。但是,唉,“它只是有效”。

鉴于此配置,您的问题中列出的所有三个条件都得到满足。

输入:VPN

但是,问题来了。引入 VPN 会导致显示停止问题(好吧,取决于特定的 VPN 及其配置)。

现代 VPN 能够进行拆分隧道,这是上述 VirtualBox 配置根据您的三个要求运行所必需的。出于(好的)安全原因,拆分隧道通常被禁用,这正是您(和我的)情况的问题。

当您连接到 VPN 时,VPN 客户端(Cisco AnyConnect 安全移动客户端,3.1.02026,在我的例子中)检查主机的路由表,记住它们,然后用通常来自某些集中的值铺平它们-管理位置(即,即使具有本地管理员权限,也不可能覆盖设置)。

您可以通过打开command.exe(在 Windows 上)自行检查路由表:

C:\>route print
Run Code Online (Sandbox Code Playgroud)

在连接到 VPN 之前,路由表包含允许此 VirtualBox 配置正常运行的关键条目。连接到 VPN 会导致这些条目被删除,从而阻止主机和来宾之间的通信。

(还有许多其他条目,我在这里省略了,因为它们与此行为的根本原因无关。)

在连接到 VPN 之前:

     192.168.56.0    255.255.255.0         On-link      192.168.56.1    266
     192.168.56.1  255.255.255.255         On-link      192.168.56.1    266
   192.168.56.255  255.255.255.255         On-link      192.168.56.1    266
        224.0.0.0        240.0.0.0         On-link      192.168.56.1    266
  255.255.255.255  255.255.255.255         On-link      192.168.56.1    266
Run Code Online (Sandbox Code Playgroud)

连接到 VPN 后:

     192.168.56.1  255.255.255.255         On-link      192.168.56.1    266
        224.0.0.0        240.0.0.0         On-link      192.168.56.1    266
  255.255.255.255  255.255.255.255         On-link      192.168.56.1    266
Run Code Online (Sandbox Code Playgroud)

VPN 客户端删除以下行:

     192.168.56.0    255.255.255.0         On-link      192.168.56.1    266
   192.168.56.255  255.255.255.255         On-link      192.168.56.1    266
Run Code Online (Sandbox Code Playgroud)

如果没有最后两个条目,主机和来宾将无法通信,这正是在 VPN 配置中禁用拆分隧道时的预期行为。

通常,这两个命令会恢复这些路由:

C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
Run Code Online (Sandbox Code Playgroud)

但是 VPN 客户端仍然保持警惕:它会拦截修改路由表的尝试。我的客户似乎允许第二个条目,但不允许第一个条目。(并且它可能会定期为两者铺平道路;我没有对此进行测试。)

如果您的特定 VPN 及其随行配置允许启用拆分隧道,则它通常是这样开启的:

Cisco VPN 客户端:允许访问 LAN 资源

与 VPN 断开连接后,行为良好的 VPN 客户端将恢复连接前的路由表。我的 VPN 客户端似乎可靠地执行此操作,这是有益的,因为这意味着当我连接到 VPN 或断开连接时,不需要重新启动来宾 VM。在这种情况下,VM 的辅助适配器被重置,但它会自动且透明地重新获取其 IP 地址,几乎立即恢复主机和​​来宾之间的通信。更好的是,主机和来宾之间的 NFS 挂载(我使用的是 CIFS 挂载)在 VPN 连接/断开连接操作中保持连接。

万一您的 VPN 允许拆分隧道,启用它可能很简单,在这种情况下,我很想听听您是否“一切正常”。

  • 非常感谢您在这个答案(图片和所有)中所做的所有努力。对你的解释很有帮助! (6认同)
  • 仅供参考,我可以访问 AnyConnect 上的“允许本地 (LAN) 访问”功能,我可以确认勾选此复选框不会*阻止删除路由。 (3认同)