快连在梅林固件如何设置开机自启并防止掉线?

问题背景:为什么梅林需要额外折腾
kuailian(Kuailian privacy tool)在路由器侧跑的是透明代理模式,梅林固件虽然自带"privacy tool Client"入口,但官方插件只保证"能连",并不负责"一直连"。断电、IP漂移、内核热补丁都会导致tun0口消失,而梅林重启后不会自动拉起第三方二进制,于是出现"开机掉线"与"半夜掉线"两种常见投诉。本文给出一条工程化路径:让快连随梅林开机自启,再用轻量级守护脚本把异常断线拉回,全程不刷第三方ROM,也无需关闭签名验证。
前置检查:版本、分区与权限
1. 固件版本门槛
经验性观察:386.xx及以上内核的梅林才完整支持user-space tun与policy-based routing(PBR)。低于此版本需先升级,否则后面脚本里ip rule会报"Invalid argument"。升级线路:官方Web UI→系统管理→固件更新→"从服务器下载",保持配置并自动重启即可。
2. JFFS分区剩余空间
快连Linux端二进制约8 MB,加上脚本与日志,建议预留≥20 MB。路径:系统管理→系统信息→JFFS→可用空间。若不足,先清理/software/里旧包或把日志改到U盘(后文给出方法)。
3. 关闭"自动拨号重连"的副作用
梅林默认开启"WAN重连时自动重拨privacy tool Client",会与自定义脚本抢tun0,导致双实例冲突。务必在privacy tool Client→privacy tool服务器列表→"自动重连"选"关闭",后续由我们自己守护。
安装快连路由器端:两条路线对比
A. 官方离线包(零配置)
适用场景:不想SSH。步骤:下载后缀为.w的梅林安装包→Web UI→系统管理→软件中心→离线安装。装完在"快连"标签页扫码登录即可。缺点是升级通道不可控,且默认不写init-start,重启后需手动点"连接"。
B. 纯命令行(可定制)
适用场景:需要把二进制放进/jffs/以保留日志、改端口或做双开。步骤:解压tar包→把kuailian-core与kuailian-cli拷到/jffs/kuailian/→赋755权限。此路线后面脚本示例默认使用该路径,如用官方包只需把路径改成/opt/sbin即可,逻辑相同。
决策树:选哪种自启钩子
梅林启动流程:内核→rc.init→services-start→init-start→net-start→wan-start→privacy tool-start→rc.finish。钩子越靠前,越早启动,但也越早被后续服务覆盖路由表。
- init-start:在网络协议栈尚未完全初始化时运行,适合提前建tun0,但需自行等待wan口IP。
- wan-start:wan IP已分配,路由表刚刷新,官方privacy tool Client也在此时拉起,冲突概率最高。
- privacy tool-start:官方privacy tool Client跑完后触发,适合"补刀"式启动,但延迟+5~8 s。
结论:快连对时序不敏感,选privacy tool-start最稳;若你同时跑Suricata等IPS,可提前到init-start并在脚本里sleep 10轮询wan IP。
脚本1:开机自启(privacy tool-start)
#!/bin/sh # 文件:/jffs/scripts/privacy tool-start # 作用:拉起快连核心进程,并写日志 KPATH="/jffs/kuailian" LOG="/jffs/logs/kuailian.log" mkdir -p $(dirname $LOG) # 等待官方privacy tool Client跑完,避免双tun sleep 3 # 如已有tun0,先清理 if ifconfig tun0 >/dev/null; then ifconfig tun0 down fi # 启动核心 $KPATH/kuailian-core -c $KPATH/kuailian.conf >>$LOG 2>&1 & echo "$(date) kuailian-core started" >>$LOG exit 0
保存后赋可执行:chmod 755 /jffs/scripts/privacy tool-start。重启路由器,系统日志里出现"kuailian-core started"即成功。
脚本2:守护进程(cron+健康检查)
掉线场景通常分三类:tun0消失、IP被墙、进程僵尸。守护脚本每分钟跑一次,任何异常都先kill残留再重启,比盲目restart更省CPU。
#!/bin/sh # 文件:/jffs/scripts/kuailian_watchdog.sh LOG="/jffs/logs/kuailian.log" KPATH="/jffs/kuailian" # 1. 进程是否存在 if ! pgrep -x kuailian-core >/dev/null; then echo "$(date) core lost, restarting" >>$LOG $KPATH/kuailian-core -c $KPATH/kuailian.conf >>$LOG 2>&1 & exit 0 fi # 2. tun0是否存在 if ! ifconfig tun0 >/dev/null; then echo "$(date) tun0 missing, restart core" >>$LOG pkill -x kuailian-core sleep 2 $KPATH/kuailian-core -c $KPATH/kuailian.conf >>$LOG 2>&1 & exit 0 fi # 3. 远端是否可通(经验性观察:用8.8.8.8:53 UDP探活) if ! nc -z -u -w1 8.8.8.8 53; then echo "$(date) uplink dead, restart core" >>$LOG pkill -x kuailian-core sleep 2 $KPATH/kuailian-core -c $KPATH/kuailian.conf >>$LOG 2>&1 & fi
加入cron:Web UI→系统管理→任务计划→"自定义1"填*/1 * * * * /jffs/scripts/kuailian_watchdog.sh,保存并应用。观察/jffs/logs/kuailian.log,若出现"restart"间隔>1次/10分钟,需调高探测门限或检查节点质量。
边界条件:何时不该用守护脚本
- 路由器RAM<256 MB:每分钟fork+nc会占用约1.2 MB,长期跑可能触发oom_kill。
- 已开Failover多拨:脚本重启core会瞬间切换出口,导致游戏UDP会话漂移,体验更差。
- 节点本身丢包>10%:频繁重启反而放大信令风暴,应先换节点再谈守护。
日志与指标:如何验证稳定性
1. 本地日志三件套
/jffs/logs/kuailian.log记录启停时间;路由器"系统日志"里过滤"tun0"看链路层UP/DOWN;Web UI→网络监控→流量图,若每小时出现"归零"尖刺,说明重启生效。
2. 远端探针(可选)
在树莓派跑SmokePing,每60 s ping路由器tun0的IPv4,若连续3次超时即邮件告警。该方案把"本地守护"与"远端视角"分离,可排除"本机nc还能通但隧道已死"的极端场景。
回退方案:一键关闭自启
升级梅林或快连核心后若出现兼容问题,可立即屏蔽自启而无需刷机:
- Web UI→任务计划→清空自定义1,保存。
- SSH执行
rm /jffs/scripts/privacy tool-start或改名备份。 - 重启路由器,此时恢复为纯手动连接。
若需临时关闭守护但保留自启,可在kuailian_watchdog.sh首行加exit 0,30秒完成,不影响后续再打开。
FAQ(结构化数据)
Q1 脚本提示"Permission denied"怎么办?
梅林JFFS默认挂载noexec,需在脚本首行加#!/bin/sh,并确保赋755权限;若仍报错,把脚本放到/jffs/scripts/目录(该目录已加入rc执行白名单)。
Q2 日志里出现"address already in use"?
说明旧进程未退出,守护脚本里pkill后sleep 2不足,可增至5 s,或改用killall -w等待完全回收端口。
Q3 如何把所有日志转存U盘?
插入EXT4格式U盘,Web UI→USB相关应用→启用"挂载到/mnt/sda1",然后把脚本里的LOG路径改为/mnt/sda1/kuailian.log,并加/etc/syscfg.conf里log_rotate=1防止撑满。
总结与下一步
梅林固件本身不提供第三方privacy tool的重启保障,通过"privacy tool-start钩子+cron守护"两条脚本即可把快连做成准企业级稳定性:开机自启、掉线自愈、日志可追踪、30秒内可回退。若你同时跑多条隧道,可把守护脚本拆成数组循环,适配不同进程名;亦可将探测目标换成内网NAS,实现"隧道+内网"双活检测。下一步,建议把SmokePing或Prometheus探针接入,用30天数据验证"重启频率<1次/24h"目标,再决定是否把方案推广到全户型Mesh节点。


