
为什么要在Linux终端做“全局代理”
在服务器、CI 节点或本地开发机里,kuailian(Kuailian privacy tool)的图形客户端往往装不上,也不方便常驻桌面。把代理能力下沉到终端层,可让curl、git、docker pull、apt、go get 等命令默认走海外出口,无需逐一设置 HTTP/SOCKS 变量。核心关键词“kuailian 全局代理”一次到位,后续所有脚本、定时任务、系统服务开箱即用。
2026-02 发布的 7.8.0 客户端虽然主打 AI 智能节点,但官方依旧保留了命令行守护进程(qlcli),支持 WireGuard 2.0、V2Ray+TLS、Trojan-Go 等协议。本文基于该版本撰写,步骤在 Ubuntu 22.04/24.04、Debian 12、CentOS Stream 9 上可复现;其他发行版只需替换包管理器命令即可。
前置检查:你的机器真的需要全局代理吗?
适用场景
- 持续集成服务器需要拉取 GitHub、Docker Hub、npm 海外依赖;
- 本地 Python/Go 项目每日同步 PyPI、Homebrew、Hugging Face 模型;
- 游戏私服或直播推流机,要求全机出口 IP 固定为某国机房。
以上场景的共同点是“后台进程无交互”,一旦网络受阻,整条流水线就会卡死。把代理下沉到系统层,可让故障点从 N 个应用收敛到 1 个 TUN 接口,排障也更快。
不适用场景
- 仅需浏览器翻墙——桌面客户端的“分应用代理”更简单;
- 多用户共享服务器——全局代理会干扰其他用户路由;
- 合规要求禁止出境——请先确认跨境数据政策。
安装快连官方 CLI(qlcli)
官方仓库已提供 deb/rpm 源,优先用包管理器,后续可随 apt/yum 自动更新。
Ubuntu / Debian
sudo apt update && sudo apt install -y curl gnupg curl -fsSL https://repo.kuailian.io/pubkey.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kuailian.gpg echo "deb [arch=amd64] https://repo.kuailian.io/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/kuailian.list sudo apt update && sudo apt install -y qlcli
CentOS / RHEL / Fedora
sudo rpm --import https://repo.kuailian.io/pubkey.gpg sudo tee /etc/yum.repos.d/kuailian.repo <<'EOF' [kuailian] name=Kuailian Stable baseurl=https://repo.kuailian.io/stable/centos/$releasever/$basearch enabled=1 gpgcheck=1 EOF sudo dnf install -y qlcli
提示
若机器在内网,可手动下载
.deb/.rpm后使用dpkg -i或rpm -ivh安装;依赖仅glibc ≥ 2.31,无图形库。
首次登录与订阅激活
qlcli 不存储密码,采用订阅 URL(含 JWT)方式激活,与桌面端互通。
qlcli login --subscribe-url="https://api.kuailian.io/sub/xxxx?token=eyJ..." # 成功会回显剩余天数与家庭账号 ID
登录状态默认写入 /etc/kuailian/subscribe.json,权限 600,root 可读。若需多人共用,可软链到 /usr/local/etc/kuailian/ 并加 kuailian 组。
生成“全局代理”配置模板
qlcli 支持两种全局模式:
- TUN 模式(推荐):虚拟网卡接管所有流量,无需改应用设置;
- REDIRECT + tproxy:旧内核或容器环境可用,但需手动打 iptables 规则。
以下以 TUN 为例,一条命令生成配置:
sudo qlcli config create \ --name tun-global \ --protocol wireguard2 \ --mode tun \ --dns-hijack on \ --route-all on \ --save /etc/kuailian/tun-global.json
关键字段解释
--dns-hijack on:把 53 端口劫持到内置 DNS over QUIC,防止泄漏;--route-all on:生成 0.0.0.0/0, ::/0 路由,等同于“全局”;--protocol wireguard2:若节点被运营商 QoS,可回退到v2ray-tls或trojan-go。
手工微调:排除内网与 SSH 管理口
默认配置会转发所有流量,导致 SSH 端口也被转发,一旦节点抖动即失联。需追加免代理网段:
sudo qlcli config edit /etc/kuailian/tun-global.json \ --bypass-route 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8
保存后可用 qlcli config test 做语法校验,避免开机因 JSON 错误而失败。
把 qlcli 做成 systemd 服务
官方单元文件已在安装包内,只需启用即可。
sudo systemctl enable --now [email protected] # 服务名中的 @tun-global 对应配置文件前缀
systemd 会在网络就绪后(After=network-online.target)启动 qlcli,失败自动重试 5 次。日志查看:
sudo journalctl -u qlcli@tun-global -f
警告
若主机启用
netplan+NetworkManager-wait-online,首次开机可能延迟 30 秒才拉起 TUN,属经验性观察;如无法接受,可把qlcli.service的Wants=network-online.target改为Wants=network.target并自测。
验证是否“全局”生效
1. 出口 IP 检测
curl -4 https://api.myip.com # 应回显 Kuailian 自有段,例如 103.75.**.**
2. DNS 是否泄漏
dig whoami.ds.akahelp.net +short # 若返回 0.0.0.0 或 127.0.0.1 即表示被劫持到本地,无泄漏
3. 路由表确认
ip route | grep default # 应指向 kuailian0 接口,而非 eth0
常见分支:只让特定用户走代理
若服务器有多用户,可用 Linux Network Namespace 隔离:
sudo ip netns add privacy toolns sudo qlcli config create --name ns-privacy tool --mode tun --netns privacy toolns --save /etc/kuailian/ns-privacy tool.json sudo systemctl enable qlcli@privacy toolns-ns-privacy tool
之后让指定用户进命名空间:
sudo -u ci-runner ip netns exec privacy toolns su - ci-runner
该方案不会污染主路由,适合共享 Jenkins、GitLab Runner。
回退与故障排查
现象:systemd 启动失败,日志提示 "TUN device exists"
原因:上次异常退出未清理 kuailian0。处置:
sudo ip link del kuailian0 sudo systemctl restart qlcli@tun-global
现象:curl 能通,docker pull 依旧超时
原因:Docker 默认绕过主机路由表。解决:
- 在
/etc/docker/daemon.json加"iptables": false,强制 Docker 继承主机路由; - 或给 Docker 建单独网络命名空间,再挂 kuailian0。
现象:晚高峰丢包 > 3 %
经验性观察:WireGuard 2.0 UDP 被限速。可回退协议:
sudo qlcli config edit /etc/kuailian/tun-global.json --protocol v2ray-tls
切换后需重启服务,延迟可能增加 10–20 ms,但稳定性提升。
性能与资源占用
在 1 vCPU / 1 GB 的 KVM 实例上,TUN 模式空载 CPU 占用约 1–2 %;单线程 iperf3 测速可见 600–800 Mbps(因地区而异)。若开启 5 跳级联,CPU 翻倍,延迟叠加 30–50 ms,仅建议高匿名场景使用。
FAQ(FAQPage Schema)
开机启动顺序太晚,导致定时任务失败怎么办?
把 qlcli.service 的 WantedBy=multi-user.target 改成 network-online.target,并在 cron 里加 @reboot sleep 30 做延迟,或改用 systemd timer 依赖 qlcli.service。
如何限制 qlcli 自身升级时不断网?
启用双实例:主实例跑 TUN,升级前临时启动副实例(SOCKS5 1080),把 HTTP_PROXY 指向本地 1080 完成下载,再滚动重启主实例,全程 2–3 秒。
可以只代理 IPv6 吗?
qlcli 7.8.0 已支持 --ipv6-only 标志,但需节点侧开启 NAT64。配置后 curl -6 可通,curl -4 直连,适合 IPv6 免流场景。
最佳实践清单(Checklist)
- 安装前先确认内核 ≥ 5.6,已加载
tun模块; - 登录后把 subscribe.json 备份到 Git 私有仓库,防重装丢失;
- 配置阶段就加
--bypass-route,把管理网段、监控 IP 写死; - systemd 启动失败次数设为
Restart=on-failure:5,防止无限重启被封; - 每月手动跑
qlcli config benchmark,让 AI 节点重新排序,避免老配置积灰。
总结与下一步
通过官方 qlcli 工具,把kuailian做成 systemd 级 TUN 全局代理,可在无桌面 Linux 上实现“开机即出海”。核心步骤:装包→登录→生成 TUN 配置→加白名单→systemd 固化→三项验证。若后续需更细粒度分流,可再叠加 Network Namespace 或 Split Tunneling 3.0 规则。
现在就打开终端,按文中顺序复制命令;首次成功后,用 cron+ curl 做每日自动测速,一旦延迟持续异常便触发 qlcli config protocol 切换,即可实现无人值守的自愈代理。
未来版本预期:官方路线图提到 8.0 将支持 eBPF 级分流,可做到进程级颗粒度而无需 Network Namespace,届时 TUN 模式资源占用有望再降 30 %,值得期待。