我需要配置一个 Linux 服务器(可能是 CentOS)来在线运行 Web 应用程序。
流程中的元素:
- mywebapp,可通过以下网址访问
https://mywebapp.example.org
- thirdpartwebserv,可通过 URL 访问
https://thirdpartwebserv.example.org
,并且必须通过 VPN 建立隧道 - 用户,典型的mywebapp用户,他的计算机上没有 VPN,但只能访问他的mywebapp帐户
- 操作 A查询thirdpartwebserv并请求 VPN
- 操作 B不需要 VPN 并且仅使用mywebapp功能
典型流程:
- 用户访问
https://mywebapp.example.org
- 用户执行操作B
- mywebapp处理操作 B
- 操作B的结果显示给用户。
- 用户执行另一个操作,这次是操作 A
- mywebapp通过 VPN与thirdpartwebserv通信,处理操作 A并返回结果
- 操作A的结果显示给用户。
我感兴趣的是让任何人都在mywebapp上拥有一个帐户,同时仍然保证与thirdpartwebserv进行通信的隧道。
我可以在mywebapp服务器上使用 OpenVPN与受 VPN 保护的thirdpartwebserv服务器通信并获得类似的基础设施吗?
VPN 的使用由thirdpartwebserv决定。
是的,可以。这是基本的 VPN 功能,OpenVPN、WireGuard 或我怀疑任何 VPN 都可实现此功能。
需要考虑的事项:
tun
模式 L3 隧道,因为它更高效(开销更少)tunX
。通常使用私有 RFC 1918 地址。为了保证通信通过 VPN 隧道进行,您的应用程序mywebapp必须使用隧道 IP 地址或通过隧道路由的地址。它可能不是您用于建立 VPN 的同一公共地址。Host
标头的标准 Web 服务器,也就是说,如果您使用点分四路 IP 地址与其通信,它可能无法正确响应。假设您知道在运行后端服务的thirdpartwebservthirdpartwebserv.example.org
的虚拟主机上配置的名称(例如,如问题中所示),您可能需要使用本地hosts
文件将该名称与隧道 IP 地址关联。您还可以将该隧道(私有)IP 地址以该名称发布到公共 DNS 中(我知道有些人会不同意我的观点,但我认为这没什么问题)。thirdpartwebserv.example.org
用于 VPN。如果内部 Web 服务器要为其虚拟主机使用相同的名称,则可能会发生冲突,VPN 客户端会尝试通过连接本身重新建立连接,这将导致一切失败。为了避免此类名称解析冲突,对于 VPN,请使用文字公共 IP 或thirdpartvpn.example.org
指向 VPN 对等方公共 IP 的其他主机名(如)。(如果您发布了私有地址,则这是不可能的。)