--- title: "04-WireGuard实操" created: 2026-09-01 tags: - 项目筑基 --- # WireGuard实操 > 定位说明:这篇是文档学习整理,WireGuard 的版本演进快、各平台客户端差异大,文中配置是"最小可用骨架"——真部署时以官方文档 https://www.wireguard.com/quickstart/ 为准(核对点)。目前没在自家的 VPS 上跑通过完整流程,跑通后回填实录。 [[06-VPN实战|06-VPN实战]]的原话感受是"openvpn比较麻烦",[[03-协议与方案全景|上一篇]]也说了现代默认答案是 WireGuard。这篇就看它到底简化到了什么程度——答案是:**核心配置就是两个几十行的文本文件。** ## 一、心智模型:先记住三个东西 WireGuard 把一切抽象成**网络接口 + 公钥路由**: | 概念 | 是什么 | 类比 | | --- | --- | --- | | Interface(接口) | 本机这块"虚拟网卡",有自己的私钥和内网 IP | 一张只连自己人的网卡 | | Peer(对端) | 通信的另一台设备,用**公钥**标识身份 | 通讯录里的联系人 | | AllowedIPs | 允许(且只允许)从某个对端收发哪些网段的流量 | 路由表 + 防火墙二合一 | 最反直觉也最优雅的是第三条:WireGuard 没有"用户名密码",身份就是**密钥对**。`AllowedIPs` 同时承担两个职责——出站时"哪些目标走隧道"(路由),入站时"哪个来源的包能从这条隧道进来"(源地址过滤,也叫 cryptokey routing)。配错了不是连不上就是拒绝收包,排查先查它。 ## 二、最小可用配置:服务端 + 客户端 **场景**:一台有公网 IP 的 VPS 当服务端,家里电脑当客户端,组个双机虚拟局域网(服务端 `10.0.0.1`,客户端 `10.0.0.2`)。 **第一步:两端各生成密钥对**(各执行一次): ```bash wg genkey | tee privatekey | wg pubkey > publickey ``` **第二步:服务端 `/etc/wireguard/wg0.conf`**: ```ini [Interface] Address = 10.0.0.1/24 ListenPort = 51820 PrivateKey = <服务端私钥> [Peer] # 客户端 PublicKey = <客户端公钥> AllowedIPs = 10.0.0.2/32 ``` **第三步:客户端 `wg0.conf`**: ```ini [Interface] Address = 10.0.0.2/24 PrivateKey = <客户端私钥> [Peer] # 服务端 PublicKey = <服务端公钥> Endpoint = :51820 AllowedIPs = 10.0.0.0/24 # 开机自动握手(可选) PersistentKeepalive = 25 ``` **第四步:启动与验证**: ```bash # 服务端:启动(wg-quick 会自动创建 wg0 接口) wg-quick up wg0 # 开机自启(systemd 版) systemctl enable --now wg-quick@wg0 # 客户端:导入 conf 后启动,然后验证 wg show # 看到 latest handshake: x seconds ago 即通 ping 10.0.0.1 # 直接 ping 虚拟 IP ``` 和 [[04-EasyTier|EasyTier]] 的配置对照着看会发现是同一套思想的不同表达:EasyTier 的 `--ipv4 10.10.10.1 --network-secret <组网密码>`,翻译成 WireGuard 就是 `[Interface] Address + 密钥对`;EasyTier 的 `Peers 指向 VPS 公网入口`,就是 WireGuard 的 `Endpoint`。区别在于 WireGuard 要**双向**登记公钥(服务端得写上客户端的公钥),EasyTier 用共享密码代替了这一步。 ## 三、几个绕不开的坑(文档整理,未亲测) 1. **服务端要开转发**:如果想让客户端通过 VPS 访问 VPS 后面的网段(或做出口),服务端需要 `net.ipv4.ip_forward=1` 并配 iptables/NAT 转发规则——[[01-再次出发|01-再次出发]]里配 Tunnel 转发时踩过同类问题,思路通用。 2. **AllowedIPs 决定"翻不翻"**:客户端 `AllowedIPs = 0.0.0.0/0` 意味着全部流量走隧道(全局代理效果),只写 `10.0.0.0/24` 则只有内网目标走隧道(分流模式)。这就是"VPN 全局 vs 规则分流"在 WireGuard 里的具体开关,和 [[02-VPN是什么|02-VPN是什么]]里 VPN vs 正向代理的辨析呼应。 3. **NAT 后的客户端要 `PersistentKeepalive`**:家庭宽带在 NAT 后面,不主动发包会被 NAT 表项回收导致连不上,25 秒心跳保活。 4. **时间戳/密钥不匹配静默失败**:两端公钥没对应上时,`wg show` 里 handshake 一直不出现,不报错——先核对公钥再查防火墙 UDP 51820 放行。 ## 四、什么时候不用它 诚实地说,WireGuard 也有边界: - **动态 IP + 想要零配置** → 打洞、密钥轮换、IP 分配都得自己处理,这时托管组网更省心(见[[05-组网工具对比|下一篇]])。 - **需要企业级审计/双因素** → OpenVPN 的证书体系和控制面更成熟。 - **只能 TCP 的严苛网络** → WireGuard 只走 UDP,被完全封 UDP 的网络里需要套壳方案(如 udp2raw,可靠性未验证,用时再查)。 下一篇把 Tailscale/ZeroTier/EasyTier 三家组网工具放一张表里比,顺便接上 [[06-VPN实战|06-VPN实战]] 的 Tailscale 实录和 [[04-EasyTier|EasyTier]] 的部署篇。 --- ⬅️ [[03-协议与方案全景|协议与方案全景]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[05-组网工具对比|组网工具对比]]