快连Linux端如何手动指定TUN网卡名称并持久生效?

功能定位与版本脉络
在快连 privacy tool(Kuailian privacy tool)的 Linux 客户端里,TUN 网卡名称默认由内核按 tunX 顺序分配。对于需要固定防火墙规则、流量统计或容器侧用网卡名做链式代理的场景,手动指定 TUN 网卡名称并持久生效就成了刚需。自 2025 年 12 月引入 --tun-name 参数后,官方在 2026 年 3 月的 v6.3.0 中把该能力写进 systemd 模板,至此「一次配置,重启不丢」才彻底落地。
最短可达路径:临时生效
命令行快速指定
在终端直接启动快连守护进程,可附加 --tun-name 参数:
sudo /opt/kuailian/bin/kuailian-daemon --tun-name privacy tool0 --config /etc/kuailian/daemon.json
此时内核会创建 privacy tool0 而非默认的 tun0。该方式适合「调试完即走」,机器重启或守护进程被系统服务重新拉起后,名称又会回到默认池。
持久化方案:systemd 模板
1. 确认安装路径
截至当前的最新版本,快连的 systemd 单元文件位于 /usr/lib/systemd/system/[email protected](某些发行版可能在 /lib/ 下,请以实际为准)。
2. 创建实例覆盖
systemd 模板允许「一文件多实例」。在 /etc/systemd/system/ 建立同名目录并写入:
sudo mkdir -p /etc/systemd/system/[email protected] cat <<'EOF' | sudo tee /etc/systemd/system/[email protected]/tun-name.conf [Service] ExecStart= ExecStart=/opt/kuailian/bin/kuailian-daemon --tun-name %i --config /etc/kuailian/daemon.json EOF
解释:第一行 ExecStart= 用于清空父级定义,第二行把实例名 %i 直接映射为 TUN 名,例如 privacy tool0。
3. 启用实例
sudo systemctl daemon-reload sudo systemctl enable --now kuailian-daemon@privacy tool0.service
重启后,systemd 会始终拉起 privacy tool0,名称固定不变。
桌面端差异:GUI 无法直接填
快连 Linux GUI(基于 Qt 的 kuailian-desktop)目前未暴露 TUN 名称输入框。若你依赖图形界面,需要:
- 先退出 GUI(防止它自动拉起守护进程);
- 按上文配置 systemd 实例;
- 再启动 GUI,取消「随软件启动内核」选项,仅作为前端展示。
这样既能保持名称固定,又不损失桌面提醒与节点切换便利。
例外与副作用
1. 名称冲突
若系统已有同名的 privacy tool0(例如 Openprivacy tool 残留),快连会启动失败并报 File exists。经验性观察:在裸机与 LXC 容器混布环境,冲突概率明显升高。缓解:先用 ip link delete privacy tool0 清理,或选用更独特的 ku0、kl0 前缀。
2. 防火墙规则漂移
很多用户把 iptables -A FORWARD -i tun0 -j ACCEPT 写进 /etc/rc.local,一旦 TUN 名不再是 tun0 就会「断网」。解决:把规则里的接口名换成你指定的 privacy tool0,或使用 iptables -m physdev --physdev-in privacy tool0 做匹配。
3. NetworkManager 重新枚举
在桌面版 Ubuntu 24.04 上,NetworkManager 的 /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf 默认把 tun* 视为 unmanaged。若你改成 privacy tool0,需要同步把:
[keyfile] unmanaged-devices=interface-name:privacy tool*
写进 /etc/NetworkManager/conf.d/99-kuailian.conf,否则 NM 可能反复尝试接管,导致路由被冲掉。
验证与回退
1. 验证固定生效
- 重启机器
- 执行
ip link show | grep privacy tool0,确认接口存在且处于 UP - 执行
curl -4 ip.sb,出口 IP 变为快连节点即代表流量已进隧道
2. 回退到默认命名
若发现副作用,可:
- 停止实例:
sudo systemctl stop kuailian-daemon@privacy tool0.service - 禁用实例:
sudo systemctl disable kuailian-daemon@privacy tool0.service - 删除覆盖目录:
sudo rm -rf /etc/systemd/system/[email protected] - 重新加载并启动默认:
sudo systemctl daemon-reload && sudo systemctl start [email protected]
整个过程无需重装软件,配置即回滚。
适用/不适用场景清单
| 场景 | 建议 | 原因 |
|---|---|---|
| 家用 NAS 做策略路由 | 强烈固定名称 | iptables/ip rule 按接口名分流,重启后不能变 |
| 多人共享开发机 | 谨慎使用 | 若他人也固定同名,谁先启动谁占用,后启动失败 |
| K8s 宿主机 | 不推荐 | CNI 插件会批量创建 tun/tap,名称易撞车 |
| 合规审计要求接口固定 | 必须使用 | 审计脚本按 privacy tool0 抓流量,名称漂移即漏审 |
最佳实践 5 条
- 命名加前缀
kl*,降低与 Openprivacy tool、Tailscale 等冲突概率。 - 把固定名称写进 systemd 模板而非
/etc/rc.local,确保重启、崩溃、升级都能一致。 - 在防火墙规则里用
interface-name匹配,而非硬写tun0,方便以后改名无需改规则。 - 升级快连前,先
systemctl disable实例,防止新 RPM/deb 把二进制路径换掉导致启动失败。 - 把「名称固定」纳入 CI 验收:脚本里
ip link | grep -q $expected不通过即报警。
故障排查速查表
现象:systemctl 启动失败,日志报 "TUNSETIFF: File exists"
原因:接口名已被占用 → 验证 ip link → 用 ip link delete <name> 清理或改名。
现象:固定名称成功,但 curl 仍走原生出口
原因:默认路由未切换 → 验证 ip route | default → 检查 Kill-Switch 是否把 UDP 443 也拦了,导致守护进程无法握手。
FAQ(使用 FAQPage Schema)
能否在 CLI 里一次指定多个 TUN 名称?
快连当前版本仅支持单 TUN,若需多隧道可在不同 systemd 实例里分别指定不同名称,再手动做策略路由。
升级 RPM 后 systemd 覆盖会丢失吗?
/etc/systemd/system/ 下的 .d 目录属于管理员配置,包管理器不会覆盖;但二进制路径若变更,需同步更新 ExecStart。
名称固定后还能用 Split-App 分流吗?
可以。分流规则由守护进程在 socket 层标记,与 TUN 接口名无关,固定名称仅影响系统层路由和防火墙。
总结与下一步
通过 systemd 模板把 --tun-name 参数固化,是目前快连 Linux 端「手动指定 TUN 网卡名称并持久生效」最简洁、可回退、可审计的方案。若你仅需临时调试,直接命令行加参数即可;一旦涉及防火墙、流量计费或合规审计,就应立即采用模板化固定,并在 CI 里对接口名做断言。下一步,可把命名规范写进团队运维手册,再辅以自动化测试,确保任何版本升级都不会让「名字」成为故障导火索。