wireguard@wireguard-go linux

wireguard-go 是 WireGuard VPN 协议的 Go 语言用户空间实现,适用于无法使用内核模块的系统,如 macOS、Windows、OpenVZ 容器等。它提供了跨平台的 VPN 解决方案,虽然性能略逊于内核模块版本,但在兼容性和部署简便性方面具有优势。


安装与使用指南

1. 克隆源码并编译

在支持 Go 的环境中,使用以下命令获取并编译 wireguard-go

1
2
3
4
git clone https://github.com/WireGuard/wireguard-go.git

cd wireguard-go
go build -v -o wireguard-go

对于 macOS 或其他非 Linux 系统,可进行交叉编译:

1
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o wireguard-go

编译完成后,将可执行文件移动到系统路径中

1
sudo cp wireguard-go /usr/local/bin/

2. 创建 WireGuard 接口

使用 wireguard-go 创建虚拟网络接口(例如 wg0):

1
sudo wireguard-go wg0

然后,为该接口分配 IP 地址:

1
sudo ip address add dev wg0 10.0.0.1/24

确保接口已启用:

1
sudo ip link set up dev wg0

3. 配置 WireGuard

使用 wg 工具配置接口的密钥和对等端点。首先,生成密钥对

1
wg genkey | tee privatekey | wg pubkey > publickey

创建配置文件 wg0.conf

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = <你的私钥>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <对端的公钥>
Endpoint = <对端的IP>:51820
AllowedIPs = 10.0.0.2/32

应用配置

1
sudo wg setconf wg0 wg0.conf

查看当前配置和状态:

1
sudo wg

前台运行

run wireguard-go without forking to the background, pass -f or --foreground:

$ wireguard-go -f wg0

使用场景

  • 非 Linux 系统:在 macOS、Windows 等系统中部署 WireGuard VPN。
  • 受限虚拟化环境:如 OpenVZ 容器,无法加载内核模块时使用。
  • 嵌入式设备:在资源受限的设备上实现 VPN 功能。

注意事项

  • 性能差异wireguard-go 在用户空间运行,性能可能低于内核模块版本。
  • 权限要求:需要管理员权限创建和配置网络接口。
  • 工具依赖:需安装 wireguard-tools 提供的 wg 命令行工具。