从源代码编译内核模块
您将需要 gcc ≥4.7 和内核头文件在正确的位置进行编译。
步骤 1:安装工具链
Ubuntu 和Debian
$ sudo apt-get install libelf-dev linux-headers-$(uname -r) build-essential pkg-config
Fedora
$ sudo dnf install elfutils-libelf-devel kernel-devel pkg-config @development-tools
红帽企业 Linux/CentOS
$ sudo yum install elfutils-libelf-devel kernel-devel pkgconfig "@Development Tools"
拱
# pacman -S linux-headers base-devel pkg-config
OpenSUSE
$ sudo zypper install kernel-default-devel pkg-config
高山
# apk add build-base linux-hardened-dev # or linux-vanilla-dev on a vanilla kernel
第 2 步:获取代码
$ git clone https://git.zx2c4.com/wireguard-linux-compat
$ git clone https://git.zx2c4.com/wireguard-tools
步骤3:编译并安装模块
$ make -C wireguard-linux-compat/src -j$(nproc)
$ sudo make -C wireguard-linux-compat/src install
make debug
(如果您想要了解有关您所在地区发生的情况的更多信息,您可以运行dmesg(1)
。)
步骤4:编译并安装wg(8)
工具
$ make -C wireguard-tools/src -j$(nproc)
$ sudo make -C wireguard-tools/src install
*** 继续快速入门指南。***
内核要求
WireGuard 需要 Linux ≥3.10,具有以下配置选项,这些选项可能已经在您的内核中配置,特别是如果您通过分发包安装。
CONFIG_NET
用于基本网络支持CONFIG_INET
用于基本 IP 支持CONFIG_NET_UDP_TUNNEL
用于发送和接收 UDP 数据包CONFIG_CRYPTO_ALGAPI
对于 crypto_xor
这些选项中有些(但不是全部)直接与menuconfig
条目相对应。不直接对应的选项则与暗示它们的选项相对应。要启用上述选项,请在 中选择以下项目menuconfig
:
[*] Networking support (NET) -->
Networking options -->
[*] TCP/IP networking (INET)
[*] IP: Foo (IP protocols) over UDP (NET_FOU)
[*] Cryptographic API (CRYPTO) -->
[*] Cryptographic algorithm manager (CRYPTO_MANAGER)
当作为树外模块构建时,很可能CONFIG_UNUSED_SYMBOLS
也需要进行设置。
直接在树中构建
如果您不想将其构建为外部模块,而是希望将 WireGuard 构建为模块或内置模块,则可以直接在内核树中构建,您可以使用create-patch.sh
创建补丁的脚本将 WireGuard 直接添加到树中,或者jury-rig.sh
使用将 WireGuard 源目录链接到内核树的脚本:
$ cd /usr/src/linux
$ ~/wireguard-linux-compat/kernel-tree-scripts/create-patch.sh | patch -p1
or
$ ~/wireguard-linux-compat/kernel-tree-scripts/jury-rig.sh /usr/src/linux
然后您将能够直接配置这些选项:
CONFIG_WIREGUARD
控制 WireGuard 是作为模块构建、内置构建还是不构建CONFIG_WIREGUARD_DEBUG
打开详细的调试消息
可以通过 轻松选择这些menuconfig
,如果CONFIG_NET
和CONFIG_INET
也被选中:
[*] Networking support -->
Networking options -->
[*] TCP/IP networking
[*] IP: WireGuard secure network tunnel
[ ] Debugging checks and verbose messages