为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