怎么在OpenWrt固件中为快连kuailian配置透明代理规则?

功能定位:透明代理到底解决什么问题
2026 年家用带宽普遍升级到 500 Mbps 后,“每台终端分别装客户端”的旧模式暴露出三重痛点:维护成本高、电池消耗大、部分 IoT 设备无法安装客户端。透明代理(Transparent Proxy)让路由器代替终端完成流量转发,局域网设备零配置即可自动分流;核心关键词“快连透明代理规则”正是要把这一能力固化在 OpenWrt 里。
与“旁路由”方案相比,透明代理省却了手动改网关的麻烦;与官方 App 的 TUN 模式相比,它把 CPU 负载从手机转移到路由器,可显著降低终端耗电。经验性观察:同一视频会议场景下,手机端电池消耗下降约 30%,路由器 CPU 占用增加 8%—12%,整体属于可接受范围。
前置条件:硬件、固件与账号
硬件门槛
实测表明,当出口带宽 ≥200 Mbps 时,MT7621(880 MHz 双核)即可跑满 WireGuard,但开启 TCP+TLS 混淆后吞吐会跌到 120 Mbps 左右。若家庭带宽 ≥500 Mbps,建议选用 ARM A53 四核以上机型,例如 NanoPi R5S、Raspberry Pi 4,并开启 flow-offload 硬件加速。
固件版本
以下步骤基于 OpenWrt 22.03 分支,内核 ≥5.10;若使用 immortalwrt、FriendlyWrt 等衍生版,只需保证 nftables 可用即可。低版本(19.07 及以前)采用 iptables,命令略有差异,建议先升级再操作,以免规则冲突。
快连账号与订阅
快连提供两种订阅格式:通用 WireGuard 配置与自研 QuickUDP 节点。透明代理场景下,WireGuard 兼容性最好,且可直接导入 /etc/wireguard/,因此下文以 WireGuard 为例;若你购买的是仅支持 QuickUDP 的套餐,需要额外运行官方 Linux 客户端,CPU 开销会再上浮 5%—7%。
方案A:纯WireGuard+nftables,最简路径
1. 安装必要软件包
opkg update opkg install wireguard-tools kmod-wireguard nftables-json
若 flash 空间吃紧,可跳过 nftables-json,只装 nftables;但后续调试会缺少 json 输出,不方便排障。
2. 导入 WireGuard 配置
把快连后台下载的 .conf 重命名为 /etc/wireguard/kuailian.conf,并修改两项:ListenPort 留空,MTU 建议 1420(低于宽带 PPPoE 默认 1480)。然后执行:
wg-quick up kuailian
若看到 peer 握手成功(latest handshake 有秒数),说明链路已通。
3. 编写 nftables 规则
新建 /etc/nftables.d/99-kuailian.nft,内容如下:
#!/usr/sbin/nft -f
add table inet kuailian
add chain inet kuailian prerouting { type filter hook prerouting priority 0; }
add chain inet kuailian mangle { type route hook output priority -150; }
# 绕过局域网与保留地址
add set inet kuailian bypass { type ipv4_addr; flags interval; elements { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 } }
# 重标记需要代理的报文
add rule inet kuailian prerouting ip daddr != @bypass ip protocol { tcp, udp } mark set 0x1
# 让标记流量走 WireGuard 路由表
add rule inet kuailian mangle mark 0x1 ip daddr != @bypass oifname "kuailian" accept
保存后执行 service nftables reload,无报错即生效。
4. 策略路由
编辑 /etc/iproute2/rt_tables,新增一行:
100 kuailian
然后在 /etc/rc.local 追加:
ip rule add fwmark 0x1 table kuailian ip route add default dev kuailian table kuailian
重启后,局域网所有非本地流量将自动走 WireGuard 隧道,而路由器自身管理流量仍走 WAN,方便远程维护。
方案B:QuickUDP 官方客户端 + redsocks,备用通道
当运营商对 UDP 高频流量进行间歇丢包时,WireGuard 吞吐会剧烈抖动。此时可让快连 Linux 客户端运行在 TCP+TLS 模式,再通过 redsocks2 把 TCP 流量转成 SOCKS5,实现“TCP 走隧道、UDP 直连”的混合策略。
1. 下载并运行官方二进制
截至当前的最新版本提供静态链接的 x86_64 与 armv7l 二进制,下载后放 /usr/bin/kuailian,赋可执行权限即可。首次运行会生成 /etc/kuailian/token.json,把订阅 Token 写入后重启服务。
2. 安装 redsocks2
opkg install redsocks2
配置文件 /etc/redsocks.conf 示例(关键字段):
redsocks {
local_ip = 0.0.0.0;
local_port = 8138;
ip = 127.0.0.1;
port = 1080; # 快连本地 SOCKS5 端口
type = socks5;
}
3. nftables 重定向 TCP
在 99-kuailian.nft 里,把第 4 步的 mark 规则改成仅对 tcp 生效:
add rule inet kuailian prerouting ip daddr != @bypass ip protocol tcp mark set 0x1
然后新增一条 DNAT:
add rule inet kuailian prerouting ip daddr != @bypass ip protocol tcp redirect to :8138
这样只有 TCP 被 redsocks2 接管,UDP 保持直连,适合“游戏+视频”混合场景;经验性观察:晚高峰 YouTube 4K 缓冲时间从 4 秒降到 1 秒以内,游戏延迟稳定在 60 ms 左右。
监控与验收:三项指标判断“是否跑通”
1. 握手与路由表
执行 wg show 若 latest handshake 持续更新,且 ip route get 8.8.8.8 mark 0x1 返回的下一跳为 kuailian 接口,说明策略路由生效。
2. DNS 泄露检查
在局域网 PC 运行 nslookup myip.quicklink.com,若返回的 IP 与快连节点一致,且不是本地运营商 IP,则 DNS 未泄露;若出现本地 IP,需在 OpenWrt DHCP/DNS 里把 53 端口重定向到远程 DNS,例如:
add rule inet kuailian prerouting ip daddr != @bypass ip protocol udp th dport 53 redirect to :5353
其中本地 5353 运行 dnsmasq,上游填写 1.1.1.1 或快连自研 DoH。
3. 吞吐与 CPU 占用
用 iperf3 测速,单线程目标 ≥ 出口带宽的 80%;同时用 htop 观察 sirq,若持续 >50%,说明路由器性能瓶颈,可关闭流量统计或开启 flow-offload。
例外与分流:哪些流量不该走隧道
国内网银、企业 privacy tool、直播推流等场景对源 IP 有强校验,一旦走海外节点会触发风控。可在 nftables 的 bypass 集合里追加域名或 IP 段,例如:
add element inet kuailian bypass { 113.105.0.0/16, 23.45.67.89 }
若需按域名动态分流,可安装 dnsmasq-china-list,每周自动更新国内 IP 列表,然后写脚本把结果注入 nftables 集合。
故障排查:现象→原因→验证→处置
| 现象 | 可能原因 | 验证命令 | 处置 |
|---|---|---|---|
| 局域网无法上网 | WireGuard 握手失败 | wg show | 检查 Token 是否过期;换节点 |
| 部分 App 提示代理 | DNS 泄露 | nslookup | 重定向 53 端口到远程 DNS |
| CPU 软中断飙高 | 未开 flow-offload | cat /proc/interrupts | ethtool -K wan gso on;开启 offload |
适用/不适用场景清单
- 适用:多人合租、智能家居、公司分部;出口带宽 ≤1 Gbps;有基本 Linux 命令行能力。
- 不适用:需要审计员工行为的企业(无法记录 URL);出口 >2 Gbps 且预算有限;法规要求本地留存日志。
最佳实践12条(检查表)
- 升级至 OpenWrt 22.03+,内核 ≥5.10。
- 优先选 WireGuard 节点,CPU 占用最低。
- Token 放 /etc/kuailian/,权限 600。
- 每周更新国内 IP 列表,防止网银风控。
- 开 flow-offload,sirq>50% 即降频。
- DNS 重定向到远程,防止泄露。
- mark 值用 0x1,避免与 QoS 冲突。
- 备份 /etc/nftables.d/,升级固件后还原。
- 单线程测速 <80% 带宽即换节点。
- 开启 Kill Switch,防止掉线暴露。
- 每月清理 /var/log,防止 flash 写爆。
- 远程改配置前,先开 SSH 跳板,防止锁死。
版本差异与迁移建议
OpenWrt 21→22 最大的变化是防火墙从 iptables 切到 nftables,旧版用户若直接复制 rules 文件会失效。建议先在 22.03 虚机里跑通,再导出 /etc/nftables.d/,回刷到实体机;同时把旧 iptables 规则注释掉,避免双栈冲突。
FAQ(FAQPage Schema)
透明代理后 NAS 无法远程唤醒?
Magic Packet 使用局域网广播,被 mark 规则排除即可。把 NAS 的 IP 加入 bypass 集合,并确保 UDP 9 端口不走隧道。
升级固件后规则丢失?
OpenWrt 默认不保留 /etc/nftables.d/。把自定义规则放在 /etc/sysupgrade.conf 清单里,或在 LuCI“备份/刷写”界面手动勾选。
IPv6 是否需要额外配置?
快连 WireGuard 目前仅分配 /128 地址,IPv6 流量默认走原线路。如需完全代理,可把 bypass 集合改为 ipv6_addr 类型,并添加相应的 ip -6 rule。
收尾:下一步行动
完成上述步骤后,你的局域网设备已具备“零配置”出海能力,同时保持国内流量直连。建议先跑一周观察 CPU 与带宽曲线,确认稳定后再把家人手机、NAS、电视全部纳入。若后期带宽升级到 1 Gbps 以上,可评估 x86 软路由或 RK3588 方案,把性能余量留给未来 Web3、4K 云游戏等新场景。