快连kuailian如何在Linux下配置系统代理并跳过局域网地址?

功能定位:为什么要在 Linux 下“跳过局域网”
在 Linux 桌面或服务器环境启用快连 kuailian 的系统代理时,默认会把全部流量送进隧道,包括 192.168.0.0/16、10.0.0.0/8 这类 RFC1918 地址。结果 SSH 到内网主机、访问 NAS 管理页、甚至 ping 网关都会绕到远端节点再折返,延迟陡增且产生不必要的审计日志。本文以“合规与数据留存”为主线,给出一条可复现、可审计、可回退的完整路径,让“全局加速”与“本地直通”同时成立。
前置条件与版本前提
1. 客户端:快连 kuailian 截至当前的最新版本(10.x 系列)已把“系统代理”模块开源在 GitHub,可直接拉取二进制或自行编译。
2. 系统:Debian 12、Ubuntu 22.04、Fedora 38 及以上,systemd-resolved 或 dnsmasq 均可,NetworkManager 非必须。
3. 权限:需 sudo 写入 /etc/environment、/etc/proxychains.conf 或 iptables/nftables 规则;生产服务器建议先在测试机验证。
方案总览:三条主流实现路线
1. 环境变量 + 桌面级 PAC(最简单)
适用:个人桌面、开发机,GUI 已安装 gnome-control-center 或 kde-settings。
原理:export 标准变量(http_proxy、https_proxy、no_proxy),让 Chrome、Edge、curl 直接识别;同时把 no_proxy 写成“localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8”即可跳过局域网。
2. TUN 模式 + nftables 分流(最干净)
适用:服务器、无头盒子、需要精确审计的场景。
原理:kuailian 自带 --tun 参数创建虚拟网卡,再写 nftables 规则把 RFC1918 流量 return 到原始路由表,其余走 tun0。所有策略落在内核,应用层零感知,便于后续做 netflow/sFlow 留存。
3. proxychains-ng 局部劫持(最灵活)
适用:只想让特定命令(如 git、wget、docker pull)走代理,其余保持默认。
原理:LD_PRELOAD 级动态劫持,配合 proxychains.conf 里的“localnet”段写 CIDR 即可排除内网。
路线 1 实战:GNOME 桌面 90 秒落地
- 打开快连 kuailian → 右上角“系统代理”开关 → 选择“手动模式”。
- 监听地址默认 127.0.0.1:7890(端口因版本而异,请以实际为准)。
- 设置 → Network → Network Proxy → Manual:
- HTTP Proxy 127.0.0.1 7890
- HTTPS Proxy 127.0.0.1 7890
- Ignore Hosts 填写:localhost, 127.0.0.0/8, ::1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
- 点击 Apply System-Wide,输入密码;立即生效,无需重启。
验证:终端执行curl -v https://192.168.1.1,应直接 TCP 三次握手,无“Via”头;而curl https://www.google.com出现“proxy-agent: kuailian/10.x”即表明隧道生效。
提示:Ignore Hosts 的语法与 Windows 相同,逗号后必须有空格,否则 GNOME 会静默失败。
路线 2 实战:服务器 TUN + nftables 精确分流
步骤 1:启动 kuailian 并暴露 TUN
经验性观察:加上 --dns-hijack 可把 53 端口重定向到 kuailian 内置的 K-DNS,防止运营商污染;若本地已有 bind9,请关闭 53 占用或改用 DoH 专用端口。
步骤 2:编写 nftables 规则集
解释:先匹配目的地址为内网段时直接 return,不进入隧道路由;其余流量打标 0x66,由 kuailian 的 policy-route 全部接管。
步骤 3:持久化与回退
把上述文件存入 /etc/nftables/kuailian.nft,在 /etc/nftables.conf 里加一行 include \"/etc/nftables/kuailian.nft\",重启 nftables 即可。回退时执行sudo nft delete table inet kuailian,流量立即回到原始默认路由。
路线 3 实战:proxychains-ng 单命令劫持
- 安装:
sudo apt install proxychains-ng - 编辑 /etc/proxychains.conf,末尾加:
localnet 127.0.0.0/255.0.0.0 localnet 192.168.0.0/255.255.0.0 localnet 172.16.0.0/255.240.0.0 localnet 10.0.0.0/255.0.0.0 [ProxyList] socks5 127.0.0.1 7890
- 使用:
proxychains git clone https://github.com/xxx/yyy.git,只有 git 走隧道,访问公司 GitLab 192.168.x.x 时直接直连。
警告:proxychains 对静态编译的 Go 程序无效,因 Go 自带 syscall 不经过 glibc。此时可改用 graftcp 或 redsocks。
例外清单:哪些地址必须额外放行
- 企业内网 DNS:若公司 DNS 为 10.10.10.53,务必在 no_proxy 或 nftables set 里声明,否则解析记录会出现在 kuailian 的远端日志。
- Docker 网桥:默认 172.17.0.0/16,与 RFC1918 冲突,需在规则里再细分。
- VMware / VirtualBox 宿主机:192.168.56.0/24、192.168.122.0/24 常见于 vboxnet0 / virbr0,开发测试环境记得加白。
验证与观测:如何确认“真的没走隧道”
1. 内核计数器
nftables 规则里给 lan 流量 return 后,可用sudo nft list chain inet kuailian mangle-output -a查看 pkts 计数,若访问 192.168.x.x 后对应规则计数增加,说明未进隧道。
2. kuailian 实时日志
客户端加 --log-level debug 会在 stderr 输出每条会话的目的地址,若访问内网 IP 无日志即表明 bypass 成功。
3. sFlow 留存(可选)
在服务器部署 pmacct + sFlow,设置采样率 1:100,把 mark!=0x66 的流量打上标签“tunneled”,后续可用 Grafana 区分合规流量与本地管理流量,满足审计要求。
不适用场景清单
| 场景 | 风险 | 建议 |
|---|---|---|
| CI 容器集群 | 频繁创建网桥,CIDR 动态变化 | 用路线 3,仅对需要外网拉包的步骤显式加 proxychains |
| 远程桌面跳板机 | RDP 192.168.x.x 若漏加白会黑屏 | nftables 里单独加一条 ip daddr 192.168.0.10 counter return |
| 金融隔离网 | 监管要求“零隧道” | 直接物理隔离,放弃任何系统代理 |
最佳实践 10 条检查表
- 永远先用
ip route get 192.168.x.x确认下一跳,再写规则。 - 把 no_proxy 写成小写,部分 Java 应用只认小写。
- 服务器场景优先 nftables,桌面场景优先环境变量,CI 场景优先 proxychains。
- 任何新网段上线,先在测试机加白,24 h 无投诉再推生产。
- 审计日志至少保留 30 天,sFlow 采样率不要高于 1:50,防止磁盘爆。
- 升级 kuailian 前,把 nft 规则备份到 /etc/nftables/backup/,升级后 diff 确认语义未变。
- 若用 Docker,把 daemon.json 里“bip”改成 172.31.0.0/16,避开常用办公网段。
- 对静态编译程序,提前用 ldd 检查是否受 LD_PRELOAD 支持,不行就改用 redsocks。
- 开启 kuailian 的 --audit-export 开关,每小时把日志 POST 到内部 SIEM,方便合规抽查。
- 最后一条:永远留一条“救命”控制台,物理带外或 iDRAC,防止把自己锁在隧道外。
故障排查速查表
| 现象 | 最可能原因 | 验证命令 | 处置 |
|---|---|---|---|
| SSH 内网卡顿 | no_proxy 漏写 192.168.0.0/16 | ssh -v 看 Via 头 | 补环境变量后重开会话 |
| Docker pull 超时 | proxychains 对静态 docker 无效 | ldd $(which dockerd) | 改用 systemd 级 http_proxy |
| nft 规则不生效 | 优先级被 iptables-legacy 抢占 | sudo iptables -L 仍有链 | 卸载 iptables-nft 兼容包,重启 |
FAQ(使用 FAQPage Schema)
为什么 export 了 no_proxy,curl 还是走隧道?
部分发行版把 curl 编译为使用 libproxy,优先读取 /etc/proxychains.conf 而非环境变量。解决:确认 curl -v 出现“Via”头后,再检查 /etc/environment 是否遗漏小写 no_proxy,或临时用 proxychains -q curl 验证。
TUN 模式下如何排除 IPv6 内网?
在 nftables set 里加 type ipv6_addr,元素写 fd00::/8 和 fe80::/10,即可把 IPv6 局域网一并 return。
kuailian 日志会记录我访问的内网 IP 吗?
按照官方无日志声明,隧道内仅保留 30 天内会话元数据用于故障排查;若你本地启用 --audit-export,则内网 bypass 流量不会上传,仅本地 SIEM 可见。
升级后规则消失怎么办?
kuailian 升级不会触碰 /etc/nftables,但内核更新可能重置 nft 表。建议把规则写进 /etc/nftables.conf 并启用 systemd 的 nftables.service,随开机自动加载。
可以在一台机器上同时跑三种路线吗?
可以,但端口与标记要错开。例如:桌面会话用环境变量 7890,CI 任务用 proxychains 1080,服务器后台用 TUN+mark 0x66,只要路由表优先级不冲突即可。
收尾:下一步行动建议
读完本文,你已拥有三条可落地的“跳过局域网”路线和一套可审计的验证方法。建议先在测试机挑一条最顺手的方案跑 24 小时,用上面提供的计数器与日志双重确认无内网流量进隧道后,再推到生产。记得把 nftables 规则或 no_proxy 写进代码仓库,合并请求通过后再上线,让“合规”与“效率”同时可追溯。祝你配置顺利,也欢迎把实测经验贡献回 kuailian 开源仓库,供全球用户复现。