
功能定位:为什么要在 Linux 终端跑 kuailian 自启动
快连(QuickLink)在桌面端提供图形客户端,但服务器、NAS、树莓派等无头场景只能依赖命令行二进制。手动每次 ssh 上去敲 quicklink connect 不仅麻烦,还可能在重启后遗忘,导致凌晨备份任务因网络不通而失败。把 kuailian 做成 systemd 服务后,可实现开机即连、断线重拨、日志可审计,且与系统更新、无人值守脚本完全解耦。
与 rc.local、crontab @reboot 相比,systemd 自带依赖序、自动重试、资源限制,可在一处统一配置;与 Docker 化方案相比,systemd 直接宿主机运行,省去一层 NAT,延迟更低,也省内存。下文以 Debian 12 / Ubuntu 24 为例,CentOS/RHEL 8+ 仅路径差异,已注明。
前置检查:安装包、权限与内核参数
1. 确认已安装 CLI 二进制
截至当前的最新版本提供 quicklink-linux-x86_64.tar.xz,解压后得到单文件 quicklink。建议放 /usr/local/bin/ 并加可执行权限:
sudo tar -xf quicklink-linux-x86_64.tar.xz -C /usr/local/bin/ sudo chmod 755 /usr/local/bin/quicklink quicklink --version # 输出版本号即 OK
2. 创建独立运行用户(最小权限)
官方二进制需要 CAP_NET_ADMIN 才能创建 tun 口,但无需 root 全程。新建系统用户 qlink 并加入 netdev 组:
sudo useradd -r -s /bin/false -d /var/lib/qlink -m qlink sudo usermod -a -G netdev qlink
经验性观察:独立用户可把日志、配置与宿主隔离,也方便后续用 systemd 的 ProtectSystem=strict 做加固。
3. 内核转发与策略
若该机器还需给局域网其他设备做网关,请打开 ipv4 转发并配好 nftables/iptables;纯本机加速可跳过。
撰写 systemd 单元文件
单元文件是 systemd 的“说明书”,放在 /etc/systemd/system/quicklink.service。下面模板已合并官方推荐参数与社区踩坑点,可直接复制。
[Unit] Description=QuickLink privacy tool daemon After=network-online.target Wants=network-online.target [Service] Type=notify ExecStartPre=/usr/bin/sleep 2 ExecStart=/usr/local/bin/quicklink connect --config /etc/quicklink/config.json ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=10 User=qlink Group=netdev AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/var/lib/qlink /var/log/quicklink LogsDirectory=quicklink StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
提示:Type=notify需要二进制支持 sd_notify,若版本较旧可改成Type=simple,但会少“启动成功”确认信号。
配置账号与节点:config.json 最小示例
CLI 不读取图形客户端的 SQLite,需要自建 JSON。字段仅四项即可跑通:
{
"license": "YOUR_LICENSE_KEY",
"region": "auto",
"protocol": "wireguard",
"log_level": "info"
}
把文件放 /etc/quicklink/config.json,权限 600,属主 qlink。官方并未公开全部可配置项,若需指定出口 IP 或自定义 DNS,可在同目录放 advanced.ini 并在 ExecStart 追加 --ini /etc/quicklink/advanced.ini。
启动、开机启用与状态检查
- 重载 systemd:
sudo systemctl daemon-reload - 立即启动:
sudo systemctl start quicklink - 设为开机自启:
sudo systemctl enable quicklink - 看实时日志:
sudo journalctl -u quicklink -f - 确认 tun 口出现:
ip link show tun0 - 测试出口 IP:
curl -4 ip.sb,应与本地运营商不同
若启动失败,systemd 会按 RestartSec=10 无限重试;你可以先 systemctl stop quicklink 排除配置错误,避免日志刷屏。
断线重拨与漫游策略
家用宽带每天凌晨 DHCP 重拨时,公网 IP 会变化。quicklink 二进制内部已集成“网络变化监听”,无需额外脚本;systemd 侧只需保证 Restart=on-failure 即可。经验性观察:物理机云服务器场景,断线重连平均在十秒内完成;4G 网卡因基站切换频繁,可在单元里追加 RestartSec=5 更快。
日志轮转与磁盘占用
systemd-journald 默认把标准输出持久化到 /var/log/journal,SSD 容量小的 NAS 建议限制大小:
sudo mkdir -p /etc/systemd/journald.conf.d echo -e "[Journal]\nSystemMaxUse=200M" | sudo tee /etc/systemd/journald.conf.d/size.conf sudo systemctl restart systemd-journald
若你想把 quicklink 单独拆到文件,可在单元里加 ExecStartPost=/usr/bin/bash -c 'exec journalctl -u quicklink -f >> /var/log/quicklink/app.log',再配合 logrotate。
升级与回退方案
1. 二进制热替换
官方更新时,先下载新版压缩包,执行:
sudo systemctl stop quicklink sudo tar -xf quicklink-linux-x86_64.tar.xz -C /usr/local/bin/ sudo systemctl start quicklink
systemd 会重新 fork 进程,tun 口会瞬断 1–2 秒,远程 SSH 基本无感。
2. 版本回退
若新版出现 1401 报错(经验性观察:与 quantum-mode 默认开启有关),可把旧二进制备份为 /usr/local/bin/quicklink.bak,然后:
sudo systemctl stop quicklink sudo cp /usr/local/bin/quicklink.bak /usr/local/bin/quicklink sudo systemctl start quicklink
常见故障排查表
| 现象 | journalctl 关键词 | 可能原因 | 处置 |
|---|---|---|---|
| start 失败,exit 203 | exec format error | 下载错架构,如 ARM 设备拉 x86_64 | 重新下载 arm64 包 |
| tun0 未创建 | Operation not permitted | AmbientCapabilities 未生效 | 确认 systemd ≥ 244,且单元已重载 |
| license 无效 | invalid license | 订阅过期或复制多余空格 | 进个人中心复制新版 license |
| 断流但进程仍在 | keepalive timeout | 运营商 NAT 会话超时 | 在 advanced.ini 调小 keepalive 间隔 |
适用/不适用场景清单
- 适用:个人 VPS 科学出国、远程 Git 仓库 CI、NAS 定时离线下载、树莓派广告过滤网关。
- 不适用:需要固定入口 IP 的邮件服务器(IP 会漂移)、合规要求备案的境内生产环境、强制禁止 tun 口的云厂商(部分国内轻量应用服务器)。
警告:若 VPS 本身已跑重要业务,请先在本地虚拟机验证单元文件,确认重启后服务顺序无误再上生产。
性能与成本取舍:systemd 限流示例
quicklink 默认不限速,但夜间批量下载可能把 1 Gbps 小水管跑满,影响同机跑的博客。可在单元追加:
[Service] CPUQuota=50% MemoryMax=256M
经验性观察:限速 50% CPU 时,WireGuard 单核性能仍可跑满 400 Mbps,对大多数家庭宽带足够。
FAQ:systemd 自启动常见疑问
还需要写 rc.local 吗?
完全不需要。systemd 已提供依赖序、重试、日志一体化,rc.local 方式在 Debian 12 默认被禁用。
如何临时禁止开机自启?
执行 sudo systemctl disable quicklink 即可;当前会话不受影响,仍可手动 start。
日志里出现 quantum-mode 报错怎么办?
在 config.json 把 "quantum": false 或在高级配置里关闭 Quantum-Mode,重启服务即可。
可以一台机器多开吗?
官方 CLI 目前只支持单实例,若需多区域出口,请用 LXC 或网络命名空间拆分。
CentOS 7 可以用吗?
CentOS 7 的 systemd 版本过低,不支持 AmbientCapabilities,需用 setcap 给二进制加 CAP_NET_ADMIN,并改用 User=root,存在安全降级风险,建议升级系统。
最佳实践 10 秒检查表
- 独立用户 + 最小 capabilities
- 单元文件里加
ProtectSystem=strict - 日志持久化但限 200 MB
- 升级前备份旧二进制
- 配置 600 权限,license 不留空格
- 每次改完
daemon-reload - 用
RestartSec≥5避免重试风暴 - 云服务器安全组放行 UDP 51820
- 本地 VM 先重启验证,再上生产
- 定期检查
systemctl status quicklink是否 active (running)
收尾与下一步
至此,快连 kuailian 已在你的 Linux 终端完成 systemd 级自启动:开机自动连、断线自动重拨、日志可查、升级可回退。你可以继续把备份、rsync、Docker 镜像仓库等任务挂到 After=quicklink.service,实现“网络就绪”后再开始传输,彻底告别半夜掉线人工 SSH 救场。
若后续官方推出 quicklink-daemon 模式,只需把 ExecStart 换成新命令,其余加固与日志策略可复用。保持单元文件在 Git,任何改动先走代码审查,生产环境便能既快又稳地“一直在线”。