我的公司网络中有 Wireguard 服务器。
我可以从互联网成功连接到它(使用端口发布)。
Wireguard 服务器有两个接口:
1: eth0: 192.168.30.100/24
2: wg0: 192.168.99.1/24
输出如下ip route
:
default via 192.168.30.1 dev eth0 proto static
192.168.30.0/24 dev eth0 proto kernel scope link src 192.168.30.100
192.168.99.0/24 dev wg0 proto kernel scope link src 192.168.99.1
这是 Wireguard 的服务器netplan
:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.30.100/24
gateway4: 192.168.30.1
Wireguard 客户端(Windows)具有拆分隧道设置,旨在通过 Wireguard 服务器访问公司网络,并通过常规网关访问其他所有内容。以下是 Wireguard 的客户端设置:
[Interface]
PrivateKey = ***
Address = 192.168.99.201/32
PostUp = powershell -command "$wgInterface = Get-NetAdapter -Name WG-server;
route add 0.0.0.0 mask 0.0.0.0 0.0.0.0 if $wgInterface.ifIndex metric 9999;
Set-NetIPInterface -InterfaceIndex $wgInterface.ifIndex -InterfaceMetric 9999;
route add 192.168.99.0/24 0.0.0.0 if $wgInterface.ifIndex;
route add 192.168.30.0/24 192.168.99.1 if $wgInterface.ifIndex;"
PreDown = powershell -command "$wgInterface = Get-NetAdapter -Name WG-server;
route delete 0.0.0.0 mask 0.0.0.0 0.0.0.0 if $wgInterface.ifIndex metric 9999;
Set-NetIPInterface -InterfaceIndex $wgInterface.ifIndex -InterfaceMetric 9999;
route delete 192.168.99.0/24 0.0.0.0 if $wgInterface.ifIndex;
route delete 192.168.30.0/24 192.168.99.1 if $wgInterface.ifIndex;"
Table = off
[Peer]
PublicKey = ***
AllowedIPs = 0.0.0.0/0
Endpoint = 37.228.89.163:4226
因此,之后我在我的 Wireguard 客户端(Windows)上得到了这样的路由表:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.124 55
0.0.0.0 0.0.0.0 On-link 192.168.99.201 19998
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.0.0 255.255.255.0 On-link 192.168.0.124 311
192.168.0.124 255.255.255.255 On-link 192.168.0.124 311
192.168.0.255 255.255.255.255 On-link 192.168.0.124 311
192.168.30.0 255.255.255.0 192.168.99.1 192.168.99.201 10000
192.168.99.0 255.255.255.0 On-link 192.168.99.201 10000
192.168.99.201 255.255.255.255 On-link 192.168.99.201 10255
192.168.99.255 255.255.255.255 On-link 192.168.99.201 10255
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.0.124 311
224.0.0.0 240.0.0.0 On-link 192.168.99.201 10255
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.0.124 311
255.255.255.255 255.255.255.255 On-link 192.168.99.201 10255
顺便说一下,这是客户端上的接口配置:
PS C:\Windows\system32> netsh interface ip show address
Configuration for interface "Wi-Fi"
DHCP enabled: Yes
IP Address: 192.168.0.124
Subnet Prefix: 192.168.0.0/24 (mask 255.255.255.0)
Default Gateway: 192.168.0.1
Gateway Metric: 0
InterfaceMetric: 55
Configuration for interface "WG-server"
DHCP enabled: No
IP Address: 192.168.99.201
Subnet Prefix: 192.168.99.201/32 (mask 255.255.255.255)
Default Gateway: 0.0.0.0
Gateway Metric: 9999
InterfaceMetric: 9999
因此...从 Wireguard 服务器我可以ping
:
192.168.30.1 - internal corporate gateway
192.168.30.99 - some internal corporate host
192.168.99.201 - wireguard client
从公司网关(ip = 192.168.30.1
),我可以 ping 通(使用静态路由到192.168.99.0/24
):
192.168.30.100 - wireguard eth0 interface (amazing, right? =))
192.168.99.1 - wireguard wg0 interface
但是我无法 ping 通192.168.99.201
——Wireguard 客户端。
另外,我可以从 Wireguarg 客户端 ping 通:
192.168.99.1 - wg server
192.168.30.100 - wg eth0 interface
但我无法 ping192.168.30.1
通公司网络中的任何其他主机。
似乎 Wireguard 服务器没有正确路由流量,或者是我在某个地方犯了错误。
这是你的一张照片) 网络设置
有任何想法吗?
答案1
解决方案非常简单。
不需要任何脚本来实现分割隧道。
1. 在 wg0.conf 中添加以下几行:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
2. 按照如下方式修改客户端 WG 配置:
[Peer]
AllowedIPs = 192.168.99.0/24, 192.168.30.0/24
net.ipv4.ip_forward = 1
3.在 WG 服务器上启用。
因此,我没有通过 WG 服务器访问互联网的路由,只有指定的网络。
以下是更多详细信息: https://iliasa.eu/wireguard-how-to-access-a-peers-local-network/
答案2
我完全不了解 wireguard,但常见的 VPN 设置允许使用 Add-VPNConnectionRoute 进行拆分隧道。你能检查一下吗?提前谢谢。=)