206 lines
6.6 KiB
Markdown
206 lines
6.6 KiB
Markdown
|
|
# 单网口OpenWrt旁路由(OpenClash redir\-host)\+群晖qBittorrent综合配置文档
|
|||
|
|
|
|||
|
|
# 单网口 OpenWrt 旁路由(OpenClash redir\-host)\+ 群晖 qBittorrent 综合配置文档
|
|||
|
|
|
|||
|
|
> 场景说明:
|
|||
|
|
> 主路由:OpenWrt,IP:`192.168.1.1`
|
|||
|
|
> 软路由:单网口 OpenWrt,部署 OpenClash,作为旁路由。
|
|||
|
|
> 设计目标:**设备网关指向软路由 IP 才走代理;其余设备网关保持 \[192\.168\.1\.1\]\(192\.168\.1\.1\),流量直连主路由,不经过软路由。**
|
|||
|
|
> 群晖 NAS 部署 qBittorrent,控制 BT 流量不走代理,Tracker 按需走代理。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
## 一、网络拓扑
|
|||
|
|
|
|||
|
|
主路由 \(\[192\.168\.1\.1\]\(192\.168\.1\.1\)\) ↔ 交换机 ↔ 软路由(单网口旁路由)、群晖 NAS、局域网终端
|
|||
|
|
|
|||
|
|
- 不使用代理设备:网关 `192.168.1.1`,流量全部经过主路由,绕过软路由
|
|||
|
|
|
|||
|
|
- 需要代理设备:手动修改网关为软路由 IP,流量交由 OpenClash 处理
|
|||
|
|
|
|||
|
|
## 二、软路由基础配置(OpenWrt)
|
|||
|
|
|
|||
|
|
### 2\.1 关闭 DHCP 服务器
|
|||
|
|
|
|||
|
|
软路由作为旁路由,不能开启 DHCP,避免局域网 IP 分配混乱。
|
|||
|
|
|
|||
|
|
1. LuCI → 网络 → DHCP/DNS
|
|||
|
|
|
|||
|
|
2. 停用 DHCP 服务器,保存应用。
|
|||
|
|
|
|||
|
|
### 2\.2 关闭 DNS 劫持(系统层面)
|
|||
|
|
|
|||
|
|
清理 OpenWrt 自带 DNS 劫持规则,避免和 OpenClash DNS 劫持冲突。
|
|||
|
|
|
|||
|
|
### 2\.3 关闭 OpenClash ARP 劫持(核心!解决全网卡顿根源)
|
|||
|
|
|
|||
|
|
> 故障现象:开启 OpenClash 后全网变慢,关闭立刻恢复。
|
|||
|
|
> 根因:ARP 劫持(ARP 欺骗)会劫持局域网所有去往主路由`192.168.1.1`流量,全部转发到软路由。单网口软路由性能不足,造成全网卡顿。
|
|||
|
|
> 你的场景**完全不需要 ARP 劫持**。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
#### 查看 ARP 劫持状态(SSH 软路由执行)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
# 查看arpspoof进程
|
|||
|
|
ps | grep arpspoof
|
|||
|
|
# 查看iptables arp相关规则
|
|||
|
|
iptables -L | grep -i arp
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- 有 arpspoof 进程运行 = ARP 劫持正在生效。
|
|||
|
|
|
|||
|
|
#### 临时关闭 ARP 劫持(SSH,重启 OpenClash 会复原)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
# 终止arpspoof进程
|
|||
|
|
killall arpspoof 2>/dev/null
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> 永久关闭必须网页端操作:
|
|||
|
|
> OpenClash → 设置 → 取消勾选【ARP 劫持 / 局域网 ARP 欺骗】,保存,停止并重启 OpenClash 内核。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
#### 客户端清除 ARP 缓存
|
|||
|
|
|
|||
|
|
macOS 终端:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo arp -d 192.168.1.1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
校验:`arp -a`,查看`192.168.1.1`MAC 地址,必须为主路由原生 MAC,不是软路由 MAC。
|
|||
|
|
|
|||
|
|
## 三、OpenClash 配置:redir\-host 模式(fw4/nftables)
|
|||
|
|
|
|||
|
|
> 系统环境:OpenWrt fw4,底层使用 nftables,不再使用传统 iptables。
|
|||
|
|
> redir\-host 原理:基于 nftables 劫持 TCP/UDP 流量,仅对**网关指向软路由**的设备生效;网关为主路由的设备不受任何影响。
|
|||
|
|
> redir\-host 自带 DNS 劫持,同时拦截境外 QUIC \(UDP443\),防止协议绕过代理。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
### 3\.1 OpenClash 网页关键参数
|
|||
|
|
|
|||
|
|
1. 运行模式:`redir-host`
|
|||
|
|
|
|||
|
|
2. 监听网卡:选择软路由唯一 LAN 网卡
|
|||
|
|
|
|||
|
|
3. ARP 劫持:❌ 关闭
|
|||
|
|
|
|||
|
|
4. DNS:开启 OpenClash 内置 DNS 劫持,防止 DNS 泄漏
|
|||
|
|
|
|||
|
|
5. QUIC 拦截:启用,拒绝境外 UDP:443(配置自动生成 nft 规则)
|
|||
|
|
|
|||
|
|
### 3\.2 校验 OpenClash 内核状态
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
ps | grep clash
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
✅正常输出:存在 clash 主进程 \+ openclash\_watchdog 看门狗进程。
|
|||
|
|
|
|||
|
|
### 3\.3 查看 nftables 流量劫持规则(fw4 环境)
|
|||
|
|
|
|||
|
|
> fw4 环境没有 iptables CLASH nat 链,使用 nft 查看
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
nft list ruleset | grep -i clash
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
✅正常特征:
|
|||
|
|
|
|||
|
|
1. `th dport 53 ... redirect to :53 comment "OpenClash DNS Hijack"`:DNS 劫持生效
|
|||
|
|
|
|||
|
|
2. `ip protocol tcp jump openclash` / `ip protocol udp jump openclash_mangle`:TCP/UDP 流量送入 clash 内核处理
|
|||
|
|
|
|||
|
|
3. `udp dport 443 ... reject with icmp port-unreachable comment "OpenClash QUIC REJECT"`:拦截境外 QUIC
|
|||
|
|
|
|||
|
|
> 备注:`chain openclash {}`为空链属于 fw4\+redir\-host 正常现象,转发逻辑在 clash 内核内部实现,非故障。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
### 3\.4 redir\-host 业务功能自检清单(必做)
|
|||
|
|
|
|||
|
|
1. ✅ ARP 检查:无 arpspoof 进程;`192.168.1.1`MAC 为主路由原生 MAC,无 ARP 劫持
|
|||
|
|
|
|||
|
|
2. ✅ 非代理设备(网关 \[192\.168\.1\.1\]\(192\.168\.1\.1\))
|
|||
|
|
|
|||
|
|
- \[ifconfig\.me\]\(ifconfig\.me\):返回家庭宽带公网 IP,不是代理 IP
|
|||
|
|
|
|||
|
|
- [dnsleaktest\.com](https://dnsleaktest.com):DNS 为国内运营商 / 公共 DNS,无泄露
|
|||
|
|
|
|||
|
|
3. ✅ 代理设备(网关 = 软路由 IP)
|
|||
|
|
|
|||
|
|
- 国内网站:直连,使用宽带 IP;匹配规则的境外域名走代理 IP
|
|||
|
|
|
|||
|
|
- [dnsleaktest\.com](https://dnsleaktest.com):DNS 由 OpenClash 接管,无 DNS 泄露
|
|||
|
|
|
|||
|
|
- ping \[223\.5\.5\.5\]\(223\.5\.5\.5\),延迟稳定,无大量丢包,全网不再卡顿
|
|||
|
|
|
|||
|
|
4. ✅ nft 规则:nft list ruleset 可读到 OpenClash 劫持规则
|
|||
|
|
|
|||
|
|
## 四、群晖 Docker qBittorrent 配置(分流需求)
|
|||
|
|
|
|||
|
|
> 需求:qb 主体流量直连不走代理;Tracker 可按需走代理。
|
|||
|
|
> 拓扑:群晖网关保持主路由`192.168.1.1`,不受软路由 OpenClash 影响。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
### 方案说明
|
|||
|
|
|
|||
|
|
不使用全局代理,两种方案可选:
|
|||
|
|
方案 A:qBittorrent WebUI 内配置代理,仅 Tracker 流量走代理,Peer 流量直连。
|
|||
|
|
方案 B:Docker 网络层面控制,容器不走代理。
|
|||
|
|
|
|||
|
|
### 查看 qb 日志,验证 Tracker 是否走代理
|
|||
|
|
|
|||
|
|
1. WebUI 查看日志
|
|||
|
|
|
|||
|
|
2. SSH 命令查看日志
|
|||
|
|
|
|||
|
|
3. 验证要点:Tracker 连接按预期走代理,Peer 流量直连。
|
|||
|
|
|
|||
|
|
> 重点:群晖网关不修改,保持主路由,qb 不会被软路由 redir\-host 劫持。
|
|||
|
|
>
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
## 五、常见故障排查
|
|||
|
|
|
|||
|
|
1. 一开 OpenClash 全网卡顿
|
|||
|
|
|
|||
|
|
- 原因:ARP 劫持开启,全局劫持内网流量。
|
|||
|
|
|
|||
|
|
- 解决:关闭 ARP 劫持,清理 ARP 缓存,重启 OpenClash 内核。
|
|||
|
|
|
|||
|
|
2. nft list 看不到 clash 规则,内核进程在运行
|
|||
|
|
|
|||
|
|
- 解决:OpenClash 网页保存配置,完全停止再重启内核,重新注入 nft 规则。
|
|||
|
|
|
|||
|
|
3. redir\-host 模式下 DNS 泄漏
|
|||
|
|
|
|||
|
|
- 解决:OpenClash 开启 DNS 劫持,拦截 53 端口 UDP/TCP,关闭上游 UDP DNS。
|
|||
|
|
|
|||
|
|
4. 网关指向软路由的设备无法走代理
|
|||
|
|
|
|||
|
|
- 检查:监听网卡选择是否正确;规则集、代理组配置;内核是否正常启动。
|
|||
|
|
|
|||
|
|
## 六、重要注意事项
|
|||
|
|
|
|||
|
|
1. 单网口旁路由性能有限,不要使用超大 Meta 内核、超大规则集,减少 CPU 占用。
|
|||
|
|
|
|||
|
|
2. redir\-host 只劫持网关指向软路由设备,和本项目设计目标匹配。
|
|||
|
|
|
|||
|
|
3. 不要同时开启 ARP 劫持,ARP 劫持会全局接管整个局域网流量,造成性能瓶颈。
|
|||
|
|
|
|||
|
|
4. 软路由 fw4 \(nftables\) 环境,不要使用传统 iptables 命令查找 clash nat 链,会报错。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
如果你需要,我可以再单独导出一份**精简版一页纸快速核对清单**,方便你每次修改配置后快速打勾自检。需要吗?
|
|||
|
|
|
|||
|
|
> (注:部分内容由豆包工作 AI 生成)
|