另一个 Wireguard“已启动握手但无法访问互联网或 LAN”请求进行故障排除帮助

另一个 Wireguard“已启动握手但无法访问互联网或 LAN”请求进行故障排除帮助

我使用这个完全相同的配置工作了一年多,直到几周前我旅行时我的wireguard 连接突然停止工作。当我回到家时,我试图解决问题,但没有任何想法。

家庭服务器在 192.168.1.2 上运行,位于 Unifi USG 路由器后面。 51820/udp 端口​​已从 USG 正确转发到服务器。服务器上的 UFW 防火墙已禁用,但由于同一服务器上运行着各种 docker 容器,因此有大量 IP 表规则处于活动状态。不幸的是,我无法弄清楚 IP 表规则。

wg0.conf:

[Interface]
# wg0
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = [redacted]

# PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
# PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp4s0 -j MASQUERADE
# These rules should NOT be necessary according to Arch Wiki and other places I have read since the wireguard "server" sits behind NAT home router. Regardless, it doesn't work with or without these iptables rules uncommented.

[Peer]
# iphone
PublicKey = [redacted]
AllowedIPs = 10.0.0.2/32

iPhone.conf:

[Interface]
Address = 10.0.0.2/32
PrivateKey = [redacted]
DNS = 192.168.1.1 #address of my USG router serving dns. Have also tried public DNS like 1.1.1.1 with no luck

[Peer]
PublicKey = [redacted]
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = vpn.mydomain.dev:51820 # DNS records set correctly via cloudflare (no proxying) and I know this works because I can get a handshake with the server, just no internet or LAN access.
PersistentKeepalive = 25

启用 ipv4 转发:

[email protected]: ~ ➜  cat /proc/sys/net/ipv4/ip_forward

1

在 192.168.1.2 服务器上禁用 ipv6:

[email protected]: ~ ➜  sudo sysctl -p /etc/sysctl.d/ipv6.conf

net.ipv6.conf.enp4s0.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

请让我知道我还可以在哪里进行故障排除。提前谢谢了!

编辑 - 自原始帖子以来尝试了其他故障排除步骤但未成功 -

我完全停止了所有 docker 容器,然后停止了 docker 服务本身,然后刷新了所有 iptables 规则,同时仍然确保接受所有转发的数据包:

#!/bin/sh
ipt="/sbin/iptables"

$ipt -P INPUT ACCEPT 
$ipt -P FORWARD ACCEPT 
$ipt -P OUTPUT ACCEPT 
$ipt -F 
$ipt -X 
$ipt -t nat -F 
$ipt -t nat -X 
$ipt -t mangle -F 
$ipt -t mangle -X 
$ipt -t raw -F 
$ipt -t raw -X

刷新后检查 IPv4 iptables:

sudo iptables -L -v -n

Chain INPUT (policy ACCEPT 3111 packets, 355K bytes)

pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 2087 packets, 156K bytes) pkts bytes target prot opt in out source destination

然后尝试了wireguard隧道,情况仍然相同——握手,但没有互联网或局域网连接。

答案1

握手有效并且字节被传输(PersistentKeepalive = 25在配置中)。但连接会默默失败,并且您尝试通过连接发送的任何内容都会超时。

如果这是你的问题,那么问题就很严重了重要的是要意识到当两个对等点之间的 Address/AllowedIPs 或 PrivateKey/PublicKey 配置不匹配时,连接确实会简单地超时,即使握手仍然可以工作(根据wg show)。

通过以下方式修复问题:

  • 确保A的Interface-section的条目在B的Peer-section的条目Address范围内。AllowedIPs
  • 确保与B 的对等部分的条目wg pubkey <<<"<PrivateKey of A's Interface-section"匹配。PublicKey

反之亦然(交换 A 和 B)。

然后,您必须使用以下命令重置两个对等点上的接口(其中 wg0 是您的接口的名称):

wg-quick down wg0
wg-quick up wg0

请注意,如果您更改了,这wg syncconf wg0 <(wg-quick strip wg0)还不够Address


根据您的具体情况,您可以更改Address = 10.0.0.1/24Address = 10.0.0.1/32或 简单地Address = 10.0.0.1。我认为您不应该在条目中设置 IP 范围Address,该范围仅适用于 AllowedIPs 以允许多个 IP 地址。

相关内容