无法访问 Wireguard VPN 服务器后面的网络。客户端上的 Split-tunneligt 配置

无法访问 Wireguard VPN 服务器后面的网络。客户端上的 Split-tunneligt 配置

我的公司网络中有 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 = 13.在 WG 服务器上启用。

因此,我没有通过 WG 服务器访问互联网的路由,只有指定的网络。

以下是更多详细信息: https://iliasa.eu/wireguard-how-to-access-a-peers-local-network/

答案2

我完全不了解 wireguard,但常见的 VPN 设置允许使用 Add-VPNConnectionRoute 进行拆分隧道。你能检查一下吗?提前谢谢。=)

相关内容