使用 WireGuard 时,我看不出是什么阻止我从远程站点 ping 本地计算机

使用 WireGuard 时,我看不出是什么阻止我从远程站点 ping 本地计算机

我的 WireGuard 设置存在缺陷,但我看不到它。任何有助于调试的建议都将不胜感激。

设置:本地 pi ( 192.168.1.2/24) 运行 WireGuard,位于 ISP 网关后面。远程 pi ( 192.168.2.1/24) 是网关/wifi ap,也运行 WireGuard。远程 Pi iptables 过滤器会暂时刷新。本地 pi 上未安装 iptables。

期望状态:LAN 到 LAN L3 桥接。

问题:我无法从远程网络上的任何计算机 ping 本地网络上的计算机。我可以从本地计算机 ping/ssh 到远程网络上的任何计算机。我可以从远程计算机 ping 到运行 Wireguard (ping 192.168.1.2有效 ) 的本地 pi,但不会超出其他本地机器的范围ping 192.168.1.180不起作用)。

更正:我总是可以从远程网络上的常规客户端 ping/ssh 到本地网络上的任何机器。只能从远程网络上 ping/ssh 到本地网络上除问题所在的192.168.2.1WireGuard 服务器之外的任何机器。192.168.1.2

似乎我在本地 pi 上遇到了路由问题。如能提供任何有关调试的指导,我将不胜感激。

dhcpcd.confinterfaces本地 pi 上有不是被触动了。

timemachine@pibackup4:/etc/wireguard $ ip route list
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.2 metric 202 
10.8.0.0/24 dev wglink2 proto kernel scope link src 10.8.0.1 
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.2 metric 202 
192.168.2.0/24 via 10.8.0.2 dev wglink2
timemachine@pibackup4:/etc/wireguard $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:03:fe:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 74276sec preferred_lft 63476sec
    inet6 fe80::f2a8:7662:6de:5b4e/64 scope link 
       valid_lft forever preferred_lft forever
10: wglink2: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.8.0.1/24 scope global wglink2
       valid_lft forever preferred_lft forever
timemachine@pibackup4:/etc/wireguard $ cat wglink2.conf
[Interface]
# LAN Address: 192.168.1.2/24
# Wireguard Address: 10.8.0.1
PrivateKey = xxxxxx
Address = 10.8.0.1/24
ListenPort = 51820

Table = off
PostUp = ip route add 192.168.2.0/24 via 10.8.0.2 dev wglink2
PreDown = ip route del 192.168.2.0/24 via 10.8.0.2 dev wglink2

[Peer]
# LAN Address: 192.168.2.1/24
# Wireguard Address: 10.8.0.2
PublicKey = xxxxxx
AllowedIPs = 10.8.0.2/32, 192.168.2.0/24
PersistentKeepalive = 25
timemachine@pibackup4:/etc/network $ sudo wg
interface: wglink2
  public key: xxxxxx
  private key: (hidden)
  listening port: 51820

peer: xxxxxx
  endpoint: 192.168.1.1:39915
  allowed ips: 10.8.0.2/32, 192.168.2.0/24
  latest handshake: 8 seconds ago
  transfer: 37.14 KiB received, 42.57 KiB sent
  persistent keepalive: every 25 seconds

答案1

如果您发现这个问题并且想知道发生了什么,请继续阅读。

远程 pi(网关、WiFi AP、WireGuard 客户端)上的路由表设置为将发往本地网络的任何内容传递到 IP 地址为 的192.168.1.0/24接口。因此,ICMP ping 数据包的源 IP 地址为。ICMP 数据包到达本地网络上的目标机器并发送回 的回复。但是,本地网络网关没有 的条目,因此它被发送到 ISP,从此再也没有收到过任何消息。wglink210.8.0.210.8.0.210.8.0.210.8.0.2

tcpdump从本地网络上的目标机器192.168.1.180查看来自远程 pi(网关、Wi-Fi AP、WireGuard 客户端)的 ping:

20:32:01.375555 IP (tos 0x0, ttl 63, id 64374, offset 0, flags [DF], proto ICMP (1), length 84)
    10.8.0.2 > 192.168.1.180: ICMP echo request, id 11, seq 1, length 64
20:32:01.375738 IP (tos 0x0, ttl 64, id 34197, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.1.180 > 10.8.0.2: ICMP echo reply, id 11, seq 1, length 64

tcpdump从本地网络上的目标计算机192.168.1.180查看来自远程网络上的常规客户端的 ping:

20:31:21.059165 IP (tos 0x0, ttl 62, id 11367, offset 0, flags [none], proto ICMP (1), length 44)
    192.168.2.163 > 192.168.1.180: ICMP echo request, id 56286, seq 38228, length 24
20:31:21.059294 IP (tos 0x0, ttl 64, id 41939, offset 0, flags [none], proto ICMP (1), length 44)
    192.168.1.180 > 192.168.2.163: ICMP echo reply, id 56286, seq 38228, length 24

一切都按预期进行,只是不像我预期的那样。

相关内容