本文由 Claude Code 整理。

WireGuard 技术笔记:协议简介、与 SSH 隧道的对比,以及基于 IPv6 的一键搭建。

免责声明:本文仅供学习研究使用,请勿用于非法用途。


什么是 WireGuard

WireGuard 是一个现代的 VPN 协议,工作在内核态(Linux 已内置 wireguard 模块),基于 UDP。

  • 极简:核心代码约 4000 行(OpenVPN/IPsec 是其数十倍),易于审计。
  • :内核态实现 + 现代加密套件(Curve25519、ChaCha20-Poly1305、BLAKE2s),吞吐和延迟优于 OpenVPN/IPsec。
  • 无连接状态:基于公钥的点对点模型,每个 peer 用一对公私钥标识,配置就是一份几行的 wg0.conf
  • 漫游友好:客户端 IP/网络切换(4G ↔ WiFi)时连接不中断。

能用来做什么

  • 远程访问内网:把笔记本接入家里/公司局域网,访问内网服务。
  • 组网(site-to-site):把多台服务器、多个机房连成一个虚拟二层/三层网络(Tailscale、Netbird 等都基于 WireGuard)。
  • 全局代理 / 科学上网:把所有流量路由到境外服务器出口。
  • 加密公网通信:在不可信网络上为任意 TCP/UDP 服务加一层加密。

相比直接用 SSH 隧道的优点

很多人习惯用 ssh -D(SOCKS)或 ssh -L/-R(端口转发)做临时代理,WireGuard 的差别:

维度SSH 隧道WireGuard
工作层应用层,单个 TCP 连接网络层(L3),转发整个 IP 流量
协议TCP over TCP,易"队头阻塞"UDP,无 TCP-over-TCP 性能塌陷
覆盖范围需逐应用配置 SOCKS/转发路由表层面接管,全局透明
性能单连接、加解密在用户态,较慢内核态、多核,接近线速
UDP 流量不支持(仅 TCP 转发)原生支持 UDP(游戏、DNS、QUIC)
断线重连换网即断漫游不断线
配置临时方便一次配置长期使用

简言之:SSH 隧道适合临时、单点;WireGuard 适合长期、全局、高性能的组网与代理。

用 WireGuard over IPv6 搭建科学上网

为什么用 IPv6

  • 很多廉价 VPS(尤其某些 IPv6-only 或 IPv6 充裕的机型)原生支持 IPv6 出口。
  • 部分网络对 IPv4 端点的封锁更激进,IPv6 端点(endpoint)有时存活更久、更省成本。
  • 前提:你的本地网络也要有 IPv6(多数家宽/移动网络已支持),否则连不上 IPv6 endpoint。

注意:WireGuard 是明文可识别的 UDP 协议,握手特征明显,容易被 DPI 识别和 QoS/封锁,抗封锁能力不如 VLESS+Reality / Hysteria2 等。适合自用、低对抗场景;强对抗环境请用专门的抗审查协议。

一键安装

在 VPS(Ubuntu/Debian,root)上运行 Nyr/wireguard-install

wget https://raw.githubusercontent.com/Nyr/wireguard-install/master/wireguard-install.sh -O wireguard-install.sh && sudo bash wireguard-install.sh

交互式向导会询问:

  • Endpoint 公网地址:填服务器的 IPv6 地址(脚本会自动探测,确认填的是 IPv6)。
  • 监听端口:默认 51820/udp
  • DNS:建议选 Cloudflare(1.1.1.1)等。
  • 客户端名:自定义。

完成后会在当前目录生成客户端配置 <name>.conf 并打印二维码。再次运行脚本可增删客户端。

也可用 angristan/wireguard-install,对 IPv4/IPv6 双栈支持更完整:

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh && chmod +x wireguard-install.sh && ./wireguard-install.sh

关键配置说明

生成的客户端配置形如:

[Interface]
PrivateKey = <client-private-key>
Address = 10.7.0.2/24, fddd:2c4:2c4:2c4::2/64
DNS = 1.1.1.1

[Peer]
PublicKey = <server-public-key>
PresharedKey = <psk>
# 关键:endpoint 用方括号包裹的 IPv6 地址 + 端口
Endpoint = [2001:db8::1]:51820
# 全局代理:0.0.0.0/0 接管 IPv4,::/0 接管 IPv6
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
  • Endpoint[IPv6]:端口 格式(IPv6 必须加方括号)。
  • AllowedIPs = 0.0.0.0/0, ::/0 表示全局代理;只想代理特定网段就改成具体 CIDR(分流)。
  • PersistentKeepalive = 25 让 NAT 后的客户端保持连接。

客户端使用

  • macOS / Windows / iOS / Android:装官方 WireGuard App,导入 .conf 或扫码即可。
  • Linux
    sudo apt install wireguard
    sudo cp client.conf /etc/wireguard/wg0.conf
    sudo wg-quick up wg0      # 启动
    sudo wg                   # 查看握手状态
    sudo wg-quick down wg0    # 关闭
    systemctl enable wg-quick@wg0   # 开机自启
    

验证

连上后检查出口 IP 与 IPv6 是否走代理:

curl -4 ifconfig.co     # 应显示 VPS 的 IPv4 出口
curl -6 ifconfig.co     # 应显示 VPS 的 IPv6 出口

小结

WireGuard 简单、快、内核原生,做组网和全局代理远比 SSH 隧道省心;over IPv6 能利用廉价 IPv6 资源、绕开部分 IPv4 封锁。但它协议特征明显、抗 DPI 能力弱,仅适合自用低对抗场景,强审查环境请改用专门的抗审查协议。