wireguard@wireguard-go linux
wireguard-go
是 WireGuard VPN 协议的 Go 语言用户空间实现,适用于无法使用内核模块的系统,如 macOS、Windows、OpenVZ 容器等。它提供了跨平台的 VPN 解决方案,虽然性能略逊于内核模块版本,但在兼容性和部署简便性方面具有优势。
安装与使用指南
1. 克隆源码并编译
在支持 Go 的环境中,使用以下命令获取并编译 wireguard-go
:
1 | git clone https://github.com/WireGuard/wireguard-go.git |
对于 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 | [Interface] |
应用配置
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
命令行工具。