Linux 下 wireguard 出问题的解决

缘起

办公室某台跑 wireguard 打洞的机器挂了,重启之后发现 wireguard 设备起不来,

1
2
wg-quick up wg_ofc;
# 配置文件为:/etc/wireguard/wg_ofc.conf

会报错:

Cannot find device “wg_ofc”

排查问题

参照另外的文章:用 wireguard 在两个网络之间打洞 能了解以前的“洞”是怎么打的。

1
lsmod | grep wireguard;

看果然没有 load wireguard 模块,

1
modprobe wireguard;

会提示这个模块(wireguard)找不到,大致了解什么问题了,应该是某一次升级过 linux kernel,而没有安装相应的 source code 和 headers,从而导致 wireguard 模块没有被重新编译进新的内核模块目录,解决起来也算是相对简单。

解决问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uname -a;
# 获取当前 kernel 的版本号,这里是:3.10.0-1062.4.1.el7.x86_64
rpm -qi wireguard-dkms | grep Version
# 获取 wireguard 模块的版本号,这里是:0.0.20190913
yum install \
kernel-headers-3.10.0-1062.4.1.el7.x86_64 \
kernel-devel-3.10.0-1062.4.1.el7.x86_64;
# 安装需要的 source code 以及 headers
dkms build \
-m wireguard \
-v 0.0.20190913 \
-k 3.10.0-1062.4.1.el7.x86_64;
# 重新为新 kernel 编译 wireguard 模块
dkms install \
wireguard/0.0.20190913 \
-k 3.10.0-1062.4.1.el7.x86_64;
# 为新的 kernel 安装重新编好的 wireguard 模块
wg-quick up wg_ofc;
# 启动原来配置好的 wg_ofc 设备

一切又 OK 了!