除了安装所有内核头文件外,还有其他方法可以让 wireguard 运行吗?

除了安装所有内核头文件外,还有其他方法可以让 wireguard 运行吗?

我遇到了与描述相同的问题无法加载 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

相关内容