本文适合已经持有自己服务商提供的 WireGuard 参数、准备在 Shadowrocket 手动配置的用户。先分清本机与 Peer 的密钥,再核对 Address、Endpoint 和 MTU,最后用 Global Routing 与连接现象定位问题。示例地址只说明格式,不是可用服务;排查过程不需要公开 PrivateKey 或完整配置。
一、添加前先确认参数属于哪一端
Shadowrocket(小火箭)是 Apple 平台的付费客户端,主要用于 iPhone 与 iPad。唯一获取入口是 App Store,开发者为 Shadow Launch Technology Limited,应用 ID 为 932747118,采用一次性买断。系统要求以 App Store 页面标注为准。客户端买断 ≠ 线路套餐;本站不提供、不销售、不推荐节点或订阅。
WireGuard 使用密钥识别通信双方。配置中的 [Interface] 通常描述本机,[Peer] 描述远端。Shadowrocket 的服务器编辑表单不是原始配置文件编辑器,字段可能分开展示;填写时应按含义对应,不能把整个配置文件粘贴进单个字段。
开始前应取得本机 PrivateKey、本机 Address、远端 PublicKey、Endpoint,以及服务商要求的其他参数。若配置含 PresharedKey,也要一并保留。只有一串 PublicKey 或一个服务器地址,不足以完成配置。服务端还需要登记与本机 PrivateKey 配对的 PublicKey,并允许对应的隧道地址。
二、从 Home 添加 WireGuard 类型服务器
先保留原始参数,再创建单独的测试记录。下列路径以英文界面词说明;各字段的排列以当前应用为准。不要把 WireGuard 原始配置当作 Subscribe 链接添加,也不要假设已有订阅中的其他协议参数能够直接转换成 WireGuard。
-
打开添加页
进入 Home → 右上角「+」→ Type,选择 WireGuard。确认当前编辑的是单个服务器记录,而不是 Subscribe 项目。
-
填写远端
把 Endpoint 对应的主机和端口填入服务器地址、端口字段。例如
vpn.example.com:51820表示主机为vpn.example.com,端口为51820;若表单分栏,不要在主机栏重复附加端口。 -
填写本机
按原始配置填写 PrivateKey 与 Address。Address 是分配给本机的隧道地址,不是 Endpoint,也不是当前 Wi-Fi 的局域网地址。
-
核对 Peer
在对应字段填入远端 PublicKey。仅在服务商配置明确包含 PresharedKey 时填写该项;不要用 PublicKey 代替,也不要自行添加一个随机值。
-
保存并测试
按原配置核对 MTU 等可用字段后保存,返回 Home 选中刚添加的记录。首次测试可暂用 Global Routing → Proxy,再开启 Home 的连接开关;首次建立系统 VPN 配置时按系统提示确认。
三、PrivateKey、PublicKey 与 Peer 的对应关系
最常见的密钥错误不是长度不对,而是填反了通信双方。PrivateKey 留在本机;Peer 的 PublicKey 用来识别远端。服务端配置中需要记录的则是本机 PublicKey。两端看到的 Peer 指向相反,因此不能把服务端整段 Peer 参数原样当成本机的 Peer 参数。
本机参数
- PrivateKey
- 本机私钥,必须与服务端登记的本机 PublicKey 配对。
- Address
- 本机隧道地址,例如
10.7.0.2/32;以分配值为准。 - MTU
- 隧道接口允许的最大 IP 包长度,先遵循原始配置。
PrivateKey 与 Address 属于本机侧,不从远端 Endpoint 推算。
Peer 参数
- PublicKey
- 远端公钥,必须与实际连接的服务端私钥配对。
- Endpoint
- 远端可达的主机及 UDP 端口,例如
vpn.example.com:51820。 - PresharedKey
- 可选的额外共享密钥;启用时两端必须一致。
Peer 表示通信对端,不表示订阅分组或规则策略组。
标准 WireGuard 密钥的 Base64 文本通常为 44 个字符,末尾包含 =。这个特征只能帮助发现截断或复制错误,不能证明密钥配对正确。复制时保留末尾字符,去掉误带入的空格、换行和引号;不要把 PrivateKey = 这样的字段名一并填入值中。
- 替换 PrivateKey 后失效:更换私钥会改变本机 PublicKey。服务端未更新登记时,新身份不能按旧配置通信。
- 复制到第二台设备后不稳定:多台设备同时使用同一密钥身份,可能导致远端学习到的通信地址来回变化。应由服务商分别分配身份及地址。
- PresharedKey 留空后失效:如果远端要求此项,本机也必须填写完全相同的值。它不是可以随意省略的备注。
四、Address、Endpoint 与 AllowedIPs 不可混填
Address 描述隧道内的本机地址,Endpoint 描述隧道外的远端入口。以 10.7.0.2/32 为例,斜杠后的数值是 CIDR 前缀长度,不是端口。不要把它改成 10.7.0.2:32。如果服务商同时分配 IPv4 与 IPv6,应分别对应填写,不要自行生成一个看似相近的地址。
| 字段 | 格式示例 | 检查重点 |
|---|---|---|
| Address | 10.7.0.2/32 | 本机隧道地址;必须与服务端分配一致。 |
| Endpoint | vpn.example.com:51820 | 主机可解析,UDP 端口与远端监听一致。 |
| IPv6 Endpoint | [2001:db8::1]:51820 | 这是组合形式的示例;主机与端口分栏时按字段分别填写。 |
| AllowedIPs | 0.0.0.0/0, ::/0 | 原始 WireGuard 配置中的 Peer 地址范围,不是 Shadowrocket 的 Rule 文本。 |
| DNS | 10.7.0.1 | 仅为格式示例;实际地址须可经当前路由访问。 |
上述域名及地址均用于说明语法,不能据此建立连接。Endpoint 不加 https://,也不填写订阅路径。若原始 Endpoint 使用域名,建立隧道前必须能够解析它;因此“连接后使用哪个 DNS”与“连接前能否解析 Endpoint”是两个不同问题。
在原生 WireGuard 配置中,AllowedIPs 参与 Peer 的出站选择与入站源地址检查。客户端常见的 0.0.0.0/0 与 ::/0 表示覆盖全部 IPv4、IPv6 地址范围;服务端对某个客户端的 Peer 往往只允许该客户端分配到的地址。两端不能机械地填写同一范围。Shadowrocket 中业务流量是否交给该服务器,还要看 Global Routing、当前 Config 和策略选择,不应把 AllowedIPs 当成应用内分流规则。
五、MTU 与 PersistentKeepalive 的调整边界
MTU 不是带宽数值。WireGuard 封装会增加外层数据开销,隧道内允许的包长度需要适配实际路径。原配置已指定 MTU 时先照填;未指定时先保留应用的默认处理。不要因为某个网页加载慢,就同时改 MTU、DNS、端口与密钥,否则无法判断哪项改动产生了影响。
- 何时考虑 MTU:连接建立后,小请求正常,但较大的响应持续停顿,才值得把路径 MTU 列入排查。该现象也可能来自丢包或远端问题,不能单凭一次加载失败下结论。
- 如何做单变量测试:记录原值。若原值为
1420,可以在服务商允许的范围内暂改为1380,重连后访问同一目标并比较;这两个数值是测试例子,不是通用最佳值。 - 如何处理 IPv6:不要为试错而随意降到
1280以下。IPv6 对链路 MTU 有最低要求,使用 IPv6 时尤其应与服务端配置及实际路径一并核对。 - 如何恢复:若修改没有形成可重复的改善,恢复原值。不要把某个网络环境下有效的数值直接套到全部设备和网络。
PersistentKeepalive 用于定期发送保活包,常见用途是维持 NAT 映射,不是提升带宽。原始配置中的 PersistentKeepalive = 25 表示约每 25 秒发送保活;这是常见设置示例,不表示 Shadowrocket 的固定默认值。只有当前界面提供对应字段且服务商要求时才按其配置填写,不要把整行写进其他参数栏。
六、用 Global Routing 区分协议问题与规则问题
保存 WireGuard 记录只完成了服务器参数配置。Home 负责选择与连接,Config 负责规则配置,Settings 包含 On Demand 等设置。排查时先固定同一个服务器、同一个目标与同一个网络,再比较 Global Routing 的不同选项;不要切换服务器后把现象全部归因于规则。
Proxy
推荐用于本轮初始排查:让进入 Shadowrocket 的一般业务流量按 Proxy 方式处理,减少 Config 规则分支的影响。仍需确认选中的是待测 WireGuard 记录;此选项不会修复错误密钥或不可达的 Endpoint。
适合:先验证 WireGuard 参数和远端转发能力
Config
按当前配置中的规则和策略处理流量。若 Proxy 下目标正常、Config 下异常,应检查规则顺序、命中的策略以及策略实际选用的服务器,而不是立刻重新生成密钥。
适合:参数验证完成后的规则分流与逐项核对
Direct
让一般业务流量直接连接。目标在此状态可访问,只能说明直连路径可用,不能证明 WireGuard 通道可用,也不适合用来确认 WireGuard 的出口结果。
适合:与直连网络现象作对照
Global Routing 中还可能使用 Scene 按场景切换路由设置。初次排查应先固定选项,不让场景条件改变测试路径。下面是 Config 中 [Rule] 段的语法示例,不是 WireGuard 服务器参数;测试前应先备份当前 Config,不要直接覆盖整个配置文件。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
这些规则按顺序匹配:DOMAIN-SUFFIX 匹配域名后缀,IP-CIDR 匹配地址范围,GEOIP 按 IP 地理数据库判断,FINAL 承接前面未命中的流量。示例中访问 example.com 的子域名会先命中第一行;其余流量并非一律直连,而是继续向下匹配。PROXY 最终使用的服务器还需在应用中核对。
七、按现象提交排查信息,不提交私钥
完成以上步骤后,仍应区分“无法与远端建立有效通信”与“已有隧道流量但目标不可用”。前者优先核对密钥、Endpoint 与 UDP 可达性,后者再检查 DNS、服务端转发、AllowedIPs 和 MTU。WireGuard 对无效请求可能不返回可读错误,因此界面没有明确报错并不代表所有字段正确。
| 观察现象 | 优先检查 | 下一步动作 |
|---|---|---|
| 发起请求后只有发送量增加 | Endpoint、UDP 路径、Peer 密钥及 PresharedKey | 核对原参数,请服务商检查服务端是否收到请求。 |
| 连接后域名目标普遍失败 | DNS 可达性、解析结果、当前路由 | 保留失败域名与时间,区分解析失败和连接目标失败。 |
| Proxy 正常,Config 异常 | Config 规则命中与策略选择 | 检查目标命中的规则,以及 PROXY 所选服务器。 |
| 空闲一段时间后请求失败 | NAT 映射、网络切换、保活要求 | 重连作对照,再与服务商核对 PersistentKeepalive。 |
| 小请求成功,大响应停顿 | 路径 MTU、丢包、服务端转发 | 一次只改一个参数,记录调整前后相同请求的结果。 |
联系自己的服务商时,可提供故障发生时间、Wi-Fi 或蜂窝网络、当前 Global Routing、脱敏后的 Endpoint、是否有收发变化,以及单变量测试结果。不要提交 PrivateKey、PresharedKey、完整配置文件或带凭据的订阅链接。若密钥已泄露,应申请更换身份并撤销旧配置,而不是仅修改记录名称。
- 测试完成后恢复原来的 Global Routing,并确认当前 Config 与服务器选择。
- 需要自动连接时,再到 Settings → On Demand 恢复设置,分别验证 Wi-Fi 与蜂窝网络下的行为。
- 保留必要的参数变更记录,但不要把密钥粘贴到公共笔记、截图或公开讨论中。