本文目录导读:

- 方案一:使用基于 Keepalive + Peer Endpoint 检测(最基础)
- 方案二:使用 Wg-quick 自带的 fwmark + 路由策略 + mtu 检测(较高级)
- 方案三:使用 keepalived / FRR 与 BFD 联动(专业级黑洞检测)
- 方案四:QuickQ 系统自带的“链路检测”功能(最简单)
- 针对你的 QuickQ 系统的实操建议
QuickQ 的 WireGuard 黑洞检测,这通常指的是如何检测 WireGuard 对端节点是否已失效(即进入黑洞状态),并自动触发流量切换或告警。
由于“QuickQ”这个名称可能指代不同的路由系统或定制化固件(如 QuickQ 基于 OpenWrt、RouterOS 或其他平台的二次开发),具体的配置路径会有差异,但底层原理和通用实现方法是一致的。
以下是几种主流的实现方案,请根据你的 QuickQ 系统支持的能力选择:
使用基于 Keepalive + Peer Endpoint 检测(最基础)
这是 WireGuard 自带的被动检测机制,适用于检测对端是否“不可达”,但不适用于检测对端的 WireGuard 服务进程是否“死锁”。
- 原理:WireGuard 通过
PersistentKeepalive定时发送空包,保持 NAT 映射和连接状态,如果长时间收不到对端的响应,WireGuard 会将latest-handshake时间戳增长。 - QuickQ 中的操作:
- 在 WireGuard 接口配置中,找到对端的 Peer 设置。
- 启用并设置
PersistentKeepalive = 25(推荐 25-30 秒)。 - 黑洞检测阈值:QuickQ 通常会在状态页面显示“Last Handshake”时间,如果该时间持续增加超过 120-180 秒,可以手动判断或编写脚本来处理(如切换路由)。
- 局限性:WireGuard 本身没有“断开重连”机制,如果对端内核崩溃或路由错误,Keepalive 收不到回复,但你无法自动切换,它更多是被动告警。
使用 Wg-quick 自带的 fwmark + 路由策略 + mtu 检测(较高级)
如果你使用的是 Linux 内核的 WireGuard 且 QuickQ 支持自定义脚本,可以利用 WireGuard 的 fwmark 特性来做活跃性检测。
- 原理:将 WireGuard 接口的流量打上特殊的
fwmark,然后创建一条策略路由,让 Ping 检测流量走这条策略路由(不受主路由表影响),同时检查 IP 地址的联通性。 - QuickQ 中的操作(需进入 shell 或高级设置):
- 在 WireGuard 配置中,为接口设置
Table = off或自定义路由表Table = 100。 - 设置
FwMark = 0xca6c(这是一个示例值)。 - 添加监测脚本(cron 任务):
#!/bin/sh # 检测目标 IP(例如对端的内网IP或公网IP) PEER_IP="10.0.0.2" # 使用 fwmark 强制检测流量走 WireGuard 接口 if ! ping -c 3 -I wg0 $PEER_IP > /dev/null 2>&1; then # ping 不通,则认为进入黑洞 echo "WireGuard peer $PEER_IP 黑洞!执行切换..." # 执行你的切换逻辑,例如修改路由表或重启接口 # ip route del default via ... fi - 注意:需要确保
wg-quick生成的策略路由规则允许检测流量正确被路由。
- 在 WireGuard 配置中,为接口设置
使用 keepalived / FRR 与 BFD 联动(专业级黑洞检测)
适合 QuickQ 系统支持 keepalived 或 FRR(Free Range Routing)等高级路由协议的情况。
- 原理:通过 BFD(双向转发检测) 协议对 WireGuard 隧道进行毫秒级的心跳检测,一旦 BFD 会话中断,会立即通知上层路由协议(如 OSPF/BGP),将流量切换到备份链路。
- QuickQ 中的操作:
- 安装
frr或bird和keepalived。 - 配置 BFD:
bfd peer 10.0.0.2 detect-multiplier 3 min-tx 100 min-rx 100 ! - 配置 OSPF/BGP:将 WireGuard 接口配置为 OSPF 或 BGP 邻居,并关联 BFD。
- 当 BFD 检测到 WireGuard 隧道不通时,OSPF/BGP 会立即收回该路由,实现秒级黑洞逃生。
- 安装
- 优点:真正的硬件级检测,速度快,适合多出口、多隧道的复杂网络。
QuickQ 系统自带的“链路检测”功能(最简单)
许多 QuickQ 固件(尤其是基于 OpenWrt 或 RouterOS 的二次开发)在 “网络” -> “诊断” 或 “隧道” 菜单下,直接集成了 “黑洞检测” 或 “保活检测” 功能。
- 操作步骤:
- 找到你的 WireGuard 隧道配置页面。
- 查找 “高级设置” 或 “故障转移” 选项卡。
- 启用 “健康检查”。
- 检测目标:填写一个位于 WireGuard 隧道对端内部网络中的稳定 IP(
0.0.1)。不要填写对端的公网 IP,因为公网 IP 可能走的是 WAN 口直接路由,无法反映隧道状态。 - 检测间隔:设置 3-5 秒。
- 失败阈值:设置连续失败 3 次。
- 动作:选择“重启接口”、“切换路由表”或“告警”。
针对你的 QuickQ 系统的实操建议
- 先试试 Web 界面:登录 QuickQ 后台,进入 VPN -> WireGuard -> 点击你的 Peer -> 查看是否有 “健康检查” 或 “高级” 选项。
- 查看日志:在 系统日志 中搜索
wireguard或wg,看是否有Handshake did not complete或Peer is unreachable等关键词,这可以帮你判断系统是否已经内置了被动检测。 - 如果以上都不适用:请提供你的 QuickQ 系统版本号或固件来源(是 iKuai、OpenWrt 魔改还是其他?),我可以给出更具体的配置参数,最通用的方案是方案二(脚本 + fwmark),但需要你有 Shell 访问权限。
对于大多数 QuickQ 轻量用户,推荐使用方案四(系统自带功能),如果系统没有,请用方案二(脚本定时 Ping + 自动切换)。