如何通过主机上运行的 VPN 服务器独占访问虚拟机上本地运行的 Web 应用程序?

如何通过主机上运行的 VPN 服务器独占访问虚拟机上本地运行的 Web 应用程序?

我知道这个问题很模糊,而且我在网络方面还是个新手,所以让我给你提供所有细节:

我当前的设置如下:
A)运行 Windows 10 的物理服务器,以下称为主机
B)运行 Ubuntu 18.04 的 Hyper-V 下的虚拟机
C)部署在 Ubuntu 18.04 VM 上的 Web 应用程序、ERP(Odoo)
D)在主机(A,上方)上运行的 Softether VPN 服务器
E)Linksys 调制解调器/路由器直接连接到 ISP,由 ISP 分配一个私有 IP(192.168.1.1)并在所有连接的设备之间分配连接,从而创建本地网络

当前设置功能齐全,我可以通过键入虚拟机(上文中的 B)的 IP 地址并指定指定端口,在主机的浏览器中访问 Web 应用程序(上文中的 C)。所以这里没有问题。

我选择在本地网络上测试 VPN 隧道,因此当主机(上文中的 A)连接到本地网络时,我能够在本地网络上的任何其他设备上通过 VPN 访问它。所以这里也没有问题。

但是,一旦物理服务器连接到本地网络(通过 LAN 直接连接到路由器,或通过 wifi),路由器(上面的 E)就会为其分配一个私有 IP 地址(192.168.1.33),并且可以理解的是,虚拟机也会由同一个路由器分配一个 IP 地址,就好像它是连接到本地网络的唯一设备一样(因此为 192.168.1.34)。

我在 Hyper-V 中创建了一个虚拟交换机,绑定到主机的硬件网络适配器,以便虚拟机可以访问 Internet。

问题是,我显然能够在没有任何安全性的情况下在任何连接到本地网络的设备上连接到 Web 应用程序,只需输入 VM 的 IP 地址和指定端口,无论该设备是否通过 VPN 连接到主机。

我的目标是,当且仅当我通过 VPN 连接到主机时,才能访问 Web 应用程序。换句话说,我如何才能使虚拟机成为主机上子网的一部分?

感谢您的帮助,我为技术术语的误用提前道歉。

附言:我可以提供更多信息,只是不知道你需要什么才能提供帮助

答案1

这需要一个更像商业网络的网络。您需要一个单独的 LAN,供您的 VPN 用户接入。您可能希望为您的托管服务使用第三个 LAN,即“非军事区”或 DMZ。然后,您将在这三个网络之间放置防火墙来过滤流量。这根本不简单,对于网络新手来说可能太难了,但我感觉您正在接受冒险。

我无法真正为您提供逐步的答案,但以下是一些一般性指示。

首先在主机上创建两个未连接到 LAN 的额外网桥。这些网桥应仅将各种 VM 桥接在一起。您需要一个新的 VM、一个路由器设备(如 VYOS 或 pfsense)来在这些网络上提供 DHCP、网关和防火墙服务。您现在有三个 LAN:一个用于家中的 PC,一个用于 VPN 客户端,一个用于托管应用程序。这些都需要自己的子网。192.168.1.0/24 是您的家庭,192.168.2.0/24 可能是您的 VPN 区域,192.168.3.0/24 可能是您的 DMZ。您需要为家庭网络上的虚拟路由器设置静态 IP 地址,例如 192.168.1.2。您还需要在虚拟路由器上为后两个网络设置 DHCP 服务器。您现在有三个 LAN,但它们是完全隔离的。没有人可以与其 LAN 之外的任何人交谈。

您需要设置路由配置,以允许每个人跨 LAN 与其他人通信。首先,您的 ISP 路由器需要知道您的网络内有两个 LAN。这些称为“静态路由”,基本上,您是在告诉 ISP 路由器,为了到达 192.168.1.0/24 和 192.168.2.0/24,它需要与虚拟路由器通信。由于您的虚拟路由器位于所有三个网络上,因此它将自动知道如何在所有网络上进行通信,但它需要知道如何访问互联网。这是另一个静态路由,表示“0.0.0.0/0”(整个互联网)通过 192.168.1.1 连接。完成此操作后,您网络上的每台 PC 都应该能够 ping 通其他每台 PC。例如,当您家庭网络中的 PC 尝试访问通过 VPN 连接的 PC 时,它们会转到其网关,即 ISP 路由器,后者会将流量重定向到虚拟路由器。然后,虚拟路由器将流量重定向到 VPN 桥接器,您的 VPN 设备会将其传递到正确的 VPN 隧道。这很好,但我们还没有完成您最初要求的事情。每个人仍然可以与 Web 服务器通信。

最后,您需要制定防火墙规则来限制哪些类型的流量可以从 LAN 流向 LAN。在这里,您需要制定规则,例如,除非他们在 VPN 网络上使用端口 80/443 与 Web 服务器通信,或者他们在家庭网络上使用端口 22 通过 ssh 进入 Web 服务器,否则任何人都不能访问 DMZ。

虽然需要做很多工作,但这是获得目标的正确方法。

相关内容