有 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 视为所有连接的来源。