Skip to content
文章 / 2 分钟阅读

WireGuard VPN:配置文件含义、如何验证隧道,以及何时代理是更好的工具

WireGuard 是一种协议,而不是一项服务——所以“WireGuard VPN”通常意味着提供商交给你一个配置文件,你再导入官方应用。以下说明该配置文件的每一行做什么、如何证明隧道确实在承载你的流量,以及它如何

搜索“WireGuard VPN”往往会返回两类截然不同的东西:一边是开源协议及其官方客户端应用,另一边是一长串允许你为其下载配置文件的商业提供商。两者都是同一个查询的正确答案,这就是为什么许多人最终仍不确定自己安装了什么。

本指南把 WireGuard 视为其本来面目:一种拥有小巧、可读配置格式的协议。一旦你理解该文件中的那四五 行,大多数 WireGuard 问题——“它连上了但我的 IP 没变”“握手从未完成”“只有部分应用被隧道代理”——就不再是谜团,而变成你可以修复的设置。

WireGuard 是协议,不是订阅

WireGuard 是一种基于 Noise 协议框架构建的现代 VPN 协议。它使用 Curve25519 密钥对、ChaCha20-Poly1305 进行认证加密,并通过 UDP 承载流量。在 Linux 上它运行于内核;在 Windows、macOS、Android 和 iOS 上,官方客户端应用免费且开源。

这在实践中意味着:

  • 如果你有 WireGuard 配置文件(通常是 .conf 或二维码),你可以将其导入官方客户端并连接——无需供应商应用。
  • 如果你没有服务器,也没有为你生成对等端的提供商,那么仅凭配置文件毫无作用。WireGuard 不包含服务器、日志策略或 kill switch。
  • 因为协议小巧且格式标准,来自一个提供商的配置在结构上与其他提供商的并无不同。不同之处在于端点、对等端数量以及周边服务。

逐行解读 WireGuard 配置文件

一个最小客户端配置有两个部分。调试所需的一切都在这里:

[Interface]
PrivateKey = <client-private-key>
Address = 10.7.0.2/32
DNS = 10.7.0.1

[Peer]
PublicKey = <server-public-key>
Endpoint = vpn.example.net:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
  • PrivateKey — 密钥对中属于你的一端。把它当作密码对待;任何拥有它的人都能冒充你的对等端。
  • Address — 分配给你的隧道内部 IP。它不是你的公网 IP,绝不应被误认为公网 IP。
  • DNS — 隧道启用期间使用的解析器。省略这一行,你的系统可能继续查询 ISP 通过 DHCP 下发的 DNS 服务器,这是最常见的 WireGuard 泄漏。
  • PublicKey / Endpoint — 你在与谁通信,以及在哪里通信。端点是 UDP 主机和端口。
  • AllowedIPs — 最常被误读的一行。在客户端上它同时承担两项工作:编写路由表,并充当加密访问控制列表,决定对等端将接受你发往哪些目标 IP。0.0.0.0/0, ::/0 是全隧道。像 10.7.0.0/24 这样更窄的值是分离隧道,只将流量路由到该子网。
  • PersistentKeepalive — 每 N 秒发送一个 keepalive 数据包,以免 NAT 或防火墙在空闲期间丢弃会话。标准值为 25 或 15;设置得太低会浪费移动设备的电量。

如果你有意使用分离隧道,请收窄 AllowedIPs,而不是事后尝试过滤流量——这个设置正是为此而生。如果你希望所有流量都走隧道,但它没有,请先检查 AllowedIPs。

启动隧道并证明其可用

在安装了 wg-quick 的 Linux 和 macOS 上,配置位于 /etc/wireguard/wg0.conf:

sudo wg-quick up wg0
sudo wg show
ip route get 1.1.1.1
curl -s https://ifconfig.me/ip; echo

需要查看的内容:

  • wg show 应列出对等端、端点,以及最近几分钟内的 latest handshake 时间戳。没有握手意味着隧道没有在承载流量,即使接口存在。
  • ip route get 1.1.1.1 应显示你的 WireGuard 接口(例如 wg0),而不是正常的默认路由。
  • curl 应返回你所连接端点关联的公网 IP。
  • 要检查实际应答的是哪个解析器,请向你配置的 DNS 服务器查询一个 DNS 测试名称,而不是想当然认为 DNS = 这一行已生效。

在 Windows、macOS、Android 和 iOS 上,将同一配置导入官方应用。在 Android 和 iOS 上,你可以扫描二维码来导入配置。Android 官方客户端还支持“Always-on VPN”——只有在你确认隧道能可靠启动后才开启它,因为握手失败加上 always-on 会切断你的连接,而不是悄悄回退到开放网络。

三分钟验证流程

  1. 连接前记下你的公网 IP。
  2. 连接,然后用 wg show 检查握手时间戳。
  3. 再次检查你的公网 IP,并确认它已改变。
  4. 运行一次 DNS 查询,并确认应答的解析器与你的隧道配置匹配,而不是你的 ISP。
  5. 断开连接并确认 IP 恢复——如果没有恢复,你就留下了静态路由或 always-on 设置。

WireGuard vs OpenVPN vs SOCKS5 代理

这三种工具经常被拿来比较,但它们解决的问题不同。大致对照如下:

WireGuard OpenVPN SOCKS5 代理
范围 整个设备(或按子网分离隧道) 整个设备 按应用或按请求
协议 UDP(部分客户端增加 TCP 回退) TCP 或 UDP TCP(带 UDP 关联)
加密 是,在网络层 是,在网络层 否——隧道的保护程度仅取决于其上运行的流量
轮换出口 IP 否,每个接口一个对等端 默认否 是,如果提供商轮换
典型用途 私密浏览、远程访问、站点到站点链路 同上,但具有更广泛的旧版兼容性 爬取、地理位置检查、按应用路由、自动化

简而言之:当你希望机器上的所有流量都通过一个加密端点离开时,使用 WireGuard。当你希望某一个进程通过一个 IP 离开——浏览器、爬虫、单个 CLI 工具——并且想在不影响系统其余部分的情况下更改该 IP 时,使用 SOCKS5 代理。

WireGuard 的短板所在

在围绕 WireGuard 构建工作流之前,有两个真正的限制值得了解:

  • 它容易被识别,在某些网络上还会被封锁或限速。 握手特征明显,并且基于 UDP。在 UDP 被过滤的环境中——企业网络、部分校园网、部分国家网络——普通 WireGuard 隧道根本无法建立。它没有内置混淆层;任何伪装都必须来自客户端或包裹它的服务。
  • 它不会轮换。 一个 WireGuard 对等端映射到一个端点,你的公网 IP 就是该端点呈现的任何 IP。如果你的任务需要每个请求或每个区域使用新 IP,那么轮换代理池才是正确的工具,而 WireGuard 不合适。

这两个限制都不意味着 WireGuard 不好——它们使它成为一种特定工具。该协议被设计得小巧且可审计,这正是它速度快、行为可预测的原因。

何时 SOCKS5 代理是更好的选择

在以下情况下,选择代理而不是 VPN:

  • 只有一个应用需要走代理。 让浏览器或脚本走代理,而不影响系统其余流量。在 Linux 上通常是 proxychains 或按应用包装器;在 Windows 上,则是按可执行文件应用规则的工具。
  • 任务需要许多 IP。 网页抓取、价格监控和排名跟踪需要池和轮换策略,而不是一个稳定端点。注意按请求轮换与粘性会话之间的区别——在任何报告位置或价格的场景中,位置一致性比原始数量更重要。
  • 你在以特定地区测试网站。 目标国家的代理出口是查看该地区变体的更轻量、更快速的方式,而不是启动完整隧道。
  • 你无法控制这台机器。 在大多数平台上,导入配置需要管理员权限;而将单个应用指向 socks5h://host:port 通常不需要。

两者并不互斥。将代理连接路由到 WireGuard 隧道内部是一种常见模式:你获得通往信任服务器的加密传输,而代理在此基础上提供出口 IP 和轮换。只需清楚哪一层在做什么,因为 DNS 解析正是两者最常出现分歧的地方。

“VPN 已开启但什么都没变”的五个原因

  1. 没有 kill switch。 隧道掉线,一切悄悄回退到正常路由。
  2. AllowedIPs 太窄。 你设置了分离隧道却忘了,所以只有一个子网被路由。
  3. DNS 仍是本地的。 缺少 DNS = 这一行,或者某个应用正在使用 DNS-over-HTTPS 指向隧道外的解析器。
  4. 代理或第二个 VPN 已处于活动状态。 浏览器级别的代理设置会为该浏览器覆盖系统隧道;这是有意行为,但意外发生时令人困惑。
  5. IPv6。 如果你的配置仅覆盖 0.0.0.0/0 而未覆盖 ::/0,支持 IPv6 的目标可能会走未经过隧道的路径。

简短决策清单

在安装任何东西之前,先回答这三个问题:

  1. 整个设备需要走代理,还是只有一个应用?整个设备指向 WireGuard 或 OpenVPN;一个应用指向代理。
  2. 出口 IP 需要保持稳定,还是经常变化?稳定指向隧道;变化指向轮换代理池。
  3. 你所在的网络允许 UDP 吗?如果不允许,从一开始就计划基于 TCP 的回退或使用代理。

总结

WireGuard 是一种协议,配置只有五行,攻击面非常小,这就是它快速、可移植且易于验证的原因。仔细阅读 AllowedIPs 和 DNS,用 wg show 确认握手,然后检查公网 IP 和解析器——这四个步骤能解决大多数抱怨。当你的问题是“一个应用需要反复使用不同 IP”时,不要再试图用隧道解决,而应改用 SOCKS5 代理。这些工具是互补的,知道你在更改哪一层,是获得可用配置与花一下午调试路由之间的区别。