我想使用 IP 转发在 Windows 10 中设置 WireGuard。
我有一个 Windows 10 节点(“服务器”),它连接到两个 LAN(通过两个接口)。
- LAN 1:10.0.0.0/24(公共、可路由,但出于隐私原因,此处声明为 RFC1918)
- LAN 2:172.16.0.0/23
我想允许 LAN 1 中的其他节点访问 LAN 2。为此,我按如下方式设置了 WireGuard:
# Server config
[Interface]
PrivateKey = ...
ListenPort = 55357
Address = 192.168.35.1/24
[Peer]
PublicKey = ...
PresharedKey = ...
AllowedIPs = 192.168.35.7/32
我的(Windows 10)测试客户端的配置文件是:
# Testing client config
[Interface]
PrivateKey = ...
ListenPort = 55357
Address = 192.168.35.7/24
[Peer]
PublicKey = ...
PresharedKey = ...
AllowedIPs = 192.168.35.1/32, 172.16.0.0/23
Endpoint = server.example.com:55357
当我启动隧道两端时,它们连接成功。我可以从两端 ping 隧道内部 IP 地址。
在客户端,AFAICS,route print 产生所需的路线:
[...]
Network Destination Netmask Gateway Interface Metric
[...]
172.16.0.0 255.255.254.0 On-link 192.168.35.7 5
172.16.1.255 255.255.255.255 On-link 192.168.35.7 261
192.168.35.0 255.255.255.0 On-link 192.168.35.7 261
192.168.35.1 255.255.255.255 On-link 192.168.35.7 5
192.168.35.7 255.255.255.255 On-link 192.168.35.7 261
192.168.35.255 255.255.255.255 On-link 192.168.35.7 261
[...]
在服务器上,我按照这个 ServerFault 问题因此我的接口列表如下所示:
Get-NetIPInterface|select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table
ifIndex InterfaceAlias AddressFamily ConnectionState Forwarding
------- -------------- ------------- --------------- ----------
1 Loopback Pseudo-Interface 1 IPv6 Connected Disabled
1 Loopback Pseudo-Interface 1 IPv4 Connected Disabled
4 LAN 2 IPv4 Connected Enabled
15 LAN 1 IPv4 Connected Disabled
21 VPN_Adapter IPv6 Connected Enabled
21 VPN_Adapter IPv4 Connected Enabled
设置转发后,我还可以从客户端成功 ping 通 LAN 2 中的服务器自己的地址,但无法访问 LAN 2 中的任何其他节点。
在服务器上,Windows 防火墙在 LAN 2 上启用,但在 LAN 1 上禁用(管理决定超出了我的职权范围)。
我还需要配置什么以便 LAN 1 中的节点可以通过隧道到达 LAN 2?
答案1
事实证明,在两个接口上启用转发需要使用
Set-NetIPInterface -ifindex <interface index> -Forwarding Enabled
从上述文章足够了,因为我可以使用出色的 Wireshark 找到答案。我搞乱了 AllowedIPs 设置,导致一个方向的数据包被 WireGuard 丢弃。(子网 172.16.0.0/20 而不是 /23)