文章

为openEuler添加wireguard模块

1. 问题

Linux内核从5.6版开始内嵌了wireguard模块,但是openEuler却从内核中删除了wireguard。
wireguard官方提供了通过源码编译安装wireguard模块的方法,但是只针对5.6版之前的Linux内核,因此在openEuler系统上通过wireguard官方提供的源码也无法安装(即使修改源码去掉版本判断,也会出现各种编译问题)。

2. 方案

  • 自己编译一个跟openEuler同版本的Linux内核,把wireguard模块包含进去

  • 从自己编译的内核中提取wireguard相关模块文件

  • 将wireguard模块文件手工部署到openEuler系统中

3. 步骤

3.1. 准备openEuler基准环境

openEuler提供了虚拟机镜像,可以直接使用,不用再安装一遍。

下载地址:https://repo.openeuler.openatom.cn/openEuler-22.03-LTS-SP3/virtual_machine_img/x86_64/

提供的是qcow2格式的虚拟机,这是被QEMU或linux-kvm等虚拟机软件使用的格式,如果你使用的虚拟机软件不支持,可以自行搜索格式转换的方法。

这个虚拟机镜像默认root密码是:openEuler12#$

后面的操作都在openEuler基准环境中进行

3.2. 安装依赖软件

yum install elfutils-libelf-devel kernel-devel pkgconfig "@Development Tools"
yum install kernel-headers.x86_64 pkg-config ncurses-devel openssl-devel dwarves

3.3. 安装内核源码

yum install kernel-source.x86_64

这里安装的是与当前内核版本相同的源码。
安装位置一般是类似下面的目录:
/usr/src/linux-5.10.0-220.0.0.123.oe2203sp3.x86_64

3.4. 配置编译选项

进入源码目录,执行:make menuconfig
找到wireguard模块,进行勾选,一般是在:Device Drivers -> Network device support -> Wireguard secure network tunnel

3.5. 编译

make -4j

-4j 的意思是使用4个线程进行编译

3.6. 安装模块

make modules_install

安装位置一般是下面这样的目录:
/lib/modules/5.10.0

3.7. 提取wireguard相关模块

经测试,需要提取下面这些模块。

cd /root
mkdir wireguard-modules
cd wireguard-modules
mkdir -p kernel/drivers/net
mkdir -p kernel/arch/x86/crypto
mkdir -p kernel/lib/crypto
mkdir -p kernel/crypto
cp -avrp /lib/modules/5.10.0/kernel/drivers/net/wireguard/* kernel/drivers/net/wireguard/
cp -avrp /lib/modules/5.10.0/kernel/arch/x86/crypto/curve25519-x86_64.ko kernel/arch/x86/crypto/
cp -avrp /lib/modules/5.10.0/kernel/lib/crypto/libcurve25519* kernel/lib/crypto/
cp -avrp /lib/modules/5.10.0/kernel/lib/crypto/libchacha20poly1305.ko kernel/lib/crypto/
cp -avrp /lib/modules/5.10.0/kernel/crypto/chacha20poly1305.ko kernel/crypto/
cd ..
tar czvf wireguard-modules.tgz wireguard-modules

最后提取和打包后的文件是:wireguard-modules.tgz

3.8. 部署到openEuler服务器

  • 上传wireguard-modules.tgz到服务器

  • 解压wireguard-modules.tgz

  • 复制模块文件到内核中(注意版本)

    cp -avrp wireguard-modules/kernel /lib/modules/5.10.0-220.0.0.123.oe2203sp3.x86_64/
  • 更新模块依赖

    depmod -a
  • 加载wireguard模块

    modprobe wireguard
  • 添加配置文件,确保系统重启后自动加载

    echo wireguard > /etc/modules-load.d/wireguard.conf
  • 检查wireguard模块加载情况

    lsmod | grep wireguard
    wireguard              98304  0
    curve25519_x86_64      49152  1 wireguard
    libcurve25519_generic    49152  2 curve25519_x86_64,wireguard
    libchacha20poly1305    16384  1 wireguard
    ip6_udp_tunnel         16384  1 wireguard
    udp_tunnel             24576  1 wireguard

License:  CC BY 4.0