
快连如何在OpenWrt固件中设置开机自动订阅更新?
功能定位:为什么要在OpenWrt里做“开机自动订阅更新”
软路由7×24小时在线,但节点列表却每天变化。手动进LuCI点“更新订阅”既容易忘,也怕半夜断流。把“kuailian订阅链接”写进开机脚本,路由器每次重启都会自动拉取最新节点,再调用quicklink-socat重载进程,实现“无人值守”——这是跨境办公、远程监考、直播推流等场景最在意的“自愈”能力。
与PC客户端的“定时更新”不同,OpenWrt方案把订阅逻辑下沉到procd守护,即使wan口拨号晚于启动序列,也能靠retry机制在后台补跑;同时规避了“订阅文件落在/tmp重启即失”的陷阱。经验性观察:同一条200-Mbps的IPLC线路,在节点切换后丢包率从1.2%降到0.2%,而全程无需登录路由器。
前置条件与版本边界
硬件与固件
- RAM≥256 MB,闪存≥128 MB,确保能装下
quicklink-openwrt及其依赖(ca-bundle、curl、jsonfilter、ca-certificates)。 - OpenWrt官方或基于官方源码的社区版,版本号≥21.02;截至当前的最新版本已验证可用,低于19.07的iptables语法差异过大,不建议尝试。
快连侧准备
登录官网后台→“设备管理”→“路由器”→复制“订阅地址(Subscription URL)”,类型选“Clash/YAML”即可,后续脚本会自行转换。注意:同一账号最多同时在线10台,若已超限,需先踢掉旧设备。
决策树:三种常见方案对比
| 方案 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| A. LuCI定时任务 | 系统→计划任务,加curl|quicklink reload | 图形化,零命令行 | 重启后首次更新需等下一个整点 |
| B. procd开机脚本 | 本文主推,/etc/init.d/quicklink-sub | 立即执行,失败自动退避 | 需SSH写文件 |
| C. 第三方插件 | passwall/openclash自带订阅 | 规则丰富 | 插件体积大,与quicklink内核并存时可能端口冲突 |
若你追求“装完忘记”,选B;若家里还有老人需要图形界面,选A;若本来就用passwall做主引擎,可把快连节点当“前置链”导入,但需手动处理UUID重复问题。
操作路径:procd开机脚本五步法
1. SSH进入路由器
Windows可用PuTTY,macOS直接Terminal:ssh [email protected]。首次连接会提示保存指纹,输入密码后进入Shell。
2. 创建订阅脚本
cat > /usr/bin/quicklink-sub.sh << 'EOF'
#!/bin/sh
SUB_URL="https://sub.quicklink.net/xxxx&flag=clash"
CONFIG_FILE="/etc/quicklink/proxy.yaml"
LOG_FILE="/var/log/quicklink-sub.log"
/usr/bin/curl -Ls --retry 3 --retry-delay 5 "$SUB_URL" -o "${CONFIG_FILE}.tmp" \
&& /usr/bin/jsonfilter -i "${CONFIG_FILE}.tmp" -e "@.proxies" >/dev/null \
&& mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE" \
&& /etc/init.d/quicklink reload >> "$LOG_FILE" 2>&1
EOF
chmod +x /usr/bin/quicklink-sub.sh
说明:curl三次重试应对拨号未完成;jsonfilter简易校验防止下载到404页面;最后reload会热更新节点,不断网。
3. 写成procd服务
cat > /etc/init.d/quicklink-sub << 'EOF'
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /usr/bin/quicklink-sub.sh
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
EOF
chmod +x /etc/init.d/quicklink-sub
4. 启用并立即执行一次
/etc/init.d/quicklink-sub enable /etc/init.d/quicklink-sub start logread -e quicklink-sub # 查看是否成功
5. 设置定时兜底(可选)
若路由器很少重启,可在计划任务里加每天4点补一次:
echo "0 4 * * * /usr/bin/quicklink-sub.sh" >> /etc/crontabs/root
/etc/init.d/cron enable && /etc/init.d/cron start
验证与观测方法
- 看日志:
logread | grep quicklink出现“reload completed”即表示订阅已生效。 - 看节点: 在LuCI→服务→QuickLink→节点列表,确认时间戳与官网后台一致(误差≤2分钟)。
- 看IP: 去ipinfo.io,对比路由器wan IP与出口IP,若显示“Japan/Tokyo”等目标地区即证明已走专线。
sub.quicklink.net写进/etc/hosts并配备用IP,或改用DoH(dnsmasq+https-dns-proxy)。
常见故障与回退
现象:开机后脚本执行,但节点数为0
原因:wan口未获取到IP,curl提前失败。处置:在脚本最前面加sleep 30,或改用procd的network_find_wan等待事件。
现象:reload后断网30秒
原因:TUN接口重建导致默认路由消失。处置:在QuickLink配置里开“保留默认路由”,或把quicklink-tun的metric调高,让PPP拨号路由优先。
现象:/var/log被清,找不到历史
原因:/var挂载在tmpfs。处置:把LOG_FILE改到/etc/quicklink/log,或安装logd-persistent。
不适用场景与合规提醒
- 单位/校园网已做802.1X认证,重启后需网页二次登录,此时开机脚本无法先于认证完成,需人工介入。
- 当地法律要求对跨境链路进行事前备案,快连虽通过瑞士无日志审计,但使用者仍需自行确认合规边界。
- 设备闪存寿命<1000次写入,频繁订阅(每小时)可能加速老化,建议周期≥6小时。
最佳实践清单(可直接打勾)
FAQ(使用FAQPage Schema)
快连订阅文件格式只能用Clash吗?
官网提供Clash、Base64、Surge三种格式,脚本里把flag参数换成对应值即可;OpenWrt插件默认调用YAML,故本文示例用Clash。
能否把订阅周期缩短到5分钟?
技术上可把cron写成*/5,但经验性观察:节点池每天凌晨才整体调度,5分钟级拉取基本拿到相同列表,反而浪费闪存寿命,建议≥6小时。
脚本更新失败会反复重启吗?
procd默认无限respawn,已用curl重试+jsonfilter校验,若仍失败进程会挂起但不再频繁重启;可手动/etc/init.d/quicklink-sub stop暂停。
总结与下一步
把“kuailian订阅更新”做成OpenWrt开机自启,本质是把不确定性变成可观测指标:脚本用标准工具(curl+jsonfilter),日志集中,失败可回退。只要按本文清单验证,路由器重启后无需再手动找节点,跨境会议、4K流媒体、外服游戏都能第一时间走上最优专线。
下一步,你可把脚本推到GitHub私有仓,用GitHub Actions监控官网订阅内容变化,一旦SHA256变动就自动发Push通知到路由器——实现“云触发+本地零周期”的进阶玩法;或者把能耗仪表盘数据接入Home Assistant,让节点延迟与家庭功耗同屏可视化。先完成开机自启,再谈自动化2.0,软路由的折腾乐趣才刚开始。