使用 WireGuard 将公共传入流量路由到另一台服务器

使用 WireGuard 将公共传入流量路由到另一台服务器

有 2 台 Windows 服务器,Server-A 和 Server-B。Server
-A 通过 IP-1 和 IP-2 直接连接到互联网。Server
-B 通过 IP-3 连接到互联网,位于 NAT 路由器后面。

我想设置 WireGuard,将所有来自 IP-2 的服务器 A 的公共流量转发到服务器 B,由服务器 B 上的 IIS 处理。
来自 IP-1 的服务器 A 的公共流量应继续由服务器 A 上的 IIS 处理。

Server-A WireGuard 配置如下:

[Interface]
PrivateKey = ***
ListenPort = 51820
Address = 10.2.2.1/32

[Peer]
PublicKey = <Server-B-Public-Key>
AllowedIPs = <IP-2>/32

服务器 B WireGuard 配置如下:

[Interface]
PrivateKey = ***
Address = <IP-2>/32

[Peer]
PublicKey = <Server-A-Public-Key>
AllowedIPs = 10.2.2.1/32
Endpoint = <IP-1>:51820
PersistentKeepalive = 25

VPN 连接正常,我可以看到握手。
但是 IP-2 传入的流量继续由服务器 A 上的 IIS 处理,而不是由服务器 B 处理。

答案1

如果该地址需要路由到另一台主机,那么它也不能分配给该主机,因为这将优先于您的自定义路由。

因此,您需要从 Server-A 的网络接口取消分配地址,然后使用代理 ARP 使 Vultr 仍然向您发送该地址的流量(即响应未分配地址的 ARP 查询)。

但尽管功能在 Windows 中存在,我找不到它的任何 CLI 接口(显然它只用于内置 RAS VPN),我猜它仍然可以通过使用 P/Invoke 或从 C 程序通过 powershell 调用。Windows 也可能有第三方代理 ARP 工具;还没有寻找过。

(我建议使用 Linux 或 FreeBSD 作为你的“路由器”服务器——而不是 Windows。后者技术上能够进行 IP 路由,但在尝试执行超出内置 RAS 和 ICS 功能的操作时,功能严重缺乏。

或者,如果所有流量都基于 HTTP 或 HTTPS,您可以在服务器 A 上配置一个 Web 服务器作为“反向代理”,并在 HTTP 级别转发请求。IIS 和 Apache 都可以充当反向代理。

对于其他 TCP 流量,Windows 还内置了代理netsh portproxy,可转发 TCP 连接。使用此功能的缺点是您的服务器 B 将始终将服务器 A 视为所有连接的来源。

相关内容