wireguard模块安装(CentOS8)

举报
黄生 发表于 2022/08/14 18:25:14 2022/08/14
【摘要】 首先找一下wireguard内核模块的源码项目的地址,wireguard官方网站访问不到,github上可以访问,不过github只是镜像,实际的项目代码是可以访问的。下载最新的那个Tag:wireguard-linux-compat 是一个用于向后兼容的模块代码项目,这是因为WireGuard was merged into the Linux kernel for 5.6.This re...

首先找一下wireguard内核模块的源码项目的地址,wireguard官方网站访问不到,github上可以访问,不过github只是镜像,实际的项目代码是可以访问的。下载最新的那个Tag:
image.png

wireguard-linux-compat 是一个用于向后兼容的模块代码项目,这是因为

WireGuard was merged into the Linux kernel for 5.6.
This repository contains a backport of WireGuard for
kernels 3.10 to 5.5, as an out of tree module.

也就是说在内核版本5.6及之后,内核中已经包含了wireguard,而这个项目存在的意义,就是为了5.6之前的内核版本而存在。
而对于商业发行版,比如RHEL,RHEL9已经包含,而7、8则需要额外编译或获取内核模块。
而维护内核模块向后兼容的人员,对于Redhat也有些怨言,并会drop CentOS 8 Stream support。(以后免费的CentOS也不会有了,这并不是坏事。)

So when Red Hat tells me, "sorry, why should we care about this? RHEL7
and 8 don't support WireGuard. Tell people to use RHEL9 for that. We're
not going to make your life easier in RHEL7 and 8. It's not supported,"

参照How to Create a VPN Tunnel with Wireguard来实际操作一下,文章里是ubuntu,我这里是在CentOS8上,回头再在鲲鹏的OpenEuler上也试一个对端

[root@ecs-d589 ~]# uname -r
4.18.0-240.10.1.el8_3.x86_64

#先安装kernel-devel开发包(这个我不确定是不是必须),但是这个小版本号和本机的发现版有区别:204 VS 408

Installed:
  kernel-devel-4.18.0-408.el8.x86_64

[root@ecs-d589 ~]# ll /usr/src/kernels/
total 4
drwxr-xr-x 23 root root 4096 Aug  5 13:55 4.18.0-408.el8.x86_64

# 更新 kernel-headers。在ubuntu里是linux-headers

Upgraded:
  kernel-headers-4.18.0-408.el8.x86_64

Installed:
  kernel-4.18.0-408.el8.x86_64
  kernel-core-4.18.0-408.el8.x86_64
  kernel-modules-4.18.0-408.el8.x86_64

#编译。这里报错了,重启机器后就可以了

[root@ecs-d589 src]# make
make[1]: *** /lib/modules/4.18.0-240.10.1.el8_3.x86_64/build: No such file or directory.  Stop.

#链接断链了
[root@ecs-d589 src]# ls /lib/modules/4.18.0-240.10.1.el8_3.x86_64/build  -l
lrwxrwxrwx 1 root root 45 Jan 19  2021 /lib/modules/4.18.0-240.10.1.el8_3.x86_64/build -> /usr/src/kernels/4.18.0-240.10.1.el8_3.x86_64

reboot

Installed:
  elfutils-libelf-devel-0.187-4.el8.x86_64

#这里有一个重复定义ktime_get_coarse_boottime_ns函数,通过注释linux自己的头文件timekeeping.h里定义的函数来解决

/usr/src/kernels/4.18.0-408.el8.x86_64/include/linux/timekeeping.h:
static inline u64 ktime_get_coarse_boottime_ns(void)
{
    return ktime_to_ns(ktime_get_coarse_boottime());
}

compat/compat.h
static inline u64 ktime_get_coarse_boottime_ns(void)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
    return ktime_to_ns(ktime_get_boottime());
#elif (LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 12) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 53)
    return ktime_to_ns(ktime_mono_to_any(ns_to_ktime(jiffies64_to_nsecs(get_jiffies_64())), TK_OFFS_BOOT));
#else
    return ktime_to_ns(ktime_get_coarse_boottime());
#endif
}

编译好了之后,加载wireguard模块就可以了:

[root@ecs-d589 thirdtool]# lsmod|grep wire
wireguard             212992  0
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             20480  1 wireguard
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。