AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1281745
Accepted
codeling
codeling
Asked: 2020-10-11 12:36:09 +0800 CST2020-10-11 12:36:09 +0800 CST 2020-10-11 12:36:09 +0800 CST

无法让wireguard客户端在Ubuntu 20.04上工作

  • 772

我已经设置了一个运行良好的 WireGuard 服务器:我可以成功地将 Android 手机连接到它,也可以连接到运行 Windows 的笔记本电脑上的客户端。但是,我无法在同一台笔记本电脑上安装 Ubuntu 20.04 进行连接(具有讽刺意味的是,wireguard 服务器也在 Ubuntu 20.04 下运行)。

如果它有任何重要性,Ubuntu 已经从 18.04 升级,我也尝试在那里运行wireguard(虽然我不记得是否成功)。与此同时,我已经清除了wireguard,确保删除了ppa,并从“官方”存储库重新安装。我还尝试了 network-manager-wireguard(使用此处描述的 apt 源),而不是通过 /etc/wireguard 手动配置,结果没有变化。

我的客户端配置是(/etc/wireguard/wg0.conf):

[Interface]
PrivateKey = clientprivatekey
Address = 192.168.1.3/32
ListenPort = clientport
DNS = ip-of-DNS-in-destination-network

[Peer]
PublicKey = serverpublickey
PresharedKey = presharedkey
Endpoint = fully.qualified.domain.server.name:serverport
AllowedIPs = 0.0.0.0/0

服务器上相应的对等部分也存在:

[Interface]
Address = 192.168.1.1/24
SaveConfig = false
PrivateKey = serverprivatekey
ListenPort = serverport

[Peer]
PublicKey = clientpublickey
PresharedKey = presharedkey
AllowedIPs = 192.168.1.3/32

UFW 设置为允许正确端口上的 UDP 流量(ListenPort如上),但我也尝试在客户端上完全禁用 UFW 以排除它的任何干扰。

通过 连接时sudo wg-quick up wg0,sudo wg show显示:

$ sudo wg
interface: wg0
  public key: clientpublickey
  private key: (hidden)
  listening port: clientport
  fwmark: 0xca6c

peer: serverpublickey
  preshared key: (hidden)
  endpoint: serverip:serverport
  allowed ips: 0.0.0.0/0
  transfer: 0 B received, 148 B sent

所以,它似乎是连接的;但它从未收到任何东西。服务器上的相同命令显示尚未发生握手(因此从服务器端看起来客户端从未连接过)。

我也尝试过使用该network-manager-wireguard插件,它还显示一条消息说连接“成功”,但输出wg保持不变。

所以似乎有些东西阻止了 WireGuard 流量,但我不知道是什么,也不知道如何调试。客户端似乎认为它已连接,但它没有到达服务器?可能我错过了一些非常简单的东西,但我完全被卡住了;在此先感谢您的帮助!

编辑:$ wg-quick up wg0客户端的输出:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.1.3/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

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: enp2s0: <NO-CARRIER,...
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether MAC brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.142/24 brd 192.168.0.255 scope global dynamic noprefixroute enp3s0
       valid_lft 769974sec preferred_lft 769974sec
    inet6 ...
12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 192.168.1.1/24 scope global wg0
       valid_lft forever preferred_lft forever

客户:

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: wlp59s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN  ...
4: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether MAC brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.67/24 brd 192.168.42.255 scope global dynamic noprefixroute usb0
       valid_lft 3301sec preferred_lft 3301sec
    inet6 ...
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 192.168.1.3/24 scope global wg0
       valid_lft forever preferred_lft forever

route -n当 wg0 在两端都打开时,笔记本电脑的输出:

Kernel IP routing table
0.0.0.0         192.168.42.129  0.0.0.0         UG    100    0        0 usb0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 usb0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wg0
192.168.42.0    0.0.0.0         255.255.255.0   U     100    0        0 usb0

(请注意,我更改了互联网连接 - 我之前通过 WiFi 尝试过,因为我现在在家我尝试通过 USB 绑定到我的手机,因此 usb0 地址获取 192.168.42... 地址)。

ping 192.168.1.1 当 wg0 在两端都打开时,笔记本电脑的输出:

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8185ms

traceroute 1.1.1.1当 wg0 在两端都打开时,笔记本电脑的输出:

traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 ... (you get the gist)

当wg0traceroute 1.1.1.1在笔记本电脑上关闭时,笔记本电脑的输出:

traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  _gateway (192.168.43.1)  4.736 ms  4.858 ms  5.571 ms
 2  * * *
 3  10.15.19.26 (10.15.19.26)  103.204 ms  103.372 ms  103.038 ms
 4  * * *
 5  185099072070.public.t-mobile.at (185.99.72.70)  103.646 ms  103.488 ms  103.795 ms
 6  vix.as13335.net (193.203.0.195)  103.900 ms  40.076 ms  40.039 ms
 7  one.one.one.one (1.1.1.1)  28.038 ms  32.379 ms  32.238 ms

(请注意,这是通过移动热点连接时的不同情况,因此子网的差异(上面的 192.168.42.x 与 192.168.43。这里)

所以我现在非常确定 Ubuntu 客户端上的某些东西正在阻止wireguard 流量流出。但它可能是什么?我目前对可能出问题的怀疑包括

  • 保护机制正在干扰(但它必须在客户端,因为与同一服务器的其他连接正常工作) - 例如 AppArmor/... 或 ufw 以外的某些防火墙(即,即使 ufw 被禁用,它也处于活动状态)
  • 一些路由问题(路由应该由wireguard自动设置,对吗?我该如何检查?)
  • wireguard/wg-quick 和 Ubuntu 20.04 的一些不兼容

我可以检查问题的任何特定日志吗?

更多编辑:我现在尝试通过服务器/客户端通信nc(如下面的@FedonKadifeli 推荐的那样;我看到了Test Message服务器端的 - 所以这绝对是一个wireguard问题。我现在如何调试wireguard连接尝试?

刚刚在 VirtualBox 上尝试了一个新的 Ubuntu 20.04(如答案中所建议的那样) - 在最初能够重现该问题之后(当我忘记重新启动服务器时),我可以获得连接。这使我走上了解决方案的正确轨道-见下文!

networking vpn wireguard
  • 3 3 个回答
  • 13063 Views

3 个回答

  • Voted
  1. FedKad
    2020-10-12T00:44:19+08:002020-10-12T00:44:19+08:00

    您应该做的第一件事是检查 WireGuard 服务器和客户端之间的连接:

    • 放下两侧的 WireGuard。
    • 在服务器上运行:nc -lu serverport其中serverport 是您在 WireGuard 中使用的 UDP 端口。
    • 在客户端运行:echo Test message | nc -4u -w1 fully.qualified.domain.server.name serverport
    • 客户端发送的测试消息应该显示在服务器的终端上。

    假设客户端可以访问服务器端口,您可以继续测试 WireGuard 。


    在服务器配置[Peer]部分

    AllowedIPs = 192.168.1.3/32
    

    是正确的。但是,在客户端配置[Interface]部分中,您应该输入

    Address = 192.168.1.3/24
    

    或与服务器配置部分/24中给出的相同的掩码值(而不是)。[Interface]请检查服务器配置[Interface]部分并确定您在该Address行中使用的网络掩码值。如果是/24,那么我给出的上述值应该输入到客户端配置中。


    此外,该

    ListenPort = clientport
    

    不需要客户端配置中的行,因为该行属于服务器配置:监听的是服务器,而不是客户端。

    • 2
  2. Best Answer
    codeling
    2020-10-20T08:22:49+08:002020-10-20T08:22:49+08:00

    事实证明答案非常简单(令我感到羞耻的是,这里的优秀人员无法检测到,因为我遗漏了 - 诚然对隐私至关重要 - 密钥):

    我显然使用了以前安装留下的私钥(与我提供给服务器的公钥不匹配)。一旦我修复了匹配的键,连接就起作用了!

    但我觉得奇怪的是客户端上的wireguard没有给出任何反馈它无法正确建立连接(或者甚至更好的是服务器不接受它的密钥)?那会帮助我缩小问题的范围;但可能钥匙应该是双重/三重检查的第一件事!

    • 2
  3. Kevin
    2021-09-07T10:24:16+08:002021-09-07T10:24:16+08:00

    是的,如果键不匹配,服务器会静默失败(丢弃客户端输入)。我可以理解为什么服务器不想响应这种情况,但是在服务器上本地报告错误似乎是谨慎的。当然有助于调试。

    • 0

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve