有一台联想开天的笔记本,操作系统为UOS V20,内核版本为4.19.0,兆芯amd64。
现有安装WireGuard的需要,但UOS V20的内核没有并入WireGuard,因此需要进行一下手动安装,整体操作不算复杂,不过我看了一下(UOS)论坛上似乎有人遇到了安装的问题,遂整理了一份安装手册,以供参考。
大体的安装流程和WireGuard官网的手册一样,差异化部分会着重强调。
执行
$ sudo apt-get install libelf-dev linux-headers-$(uname -r) build-essential pkg-config
正如前文所述,UOS V20的内核没有并入WireGuard,因此必须自己编译安装。请执行
$ git clone https://git.zx2c4.com/wireguard-linux-compat $ git clone https://git.zx2c4.com/wireguard-tools
官网手册没有包含这一步,还请特别注意。
我们需要修改wireguard-linux-compat/src/compat/compat.h的这几行代码,在82-90行的位置
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) && !defined(ISRHEL7) #define ipv6_dst_lookup(a, b, c, d) ipv6_dst_lookup(b, c, d) #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) && LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 83) #define ipv6_dst_lookup_flow(a, b, c, d) ipv6_dst_lookup_flow(b, c, d) #elif (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 5) && LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) || (LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 18) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0) && !defined(ISUBUNTU1904)) || (!defined(ISRHEL8) && !defined(ISDEBIAN) && !defined(ISUBUNTU1804) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 119) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 181) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 224) && LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)) || (LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 224) && !defined(ISUBUNTU1604) && !defined(ISRHEL7)) #define ipv6_dst_lookup_flow(a, b, c, d) ipv6_dst_lookup(a, b, &dst, c) + (void *)0 ?: dst #endif
将上述代码块除了第二行以外的内容全部注释,仅保留
#define ipv6_dst_lookup(a, b, c, d) ipv6_dst_lookup(b, c, d)
如下图蓝框处进行修改即可
经过修改,现在可以正确安装WireGuard了,请执行
$ make -C wireguard-linux-compat/src -j$(nproc) $ sudo make -C wireguard-linux-compat/src install
将编译wireguard-linux-compat文件夹下的src文件夹里面的源代码并进行安装操作。接着请执行
$ make -C wireguard-tools/src -j$(nproc) $ sudo make -C wireguard-tools/src install
到这一步,你就已经顺利安装好了WireGuard(前提是一切顺利),写好你的WireGuard配置文件,姑且假设名字是wg0.conf,然后启用它,看看是否一切顺利
$ sudo wg-quick up wg0.conf
如果你在2.4中执行wireguard-linux-compat的编译时出现了问题(选择无视并且直接进行之后的步骤),那么你可能会在最终测试时遇到这样的报错信息
$ sudo wg-quick up wg0 [#] ip link add wg0 type wireguard RTNETLINK answers: Operation not supported Unable to access interface: Protocol not supported [#] ip link delete dev wg0 Cannot find device "wg0"
请检查是否参照2.3正确修改了compat.h文件的代码,然后重新执行一遍2.4的编译安装操作即可。
在执行下列代码时
$ make -C wireguard-linux-compat/src -j$(nproc)
如果遇到错误提示
error: ‘const struct ipv6_stub’ has no member named ‘ipv6_dst_lookup’; did you mean ‘ipv6_dst_lookup_flow’?
说明compat.h没有修改完毕,请重新回顾2.3中的代码修改部分。
感谢分享
厉害
组网
tailscale
直接用户态
Featured Collection
Popular Ranking
Popular Events
一、背景
有一台联想开天的笔记本,操作系统为UOS V20,内核版本为4.19.0,兆芯amd64。
现有安装WireGuard的需要,但UOS V20的内核没有并入WireGuard,因此需要进行一下手动安装,整体操作不算复杂,不过我看了一下(UOS)论坛上似乎有人遇到了安装的问题,遂整理了一份安装手册,以供参考。
二、安装流程
大体的安装流程和WireGuard官网的手册一样,差异化部分会着重强调。
2.1 安装前置依赖
执行
2.2 下载源代码
正如前文所述,UOS V20的内核没有并入WireGuard,因此必须自己编译安装。请执行
2.3 修改源代码(重点)
官网手册没有包含这一步,还请特别注意。
我们需要修改wireguard-linux-compat/src/compat/compat.h的这几行代码,在82-90行的位置
将上述代码块除了第二行以外的内容全部注释,仅保留
#define ipv6_dst_lookup(a, b, c, d) ipv6_dst_lookup(b, c, d)如下图蓝框处进行修改即可
2.4 编译与安装
经过修改,现在可以正确安装WireGuard了,请执行
将编译wireguard-linux-compat文件夹下的src文件夹里面的源代码并进行安装操作。接着请执行
到这一步,你就已经顺利安装好了WireGuard(前提是一切顺利),写好你的WireGuard配置文件,姑且假设名字是wg0.conf,然后启用它,看看是否一切顺利
三、潜在问题
3.1 不支持操作或接口
如果你在2.4中执行wireguard-linux-compat的编译时出现了问题(选择无视并且直接进行之后的步骤),那么你可能会在最终测试时遇到这样的报错信息
请检查是否参照2.3正确修改了compat.h文件的代码,然后重新执行一遍2.4的编译安装操作即可。
3.2 ipv6_dst_lookup错误
在执行下列代码时
如果遇到错误提示
说明compat.h没有修改完毕,请重新回顾2.3中的代码修改部分。