WireGuard · 已发布教程
WireGuard 连通性核对:接口、密钥、AllowedIPs、握手与路由
按接口、peer、系统路由和目标业务逐层核对 Linux WireGuard,使用不输出私钥的查询字段,区分握手与业务可达性,并理解配置加载和恢复的边界。
先确认接口、地址和观察范围
WireGuard 通过网络接口承载隧道内 IP 流量,并使用 UDP 传输加密数据。先列出当前能观察到的 WireGuard 接口,再把接口名称与地址列表、实际监听端口对应起来,不预设接口名或端口。
下面的地址命令会列出当前网络命名空间中的各接口;只把目标 WireGuard 接口的条目用于本次判断。命令不存在、权限被拒绝和列表为空是不同情况,应先核对已安装的工具、授权及运行环境,不能都归为隧道故障。
sudo 不会自动切换到业务所在的网络命名空间。官方文档说明,WireGuard 接口可以迁移到其他命名空间,而用于收发加密 UDP 的 socket 留在接口最初创建的命名空间;容器场景要分别确认隧道接口与外层网络的观察位置。
本文的工具语义以 wireguard-tools v1.0.20250521 和 iproute2 v6.12.0 为可复查基线。实际发行版的软件包、网络管理器和命名空间安排仍需按本机情况核对,接口存在本身也不能证明目标业务已经连通。
sudo wg show interfaces
ip -brief address show
sudo wg show all listen-port区分密钥保密与可分享的诊断信息
接口私钥和 peer 的预共享密钥属于秘密,不能放进截图、公开工单或诊断日志。公钥用于识别 peer,可以按授权需要交换,但公钥、端点和地址范围组合起来仍可能暴露网络拓扑。
wg 手册明确说明,dump 输出包含接口私钥和 peer 的预共享密钥;showconf 会输出配置文件格式的当前配置。wg-quick strip 去掉的是 wg-quick 扩展选项,不是秘密字段,不能把它当作配置脱敏工具。
WG_HIDE_KEYS 仅控制普通格式的 show 如何显示密钥,不保护 dump、显式密钥查询或配置导出。本教程只使用指定的非密钥查询字段,不要求读取完整配置或生成新的密钥。
核对配置来源时,应在受控环境检查文件及备份的访问权限,不把完整内容复制到终端记录。官方快速入门在生成密钥前使用限制性文件权限;现有密钥的权限、保存位置与轮换应交由实际配置管理流程核实,而不是通过公开诊断重新生成。
核对 peer 与 AllowedIPs 的双向含义
查询结果按接口和 peer 公钥区分记录。先确认目标 peer 身份,再把本端配置的 AllowedIPs 与实际业务的隧道内地址范围核对,避免拿另一个 peer 的规则解释当前流量。
官方 Cryptokey Routing 概念说明:发送时按隧道内目标 IP 选择 peer;接收时,解密并认证后的隧道内源 IP 必须属于该 peer 获准的范围。这两种方向需要分别核对,不能只检查本端要访问的目标地址。
AllowedIPs 不是端口开放清单,也不单独证明系统已经建立正确路由。应同时确认对端用于返回流量的地址范围,以及本端和对端实际地址、路由与访问控制;覆盖整个地址族的范围还会扩大路由和入站源地址匹配边界,需要与业务目的逐项对应。
sudo wg show all allowed-ips联合观察端点、握手和收发计数
把 endpoints、latest-handshakes、transfer 和 persistent-keepalive 的结果按接口与 peer 公钥对应起来。实际端点可能在收到该 peer 正确认证的数据后更新,因此配置文件中的初始端点与当前观察值不一定相同。
此版本的脚本式输出中,latest-handshakes 给出握手时间戳,transfer 的两项计数依次是接收字节与发送字节。计数是累计状态,不是即时速率;握手记录也不证明隧道内每个目标服务、DNS 或返回路径都可用。
WireGuard 默认在没有数据需要发送时保持安静。先记录获准业务操作前后的状态,再判断握手与计数是否发生相关变化;空闲时握手时间较旧或计数没有增长,不能单独认定连接故障。
PersistentKeepalive 用于需要维持 NAT 或状态防火墙映射的场景,默认关闭,并非所有 peer 都需要。它不能替代 UDP 路径、端口访问控制和系统路由检查;应先确认实际需求,不把开启 keepalive 当作通用修复。
sudo wg show all endpoints
sudo wg show all latest-handshakes
sudo wg show all transfer
sudo wg show all persistent-keepalive把系统路由与 AllowedIPs 对照起来
从目标业务的实际地址出发,检查相应地址族的路由表和策略规则,确认流量应从哪个接口、哪张表发出,并核对对端的返回路径。还要区分隧道内业务目标与承载加密 UDP 的外层端点,不能把两者的出接口要求混在一起。
wg-quick 会从 peer 的 AllowedIPs 推导并创建路由,遇到默认路由时还会使用 ip-rule 处理默认网关选择。只看 main 表可能漏掉实际生效的策略路径;IPv4 与 IPv6 也要分别检查。
Table 控制 wg-quick 创建路由的位置与方式,off 会关闭它的自动路由创建,但不表示系统不存在其他路由。由其他网络管理器配置的接口也不一定采用 wg-quick 的规则,应把查询结果与真正负责加载配置的工具对应起来。
这些命令只列出当前状态,不替业务做连通性测试。若路由或规则与预期不符,先确认配置来源及影响范围,不直接清空路由表、替换默认路由或放宽防火墙。
ip -4 route show table all
ip -6 route show table all
ip -4 rule show
ip -6 rule show区分运行状态、配置文件与加载器
先识别接口实际由 wg-quick、网络管理器还是其他受控流程管理,再查对应配置来源。wg-quick 接收接口名时会先查找 /etc/wireguard 下的对应配置,手册还允许发行版特定搜索路径;文件存在不等于当前运行状态已经采用它。
Address、DNS、Table 与 hooks 等是 wg-quick 在 wg 配置格式之外处理的扩展项。此版本手册中的 DNS 处理调用 resolvconf,不能把这套流程直接套到所有网络管理器;wg 的配置加载也不等于同时配置好了接口地址、DNS 和系统路由。
wg-quick up 会设置接口、地址和路由,并可能执行 hooks;down 会拆除接口并可能保存配置;save 会写入配置。它们不是只读检查操作。PreUp、PostUp、PreDown 和 PostDown 是会由 shell 执行的片段,不是备注,加载来源不明的配置也就可能执行其中的命令。
SaveConfig 启用后,wg-quick 关闭接口时会按运行状态保存配置,关闭前对文件所做的修改可能被覆盖。评审变更时要先记录原文件、原运行状态、加载方式及恢复步骤,不能仅靠编辑文件或重复启动就认定设置已经生效。
下面仅解释真实配置项,所有行均为注释,不含密钥、地址或可直接应用的网络配置。实际加载与恢复属于另一步,应由已确认的配置管理流程执行,再回到接口、peer 和路由检查逐项复核。
# 配置项说明;不会加载配置或更改网络。
# Address:wg-quick 配置的接口地址。
# Table:wg-quick 自动创建路由的方式。
# SaveConfig:启用后,wg-quick 关闭时保存配置。
# PreUp / PostUp:启动前后执行的 shell 片段。
# PreDown / PostDown:关闭前后执行的 shell 片段。按接口、peer、路由和目标业务逐层定位
当前看不到接口时,先核实工具、权限、网络命名空间和配置管理者;能看到接口时,再核对实际地址与 peer 身份。不要跳过这些前提,把同名接口、另一台主机或另一个容器的结果拼成一份结论。
有 peer 但在获准业务操作期间没有预期握手时,检查双方公钥对应关系、当前端点与 UDP 路径。握手存在而目标业务仍失败时,继续检查双向 AllowedIPs、系统路由、返回路径、访问控制和目标服务,不能因握手成功就停止排查。
若仅名称访问失败,应另查实际 DNS 配置与解析过程;若仅部分地址族或目标失败,则按相同接口、peer 与地址族重新对照记录。这些现象用于缩小排查范围,不代表已经确定了单一原因。
确需变更时,应保存必要的脱敏诊断记录和受控配置备份,确认维护窗口及 SSH 或控制台恢复入口。恢复后重新核对接口、peer、路由、管理访问和目标业务;一次命令成功或某个计数增长,都不能替代完整复核。
相关阅读中的 UFW 教程用于核对宿主机端口访问控制,SSH 教程用于核对管理服务与恢复前提。两者帮助检查 WireGuard 周边依赖,不替代对隧道本身和业务返回路径的核验。