WireGuard 简介
WireGuard 是现代开源 Layer3 VPN 隧道协议,由 Jason A. Donenfeld 开发,Linux 5.6 内核起原生内置,主打轻量、高速、低延迟,常用来异地组网、远程访问内网(NAS、服务器),替代 OpenVPN / IPsec。
法律提醒:在我国,私自搭建 VPN 用于跨境访问互联网属于违法行为,WireGuard 仅可用于企业 / 个人合法内网组网。

核心特点
- 代码极简:核心仅约 4000 行 C 代码,相比 OpenVPN(10 万 + 行)攻击面更小,方便安全审计
- 内核态运行(Linux):CPU 开销低,吞吐远高于用户态 OpenVPN,弱性能设备(软路由、ARM)优势明显
- UDP 无状态:默认端口
51820/UDP;1-RTT 快速握手;手机 WiFi/4G 切换时隧道自动恢复(漫游友好) - 固定现代加密套件(不可自选)
- Curve25519:密钥交换
- ChaCha20-Poly1305:数据加密 + 消息认证
- BLAKE2s 哈希,SipHash24 哈希表密钥
- 密钥路由 Cryptokey Routing:类似 SSH 公钥认证,公钥绑定 IP 段(AllowedIPs),没有传统账号密码登录
- 跨平台:Linux、Windows、macOS、Android、iOS、OpenWrt、FreeBSD 都有官方客户端
关键概念(配置必懂)
- Peer(对等节点):WireGuard 不分严格的 “服务端 / 客户端”,只是一端有公网 IP 作为中继,所有节点互为 peer
- PrivateKey / PublicKey:每端生成一对公私钥,私钥自己保管,公钥分发给对端
- AllowedIPs:最重要配置,双重作用
- 出站路由:匹配该 IP 段的数据包,加密发给这个 peer
- 入站 ACL:解密后的数据包,源 IP 必须在 AllowedIPs 内才放行
- Endpoint:对端公网地址 + 端口(
IP:51820),内网客户端不需要填写 Endpoint - PersistentKeepalive:NAT 环境保活,一般客户端设 25 秒
WireGuard vs OpenVPN
| 项目 | WireGuard | OpenVPN |
|---|---|---|
| 传输 | UDP,内核态 | UDP/TCP,用户态 |
| 握手 | 1-RTT 毫秒级 | 多轮 TLS 握手 |
| 性能 | 高,CPU 占用低 | 较低,CPU 开销大 |
| 认证 | 公私钥 | 证书 / 账号密码 |
| 代码量 | ~4k 行 | ~100k 行 |
常见使用场景
- 异地内网组网:在外手机 / 电脑访问家里 NAS、监控、服务器(合法内网访问)
- 服务器之间站点到站点 VPN(机房互联)
- 远程办公接入企业内网
常见排错(结合你服务器运维场景)
- 连不上:检查防火墙 / 安全组放行 UDP 51820,不是 TCP;检查 Endpoint 公网 IP;AllowedIPs 配置错误是最高频坑
- 能连接但无法 ping / 访问内网:内核 IP 转发没开启
net.ipv4.ip_forward=1,缺少 iptables/nat 转发规则 - NAT 后不稳定:客户端加上
PersistentKeepalive = 25 - Docker 部署 WireGuard:需要开启
--cap-add=NET_ADMIN,主机内核必须支持 WireGuard 模块
快速安装(Debian/Ubuntu)
apt update && apt install wireguard wireguard-tools # 生成密钥对 wg genkey | tee privatekey | wg pubkey > publickey
配置文件默认路径 /etc/wireguard/wg0.conf,启动命令:
wg-quick up wg0 wg-quick down wg0 wg #查看实时peer状态
