我需要使用 A 作为代理来转发所有流量,但它的所有端口都已关闭。我有服务器 B,它可以访问所有端口。一般的想法是服务器 A 连接到服务器 B,然后服务器 B 使用 A 作为 VPN。使用服务器 B 作为代理肯定是可能的,但反过来也可以吗?
编辑:理想情况下,转发 UDP 和 TCP 流量,但只转发 TCP 也可以
答案1
代理很少以这种方式工作。(“反向代理”的意思有所不同。)
然而,VPN总是双向,因为它们携带独立数据包,而不是严格的请求/响应对。哪一方发起连接并不重要——重要的是哪一方配置了哪些路由。如果是客户端/服务器 VPN,那么服务器确实可以通过客户端拥有默认路由。(虽然在实践中配置起来可能很繁琐,根据所讨论的 VPN 软件会遇到一些问题,但原则上总是可行的。)
因此,如果你可以设置 WireGuard 隧道,那么大多只需假装“B 连接到 A”,除了 A 是具有 的一方之外Endpoint=B
。一旦隧道建立,无论哪一方发起它都无关紧要(WireGuard 甚至没有这种区别)。
OpenVPN 或 Tinc 在 L2(tap)模式下也应该可以工作,因为它的行为或多或少像以太网电缆(在 OpenVPN 的情况下,消除了许多客户端-服务器不平衡问题)并且您可以直接“通过”另一个对等点添加路由。
ZeroTier (L2) 或 Tailscale (L3) 等“辅助”网状 VPN 可能更容易,因为网状 VPN 软件本身可以在中央控制器的帮助下负责建立底层连接,无论节点位于何处。
(当然,仍然需要确保你不会意外地通过同一个 VPN 路由 VPN 数据包。我思考ZT 对此有保护,但ip rule
可能需要通过类似于 wg-quick 所做的策略路由。)
在后两者中,ZeroTier 也只是一个虚拟以太网;然而,Tailscale 可能是最简单的选择,因为它专门有这个功能——它允许选择任何节点作为“出口节点“。