通过 Virtualbox Guest VM 连接到互联网

通过 Virtualbox Guest VM 连接到互联网

我有一个 Virtualbox 客户 Ubuntu VM,我需要通过仅安装在客户 VM 上的客户端将我的主机连接到 VPN,因此为了让主机连接到互联网,我需要通过客户机,以便主机连接到 VPN。

这可能吗?如果可以,您能告诉我具体步骤吗?

谢谢

答案1

这也许是可能的,但这并不是一项简单的任务。

可能存在的问题

  1. 用于客户端访问的VPN连接通常只为客户端提供一个IP地址,无法通过该IP地址在客户端直接共享对其他网络节点或整个网络的访问。
  2. 在主机-虚拟机配置中,当 VPN 隧道终止于主机时,可以轻松共享 VPN 访问。VM 通过 NAT 连接连接到主机,从而连接到 VPN。但在反向配置中,这很困难。

互连设计(未经测试,无保修)

  1. 使用桥接连接(而不是 NAT)将虚拟机连接到网络。虚拟机必须获取与主机 IP 地址不同的单独 IP 地址。
  2. 使用另一个隔离网络类型的网络接口将主机和虚拟机相互连接。虚拟机将有两个接口,一个向外,用于 VPN,另一个仅用于将虚拟机连接到主机。
  3. 在虚拟机中设置伪装,以便主机的 IP 地址(C) 在隔离网络中被隐藏,这样主机就可以通过隔离网络,通过使用 NAT 的 VM 访问所选的外部地址。在这种情况下,VM 的桥接接口用于转到外部地址。
  4. 要测试主机通过 VM 和 NAT 访问公网地址,请修改主持人。添加静态路由:
    sudo ip route add <ext_IP_addr> via <isolated_net_VM_IP_addr>
    其中:
    <ext_IP_addr>例如 Google Web IP 地址 142.251.36.100(或任何其他实时 Web 地址)是
    <isolated_net_VM_IP_addr>主机和 VM 之间隔离网络中 VM 的真实 IP 地址。地址如图。
  5. 所选的外部网站地址() 现在应该可以通过虚拟机从主机访问了。所有其他站点都应该可以直接从主机访问,无需虚拟机的参与。
  6. 向主机添加另一条路由。其目标网络是隧道后面的远程 VPN 网络的地址。网关(通过地址)将再次是地址,见图。
    sudo ip route add <ext_VPN_net> via <isolated_net_VM_IP_addr>
  7. 从虚拟机激活 VPN 隧道,并先从虚拟机测试目标 VPN 的可用性,然后从主机测试。如果路由不起作用,请检查主机中路由的度量。新添加的路由应具有比其他路由更好的度量,否则将不适用。显示路由的命令:ip route

在此处输入图片描述

答案编辑

  • 任何常见的虚拟化平台都应该允许创建至少 3 种基本类型的客户网络连接:NAT、桥接、隔离。接口处于隔离网络、接口处于桥接网络。
  • 必须在客户操作系统内部设置客户 NAT/伪装,例如使用iptables,而不是通过选择主机网络连接类型 NAT。
  • 必须在客户机中启用 IP 路由。如果不启用此功能,任何通过客户机的数据包传输都将无法进行。

访客 IP 路由检查并启用

检查

sysctl net.ipv4.conf.all.forwarding
cat /proc/sys/net/ipv4/ip_forward

促成

vi  /etc/sysctl.conf

添加以下行:

net.ipv4.conf.all.forwarding=1

重新启动并重新检查。

NAT/伪装设置

抱歉,我没有测试描述的配置,这只是示例。

使用的网络示例

  • 接口IP地址为10.2.2.1/24。
  • 接口IP地址为192.168.1.50/24。

地址转换有多种变体,您需要根据具体情况选择正确的一种。

源 NAT (SNAT)

适用于地址固定,手动设置。

iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -j SNAT --to-source 192.168.1.50

化装舞会

适用于地址是动态分配的,例如使用 DHCP。

iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -j MASQUERADE

最后的任务

在验证配置有效后,必须将其保存为持久配置。这也适用于静态路由(上述步骤 4 和 6)和启用路由。保存方法取决于所用防火墙管理的类型。

查看如何在旧版本的 Linux(没有 UFW)中执行此操作的示例:

具有 UFW 防火墙管理的较新的 Ubuntu:

该示例还描述了如何使用 UFW 启用路由。查看包含以下内容的行net/ipv4/ip_forward=1及其注释。

相关内容