我遇到了与描述相同的问题无法加载 wireguard 模块, IE:
sudo modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.15.0
可能,安装全部缺少内核头文件也能解决问题。但是,调用sudo apt-get install linux-headers-$(uname -r)
(我发现其他几方也推荐这样做)会导致
[...]
0 aktualisiert, 729 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 4.117 MB von 4.129 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 30,8 GB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] n
我懒得翻译,但这里的主要问题是30.8 GB。对于轻的VPN 服务...
安装了通用标题(sudo apt-get install linux-headers-generic
),但是没有解决问题。
我正在运行一个相当新的(不到 4 周)Unbuntu 18.04 LTS。uname -a
给出(相关部分):
4.15.0 #1 SMP Tue Jun 9 12:58:54 MSK 2020 x86_64 x86_64 x86_64 GNU/Linux
我很确定有一种方法可以确定数百个标题中的哪一个是必需的,但我无法识别它。
编辑:这是安装日志的最后一部分apt-get
:
It is likely that 4.15.0 belongs to a chroot's host
Building for 4.15.0 and 4.15.0-130-generic
Module build for kernel 4.15.0 was skipped since the
kernel headers for this kernel does not seem to be installed.
Building initial module for 4.15.0-130-generic
Done.
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-130-generic/updates/dkms/
depmod...
DKMS: install completed.
wireguard (1.0.20200513-1~18.04.2) wird eingerichtet ...
Trigger für man-db (2.8.3-2ubuntu0.1) werden verarbeitet ...
答案1
我刚刚根据上面的@hgross评论了解到,这在我的设置下是不可能的。他正确地识别出我们都试图在STRATO托管的虚拟服务器上运行它,在查看手册后,他发布了链接https://www.strato.de/faq/server/kernel-module-bei-unseren-linux-servern/我确信在我拥有的服务器上运行 wireguard 是不可能的。
答案2
为了在现有答案的基础上(并且不会因为社区维基百科而获得声誉),STRATO 文档页面,用于机器上的内核访问内容如下:
跟我们专用 Linux 服务器,您所找到的内核模块取决于硬件和分布。
您当然可以在专用服务器上设置自己的内核模块。
和虚拟 Linux 服务器,无法访问内核,因此无法使用自己的内核模块。
除非你为专用服务器支付 STRATO 费用,否则你将获得虚拟服务器或虚拟服务器它们很可能在类似“容器”的空间内运行,其中内核从主机暴露出来,并且无法在正在运行的机器内进行更改。
Wireguard 没有任何非内核模块解决方案,因为它没有完全不依赖内核的堆栈来工作。不幸的是,结果,**您无法在这些虚拟服务器上安装 Wireguard,因为它们没有完全托管并且依赖于您无法修改的主机操作系统。不幸的是,对于不进行完全虚拟化(通过 KVM 或类似方式)的 VPS 提供商来说,这种情况很常见。
答案3
我使用以下命令在我的 Strato 机器上运行 wireguard: https://github.com/bernardkkt/standalone-wg 它无需内核模块即可运行,并且运行良好。我使用 shell 脚本构建了一个服务来处理自动重新连接。你可以使用我的脚本作为起点。它只是在本地 IP 上 ping 我的路由器,如果 ping 失败,它将重新启动 wireguard。这种情况每天发生一次,在强制 DSL 重新连接或连接因任何原因中断时。我还重新加载了 UFW,因为 wireguard 正在向 IPTables 添加规则,这会以某种方式禁用 UFW,所以我一直在重新加载它。
#!/bin/bash
FILE=/var/log/wireguard-pingchecker.log
PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
TARGET=<YOUR INTERNAL ROUTER IP>
n=0
cd /home/standalone-wg
#touch $FILE
until [ "$n" -ge 15 ]
do
# output is redirected to /dev/null so it does not spam the console
ping -c 1 $TARGET &> /dev/null
if [[ $? -ne 0 ]]; then
echo $(date '+%d/%m/%Y %H:%M:%S')" Could not ping target "$TARGET >> $FILE
echo $(date '+%d/%m/%Y %H:%M:%S')" Starting wireguard." >> $FILE
./run.sh /etc/wireguard/client.conf
sleep 10
echo $(date '+%d/%m/%Y %H:%M:%S')" Reloading UFW." >> $FILE
/usr/sbin/ufw enable
/usr/sbin/ufw reload
else
echo $(date '+%d/%m/%Y %H:%M:%S')" Ping was successful." >> $FILE
break
fi
echo $(date '+%d/%m/%Y %H:%M:%S')" Sleeping 5 sec before pinging again..." >> $FILE
sleep 5
n=$((n+1))
done
echo $(date '+%d/%m/%Y %H:%M:%S')" Script execution finished." >> $FILE