如何从外部wireguard 客户端通过wireguard 的服务器 ping ISP 路由器?

如何从外部wireguard 客户端通过wireguard 的服务器 ping ISP 路由器?

鉴于此设置:

2.2.2.2: name: client
         WireGuard address: 10.0.0.2
    ^
    |
<internet>
    |
    v
1.1.1.1: name: gw (ISP router)
         LAN address: 192.168.1.1
    ^
    |
    v
192.168.3.1: name: wg (br-lan)
             WireGuard server
             WireGuard address: 10.0.0.3 (wg0)
             WAN address: 192.168.1.3 (wan)

客户端(2.2.2.2)可以 ping 通所有 wg 的地址(10.0.0.3、192.168.3.1 和 192.168.1.3),但无法 ping 通 gw 的 lan 地址(192.168.1.1)。

ip route显示:

default via 192.168.1.1 dev wan src 192.168.1.3 metric 1024
10.0.0.0/24 dev wg0 scope link src 10.0.0.3
10.0.0.2 dev wg0 scope link
192.168.1.0/24 dev wan scope link metric 1024 
192.168.3.0/24 dev br-lan scope link src 192.168.3.1 

根据其他答案,在 wg (192.168.3.1) 上我尝试过

ip route add 192.168.1.0/24 via 10.0.0.3 dev wg0

当这不起作用时,我删除了路由,重新启动网络,然后尝试

ip route add 192.168.1.0/24 via 192.168.1.3 dev wan

当这不起作用时,我删除了路由,重新启动网络,然后尝试

ip route add 192.168.1.0/24 via 192.168.1.1 dev wan

但没有运气。有什么想法我做错了吗?

PS cat /proc/sys/net/ipv4/ip_forward 显示“1”

答案1

你看起来是什么样子AllowedIPswg.conf

如果您想访问两个网络,它应该如下所示:

AllowedIPs = 10.0.0.2/32, 192.168.1.0/24

然后在 WireGuard 服务器上,除了您还需要在和ip_forward之间设置 Masquerade 和转发:wanwg

iptables -t nat -A POSTROUTING -o wan -j MASQUERADE

这样防火墙就知道将这些数据包转发到哪里。

例子:

10.10.4.10 - Wireguard Client -> <Internet> -> 10.10.4.1 - Wireguard Server ->
10.10.4.3 - RPI2 at Home acting as a Gateway for VPN -> Hosts in Local Network 

我希望能够192.168.1.1从 WireGuard ping 我的(家庭路由器),因此需要执行以下步骤:

在 WireGuard 服务器上:

  1. 10.10.4.3将(RPI) 允许的 IP 更改为:
    AllowedIPs = 10.10.4.3/32, 192.168.1.0/24
    
  2. 添加192.168.1.0/24通过RPI访问的路由规则:
    ip route add 192.168.1.0/24 via 10.10.4.3 dev wg0
    
  3. 重新启动 WireGuard:
    wg setconf wg0 /etc/wireguard/wg0.conf
    
  4. 允许网络之间转发
    iptables -A FORWARD -s 10.10.4.0/24 -d 192.168.1.0/24 -i wg0 -o wg0 -j ACCEPT
    iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.4.0/24 -i wg0 -o wg0 -j ACCEPT
    
  5. 确保已ip_forward启用:
    # cat /proc/sys/net/ipv4/ip_forward
    1
    
  6. 启用伪装
    iptables -t nat -A POSTROUTING -s 10.10.4.0/24 -o eth0 -j MASQUERADE
    

在 Raspberry PI(VPN 网关)上

  1. 使能够ip_forward
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. 启用伪装
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
  3. 启用网络之间的 IP 转发
    iptables -A FORWARD -s 10.10.4.0/24 -d 192.168.1.0/24 -i wg1 -o eth0 -j ACCEPT
    iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.4.0/24 -i eth0 -o wg1 -j ACCEPT
    

结果(在我的电脑上):

$ ping -I wg1 -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) from 10.10.4.10 wg1: 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=62 time=75.5 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=62 time=76.1 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=62 time=74.8 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=62 time=75.5 ms

--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 74.802/75.475/76.082/0.454 ms

$ ping -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.251 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.204 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.211 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.210 ms

--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3074ms
rtt min/avg/max/mdev = 0.204/0.219/0.251/0.018 ms

我的设置有点复杂,因此在您的情况下,您不必在 WireGuard 服务器上添加路由规则,但您绝对应该确保:

  1. 防火墙规则允许转发
  2. MASQUERADE 由防火墙规则启用
  3. 客户端配置中允许的 IP 允许访问您的本地网络
  4. 尝试从 WireGuard 客户端对网络中的其他主机执行 ping 操作,以消除路由器阻止来自 wg 客户端的 ping 操作的可能性。

相关内容