无法访问 wireguard 后面的服务器

无法访问 wireguard 后面的服务器

我在 hetzner 上运行一个虚拟机(下图中名为网关),用作 wireguard 服务器。我通过 wireguard 将公共 IPv6 地址分发给客户端。可以从其他所有系统 ping 所有系统。我可以从 VPN 外部 ssh 到网关和服务器,但是我无法从服务器 ssh 到网关(或反之亦然),也无法访问服务器上除 ssh 之外的任何其他服务。我不确定这是两个独立的问题还是只是一个问题,我也不确定如何进一步调试此问题。tcpdump -i wg0 tcp port 22显示在我尝试 ssh 时收到了包,但客户端超时。

 ┌────────────┐
 │            │  ssh server       ✓
 │  Macbook   │  ssh gateway      ✓
 │            │  wget server      ✕
 └─────┬──────┘  
 ┌─────┴──────┐
 │            │
 │   Router   │
 │            │
 └─────┬──────┘
       │ public IPv6, CGNAT IPv4
┌──────┴─────┐
│            │       ┌────────────┐             ┌─────────────┐
│            │       │            │  Wireguard  │             │
│  Internet  ├───────┤  Gateway   ├─────────────┤   Server    │
│            │       │            │ public IPv6 │             │
│            │       └────────────┘             └─────────────┘
└────────────┘        ssh server  ✕             ssh gateway   ✕
                      ping server ✓             ping gateway  ✓

服务器上已禁用 ufw。网关配置如下

# ufw status
Status: active

To                         Action      From
--                         ------      ----
51820/udp                  ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
53/tcp                     ALLOW       Anywhere                   # Open port DNS tcp port 53
53/udp                     ALLOW       Anywhere                   # Open port DNS udp port 53
Lighttpd Full              DENY        Anywhere                  
Anywhere on wg0            ALLOW       Anywhere                  
51820/udp (v6)             ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
53/tcp (v6)                ALLOW       Anywhere (v6)              # Open port DNS tcp port 53
53/udp (v6)                ALLOW       Anywhere (v6)              # Open port DNS udp port 53
Lighttpd Full (v6)         DENY        Anywhere (v6)             
Anywhere (v6) on wg0       ALLOW       Anywhere (v6)             

Anywhere on eth0           ALLOW FWD   Anywhere on wg0           
Anywhere on wg0            ALLOW FWD   Anywhere on eth0          
Anywhere (v6) on eth0      ALLOW FWD   Anywhere (v6) on wg0      
Anywhere (v6) on wg0       ALLOW FWD   Anywhere (v6) on eth0     

答案1

我通过启用 wireguard 模块的调试日志,echo module wireguard +p | sudo tee /sys/kernel/debug/dynamic_debug/control然后检查,解决了这个问题dmesg。事实证明,到服务器的 wireguard 隧道经常失败。我通过将服务器上的端点地址更改为使用 IPv6 连接来修复此问题。我只能推测为什么这似乎解决了这个问题,但由于我花了几天时间才弄清楚,我想我将来可能会帮助别人。

相关内容