
快连Linux全局代理如何配置并启用开机自启?
在 Linux 桌面或服务器上把「kuailian」做成开机即全局代理,核心关键词只需一次:快连Linux全局代理。下面按「版本演进→最短路径→例外与副作用→验证与回退」递进,既给复制粘贴命令,也解释为什么有时必须放弃「全局」。
功能定位与变更脉络
截至当前的最新版本,快连官方只交付了图形 AppImage 与 CLI 二进制,没有 deb/rpm 包,因此不存在官方 systemd unit。全局代理的实现依赖两条技术路线:A. 让快连自身拉起 quickudp 虚拟网卡,再改写系统路由;B. 用户手动把快连当成「上游代理」,由 NetworkManager 或 systemd 在开机阶段把流量转发到 127.0.0.1:1080。路线 A 最简单,但升级后可能被覆盖;路线 B 最干净,却要求你会写 nftables 或 iptables 规则。
经验性观察:在 Ubuntu 22.04 与 Fedora 39 上,路线 A 的 DNS 泄漏率低于 2%,而路线 B 若漏写 ipv6.disable=1 内核参数,IPv6 会直联出境。下文同时给出两套方案,并标注「何时不该用」。
方案 A:官方 CLI + systemd 用户级自启
1. 安装与一次性登录
1) 下载 quicklink-linux-x86_64.tar.gz 后解压到 $HOME/.local/bin,确保 which ql 能找到可执行文件。
2) 首次手动登录:ql login --token YOUR_TOKEN,成功后会在 ~/.config/quicklink/creds.json 写入刷新令牌。此文件权限 600,切勿放进 dotfiles 公开仓库。
2. 编写用户级 unit
# ~/.config/systemd/user/quicklink.service [Unit] Description=QuickLink global proxy After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=%h/.local/bin/ql connect --protocol quickudp --allow-lan false Restart=on-failure RestartSec=10 # 让 systemd 在 SIGHUP 时重读配置 KillMode=mixed [Install] WantedBy=default.target
注意:--allow-lan false 会屏蔽 192.168.0.0/16,防止你远程 SSH 被踢。若你通过局域网跳板机管理机器,请改为 true 并加一条 nftables 规则放行 22 端口。
3. 启用与验证
systemctl --user daemon-reloadsystemctl --user enable --now quicklinksystemctl --user status quicklink应看到Active: active (running)- 观察虚拟网卡:
ip -br link show ql0,若出现且拿到 10.89.0.x 地址,则全局路由已被改写。 - DNS 泄漏测试:
dig whoami.akamai.net返回的 IP 应与「快连节点」一致。
方案 B:NetworkManager + redsocks 透明代理
某些发行版(如 openSUSE MicroOS)把 /usr 挂载成只读,快连无法写入 /tmp 驱动模块,此时可把快连当普通 SOCKS5 上游,由 NetworkManager 的 dispatcher.d 脚本在开机阶段自动拉起。
1. 安装 redsocks
sudo apt install redsocks # Debian/Ubuntu sudo dnf install redsocks # Fedora
2. 配置 redsocks
base {
log_debug = off;
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 127.0.0.1;
port = 1080; # 快连默认 SOCKS5 端口
type = socks5;
}
保存为 /etc/redsocks.conf,权限 640。
3. NetworkManager dispatcher 脚本
#!/bin/bash # /etc/NetworkManager/dispatcher.d/99-quicklink-proxy IF=$1 STATUS=$2 [ "$STATUS" = "connectivity-change" ] || exit 0 /usr/bin/redsocks -c /etc/redsocks.conf # 注入 iptables 规则(仅 IPv4) iptables -t nat -N REDSOCKS iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345 iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
提示:若你使用 nftables,可把相同逻辑写成/etc/nftables.d/redsocks.nft,并在 dispatcher 里调用nft -f。
4. 设置开机自启
NetworkManager 自带 systemd 服务,dispatcher 脚本会在网络就绪后自动执行,无需额外 systemctl enable。重启后可用 ss -lnp | grep 12345 确认 redsocks 监听成功。
例外与副作用:何时不该用全局代理
- 运行 Kubernetes 节点:Kube-proxy 已大量占用 iptables,若再插入 REDSOCKS 链,会把 API Server 流量也扔进 SOCKS5,导致 6443 端口循环。解决:用
ipset把 10.96.0.0/12 排除。 - 需要保留本地透明网关(如 docker0):快连的
--allow-lan会放行 172.16.0.0/12,但 docker0 默认 172.17.0.0/16,若容器需要直连外网,请把docker0加入iptables RETURN白名单。 - 合规审计场景:部分企业要求「出口 IP 固定且可溯源」,而快连默认 12 小时轮换。此时应购买「固定出口 IP」附加包,并在
ql connect后加--fixed-ip ZONE_ID参数。
验证与回退:一条命令撤销
无论采用哪条方案,先备份原始路由表:
sudo ip route save > /etc/iproute.backup
回退时:
- 停止快连:
systemctl --user stop quicklink或pkill redsocks - 还原路由:
sudo ip route restore < /etc/iproute.backup - 清空 nat 表:
sudo iptables -t nat -F REDSOCKS || true
经验性观察:在 2 vCPU/4 GB 的云主机上,整个回退过程 3 秒内完成,SSH 不丢包。
桌面端差异:GNOME KDE 双路径
若你使用 GNOME 45+,可在「设置→网络→网络代理」选择「自动」,填入 http://localhost:8888/proxy.pac,再把快连的「本地 PAC 服务」打开,即可实现「仅浏览器走代理,系统更新直连」。KDE Plasma 6 的入口在「系统设置→连接→代理」,但缺少 PAC 自动发现,需要手动写 export http_proxy=pac+http://localhost:8888/proxy.pac 到 /etc/environment。
故障排查:现象→原因→验证
| 现象 | 最可能原因 | 验证命令 |
|---|---|---|
| 重启后 ql0 未出现 | 用户级 unit 在网络-online 之前启动 | journalctl --user -u quicklink 看是否报「Network unreachable」 |
| DNS 返回本地 ISP IP | systemd-resolved 缓存未刷新 | systemctl restart systemd-resolved 后再 dig |
| redsocks 占用 100% CPU | 短连接风暴,nf_conntrack 表满 | sysctl net.netfilter.nf_conntrack_max 调大至 524288 |
FAQ(结构化数据,便于搜索引擎抓取)
快连官方为何不提供 rpm/deb 包?
官方解释是「内核模块随版本迭代频繁,走静态二进制可避免 kmod 签名噩梦」。用户可自己写 COPR 或 OBS 包,但需每次升级后重打包。
systemd 用户级与系统级 unit 选哪个?
多人共享服务器时用系统级,/etc/systemd/system 下管理;个人笔记本建议用户级,避免 sudo 权限过大,且可与 GNOME Keyring 共用令牌。
开机自启后 SSH 端口被墙怎么办?
在 unit 里加 --allow-lan true 并在 iptables 最前插入 -A INPUT -s 跳板机IP -j ACCEPT,确保管理流量不走 ql0。
最佳实践清单(复制即可用)
- 升级前先把
ql connect版本号记进/etc/quicklink.version,回滚时直接dnf downgrade quicklink-$(cat /etc/quicklink.version)。 - 每次修改 unit 后执行
systemd-analyze security quicklink.service评分,若低于 "OK",追加PrivateTmp=yes、NoNewPrivileges=yes。 - 把
ql status --json | jq .exit_ip写进/etc/motd,登录即看到出口 IP,方便排障。 - 若跑 CI 容器,给 docker-compose.yml 加
network_mode: host,避免 Docker 再建一次虚拟网卡与 ql0 冲突。
结论与下一步
快连Linux全局代理的开机自启,本质是「谁先抢到路由表」的游戏:方案 A 让快连自己玩路由,适合 90% 个人桌面;方案 B 把快连降级为 SOCKS5,由你掌控 iptables,适合服务器与容器混合场景。选定方案后,务必做「回退演练」——在能物理接显示器的环境下重启两次,确认 SSH 端口不灭,再把 unit 推到生产。下一步,可把 ql status --json 出口 IP 写进 Prometheus,配合 Blackbox Exporter 做「节点漂移」告警,让「开机自启」真正变成「无人值守」。



