1. 为什么选 WireGuard?
    在现代 VPN 技术栈里,WireGuard 是一个分水岭——它把 VPN 从「配置地狱」拉到了「3 个文件 + 5 条命令」的复杂度。

对比维度 OpenVPN IPsec/IKEv2 WireGuard
代码规模 ~70,000 行 ~400,000 行(StrongSwan+内核) ~4,000 行
加密套件 可协商(容易配错) 可协商 固定 Noise + ChaCha20Poly1305
漫游支持 需重连 需重连 无缝切换(WiFi ↔ 4G)
内核集成 用户态 + tun 内核态 + 用户态 Linux 5.6+ 主线内核
配置难度 证书体系,上手陡峭 更高 类 SSH,公钥交换即配对
WireGuard 的设计哲学是 no knobs——没有加密算法选择、没有协商握手超时参数、没有冗余模式。要么配对成功,要么静默不响应。这种极简设计带来了两个直接结果:

攻击面极小:4,000 行代码,审计工作量是 OpenVPN 的 1/18
性能极高:内核态数据路径,吞吐量通常比 OpenVPN 高 2-3x
WireGuard 不隐藏自己是 VPN——它不做流量混淆。如果你的需求是「翻墙抗审查」,需要用 Xray VLESS + REALITY 这类伪装工具。WireGuard 的正确使用场景是:加密组网、内网穿透、安全接入。

  1. 三种实际应用场景
    场景一:公共 WiFi 加密接入
    酒店、机场、咖啡厅的开放 WiFi 是明文数据的重灾区。在本地连上 WireGuard 后,设备 → 你的云服务器之间建立加密隧道,公网段的所有中间节点只能看到 UDP 密文。DNS 查询走你指定的私有 DNS(如 223.5.5.5),杜绝热点方 DNS 劫持。

适用:出差远程办公、登录服务器后台、操作涉敏业务系统。

场景二:内网穿透 / 多地组网
家庭 NAS、公司内网 Git 仓库、Plex 媒体服务器——这些服务放到公网上不安全,但不暴露又没法远程访问。

WireGuard 的方案是:给每台设备分配一个虚拟内网 IP(如 10.0.0.0/24),所有设备通过隧道互通,仿佛连在同一台交换机上。不需要 DDNS、不需要端口映射、不需要担心 FRP 服务商的安全记录。

腾讯云轻量云上海 做中转节点,BGP 多线,覆盖电信联通移动全线路。

场景三:跨境低延迟接入
从国内访问境外游戏服务器、GitHub、Docker Hub 时,公网路由绕行第三国、运营商互联 QoS 限速——延迟高、丢包大。

WireGuard 本身不解决跨境路由问题。但如果搭配专线(如 MKCloud IEPL/IPLC),专线不走 GFW、不绕第三国,到香港端内延迟 < 2ms——此时 WireGuard 负责在专线之上提供加密隧道,做法是「专线提供线路质量,WireGuard 提供端到端加密」。

跨境组网的硬约束
WireGuard 客户端在中国大陆、服务端在境外——这条隧道一定会被 GFW 的 DPI 识别并阻断。WireGuard 协议特征明显(UDP 固定头、握手包长度固定),不做任何混淆。唯一合规的跨境 WireGuard 使用方式,是走专线(IEPL/IPLC),不过 GFW。 普通 BGP 方案的 WireGuard 跨境连接,存活时间通常不超过数小时。

  1. 实验环境
    项目 详情
    服务端 腾讯云上海轻量云,2C/2G/40G,BGP 200Mbps
    操作系统 Ubuntu 24.04 LTS(内核 6.8+,WireGuard 内置)
    虚拟子网 10.0.0.0/24
    服务端虚拟 IP 10.0.0.1/24
    监听端口 51820/udp
    客户端 Windows / macOS / iOS / Android
  2. 第一步:安装 WireGuard
    Ubuntu 24.04 内核已内置 WireGuard 模块,只需安装用户态工具:

sudo apt update
sudo apt install wireguard wireguard-tools -y
验证内核支持:

modprobe wireguard && echo "OK" || echo "FAIL"

  1. 第二步:生成密钥对
    WireGuard 的配对逻辑是公钥交换——和 SSH 的公钥认证思维一致。

服务端密钥对

wg genkey | tee /etc/wireguard/server_private_key | wg pubkey > /etc/wireguard/server_public_key

客户端密钥对

wg genkey | tee /etc/wireguard/client_private_key | wg pubkey > /etc/wireguard/client_public_key
每条隧道是两个公钥的绑定关系:服务端持有自己的私钥 + 客户端的公钥,客户端持有自己的私钥 + 服务端的公钥。双方没有证书链、没有 CA、没有信任链概念——就是两个密钥对的直接配对。

  1. 第三步:服务端配置
    创建 /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private_key>

客户端 1

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.0.0.2/32
AllowedIPs 的含义
AllowedIPs 不是 IP 白名单,它是 WireGuard 的路由表。对服务端来说,AllowedIPs = 10.0.0.2/32 表示「发往 10.0.0.2 的包走这个 peer 的隧道」。对客户端来说,AllowedIPs = 0.0.0.0/0 表示「所有流量都路由进隧道(全局代理)」,AllowedIPs = 10.0.0.0/24 表示「只有内网流量走隧道(内网穿透模式)」。

  1. 第四步:开启内核转发 + BBR
    sudo nano /etc/sysctl.conf
    确保以下配置存在:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
sudo sysctl -p

  1. 第五步:防火墙放行
    sudo firewall-cmd --permanent --add-port=51820/udp
    sudo firewall-cmd --permanent --add-masquerade
    sudo firewall-cmd --reload
    Warning
    MASQUERADE 是 WireGuard 组网能通的关键。 客户端通过隧道访问服务器后,服务器需要把来自 10.0.0.x 的包伪装成自己的 IP 发出去——否则回程包的路由不通。

如果你的系统没有 firewall-cmd,先参考 Firewalld 端口转发完全指南 安装。如果是腾讯云/阿里云 VPS,记得在控制台安全组里也放行 51820/UDP。

  1. 第六步:启动服务
    sudo chmod 600 /etc/wireguard/*
    sudo systemctl enable wg-quick@wg0 --now
    sudo systemctl status wg-quick@wg0 --no-pager
    查看隧道状态:

wg show
输出示例——latest handshake 和 transfer 是连接状态的直接证据:

interface: wg0
public key: <server_public_key>
private key: (hidden)
listening port: 51820

peer: <client_public_key>
allowed ips: 10.0.0.2/32
latest handshake: 22 seconds ago
transfer: 4.23 MiB received, 18.71 MiB sent

  1. 第七步:客户端配置
    客户端下载
    平台 下载
    Windows WireGuard Windows 客户端
    macOS Mac App Store
    iOS App Store
    Android Google Play / APK
    客户端配置文件 /etc/wireguard/client.conf
    两种模式的切换点就在 AllowedIPs:

0.0.0.0/0, ::/0 — VPN 全局代理,所有流量经服务器出去
10.0.0.0/24 — 内网穿透模式,只有内网 IP 段流量走隧道
PersistentKeepalive = 25 针对 NAT 后面的客户端——每 25 秒发一个 keepalive 包,维持 NAT 表项不过期。

快速导入(二维码)
iPhone/Android 扫码更方便:

sudo apt install qrencode -y
qrencode -t ansiutf8 < /etc/wireguard/client.conf

  1. 第八步:动态添加新客户端
    方法一:命令行热添加(不中断服务)
    wg genkey | tee /etc/wireguard/new_client_private_key | wg pubkey > /etc/wireguard/new_client_public_key
    sudo wg set wg0 peer $(cat /etc/wireguard/new_client_public_key) allowed-ips 10.0.0.3/32
    方法二:编辑配置文件
    在 /etc/wireguard/wg0.conf 中追加新 [Peer] 块,然后:

sudo systemctl restart wg-quick@wg0
方法二会断开所有现有连接,如果服务正在承载生产流量,选方法一。

  1. 常用命令速查
    动作 命令
    启动 sudo systemctl start wg-quick@wg0
    停止 sudo systemctl stop wg-quick@wg0
    重启 sudo systemctl restart wg-quick@wg0
    状态 sudo systemctl status wg-quick@wg0 --no-pager
    隧道状态 wg show
    日志 sudo journalctl -u wg-quick@wg0 -f
  2. FAQ
    Q: 连接后无法上网怎么办?
    按顺序检查:

MASQUERADE 开了吗? firewall-cmd --list-all 确认 masquerade: yes
内核转发开了吗? sysctl net.ipv4.ip_forward 必须返回 1
客户端的 Endpoint 能 ping 通吗? 检查云厂商安全组是否放行了 51820/udp
MTU 值对吗? PPPoE 拨号宽带 MTU 通常是 1492,WireGuard 头部占 60 字节,设 MTU = 1420 或 MTU = 1280 可避免分片丢包
Q: WireGuard 和 Tailscale/ZeroTier 怎么选?
三者底层都是 WireGuard 协议。Tailscale 和 ZeroTier 的优势是自动 NAT 穿透 + Web 管理面板——省去了手动配公钥和 config 文件。代价是依赖官方的协调服务器(Coordination Server),并且 Tailscale 免费版限制 100 台设备。

如果你是个人工具链里的几台设备组网,WireGuard 原生部署更可控——不依赖第三方 SaaS。如果团队规模大、设备复杂、穿越多层 NAT,Tailscale 的管理开销更低。本站更推荐 WireGuard 原生——配置完成后几乎零运维,没有第三方依赖。

Q: 跨境 WireGuard 为什么会被阻断?
GFW 的深度包检测(DPI)能识别 WireGuard 的握手包特征:固定的 UDP 端口、固定的 Initiation 包长度(148 字节)、固定的加密套件协商模式。WireGuard 不做混淆是基于设计——它选择了加密强度而非伪装能力。如果需要跨墙通信,参考 Xray VLESS + REALITY 源码编译教程。