WireGuard 是一个超轻量内核级 VPN 组网工具。支持基于不对称加密的 UDP 连接组网,实现了最基础的 VPN 网络设施。

依赖

WireGuard 已经合入 Linux 内核,但是在 Linux 5.6 以上版本才有。

以树莓派中的 Archlinux 为例,安装依赖。

pacman -S linux-rpi linux-rpi-headers wireguard-dkms wireguard-tools

之后还需要加载模块

密钥交互

生成私钥

wg genkey > private

生成公钥

wg pubkey < private

手动创建

创建网络设备

ip link add wg0 type wireguard
ip addr add 10.192.0.1/24 dev wg0
wg set wg0 private-key ./private
ip link set wg0 up

脚本创建

有个不错的脚本。

# 生成wg1和wg2的公钥私钥配对
wg genkey | tee wg1-prikey | wg pubkey > wg1-pubkey
wg genkey | tee wg2-prikey | wg pubkey > wg2-pubkey
# 分别赋值
WG1_PRIKEY=`cat wg1-prikey`
WG1_PUBKEY=`cat wg1-pubkey`
WG2_PRIKEY=`cat wg2-prikey`
WG2_PUBKEY=`cat wg2-pubkey`

# 此例中以wg1作为服务端,所以endpoint配置成wg1的
WG1_IP=10.64.0.2
WG1_PORT=10280
# 生成适用于wg1的配置
cat > wg1.conf<<EOF
[Interface]
Address = 10.192.0.1/24
ListenPort = ${WG1_PORT}
PrivateKey = ${WG1_PRIKEY}
[Peer]
PublicKey = ${WG2_PUBKEY}
AllowedIPs = 10.192.0.2/32
EOF
# 生成适用于wg2的配置
cat > wg2.conf<<EOF
[Interface]
Address = 10.192.0.2/24
PrivateKey = ${WG2_PRIKEY}
[Peer]
PublicKey = ${WG1_PUBKEY}
Endpoint = ${WG1_IP}:${WG1_PORT}
AllowedIPs = 10.192.0.1/32
EOF

wg-quick 命令可以快速起停,但是需要配置文件位于 /etc/wireguard/ 目录下。

启动一个配置

wg-quick up wg1

systemd

wireguard-tools 包也提供了 systemd 服务脚本。

systemctl start wg-quick@wg1.service

参考