🧠 一、先建立“分层模型”
分成 3 层系统:
🟦 第1层:DNS 解析层(只负责“把域名变成IP”)
dns.rules[]dns.servers[].detourdns.servers[].domain_resolverdns.final
🟩 第2层:连接决策层(决定“流量走哪条路”)
route.rules[]route.final
🟥 第3层:拨号执行层(真正“连出去”)
outbounds[].detouroutbounds[].domain_resolverroute.default_domain_resolver
👉 一句话理解:
DNS层:查地址
Route层:选路径
Outbound层:怎么走
🔥 二、最核心一条链路(把所有东西串起来)
我们用一个完整例子👇
🎯 场景
访问:
youtube.com
🧩 STEP 1️⃣:DNS 查询(进入 dns.rules)
请求:youtube.com
👉 匹配
dns.rules → server = remote_dns
🧩 STEP 2️⃣:处理 DNS server 自身
remote_dns = cloudflare-dns.com
👉 用
dns.servers[].domain_resolver
优先级:
dns.servers[].domain_resolver
>
route.default_domain_resolver
👉 得到:
cloudflare-dns.com → IP
🧩 STEP 3️⃣:DNS 查询如何发出去?
👉 用:
dns.servers[].detour
例如:
"detour": "proxy"
👉 含义:
DNS请求走代理
🧩 STEP 4️⃣:得到解析结果
可能是:
真实IP
或
FakeIP(198.18.x.x)
👉 如果没有命中任何规则
dns.final
👉 作用:
DNS兜底服务器
🧩 STEP 5️⃣:开始连接(进入 route.rules)
客户端发起连接:
IP(或 fakeip)
👉 route.rules 决定
outbound = proxy
👉 如果没命中:
route.final
👉 作用:
流量兜底出口
🧩 STEP 6️⃣:连接 outbound(节点)
server: node.example.com
👉 节点是域名 → 需要解析
用:
outbounds[].domain_resolver
>
route.default_domain_resolver
👉 得到:
node.example.com → IP
🧩 STEP 7️⃣:真正连接怎么走?
👉 用:
outbounds[].detour
👉 含义:
这个节点的连接是否再套一层(比如链式代理)
🧠 三、逐个组件“精准定义”
🟦 DNS 解析层
🔹 1️⃣ dns.rules[]
👉 作用:
决定“查询某个域名用哪个 DNS server”
🔹 2️⃣ dns.servers[].domain_resolver
👉 作用:
解析 DNS服务器自身的域名
🔹 3️⃣ dns.servers[].detour
👉 作用:
DNS查询这一步走哪条 outbound
🔹 4️⃣ dns.final
👉 作用:
DNS规则未命中时的兜底 server
🟩 Route 层
🔹 5️⃣ route.rules[]
👉 作用:
决定“这个连接用哪个 outbound”
🔹 6️⃣ route.final
👉 作用:
所有流量的兜底出口
🟥 Outbound 层
🔹 7️⃣ outbounds[].domain_resolver
👉 作用:
解析节点(server)的域名
🔹 8️⃣ route.default_domain_resolver
👉 作用(官方关键点):
所有未指定 domain_resolver 的 outbound 默认使用它
👉 ⚠️ 注意:
它同时会影响:
- outbound
- dns.server(如果没写 domain_resolver)
🔹 9️⃣ outbounds[].detour
👉 作用:
决定“这个 outbound 本身走哪条线路”
👉 用于:
- 链式代理
- 代理套代理
⚠️ 四、最容易混淆的 3 个点(重点)
❗ 1️⃣ 两种 detour 完全不同
dns.servers[].detour
控制 DNS 查询
outbounds[].detour
控制节点连接
👉 ❌ 完全不是一回事
❗ 2️⃣ 两种 domain_resolver 也不同
dns.servers[].domain_resolver
解析 DNS服务器
outbounds[].domain_resolver
解析代理节点
❗ 3️⃣ default_domain_resolver 是“跨层兜底”
👉 它会被用在:
DNS server(没写 domain_resolver)
Outbound(没写 domain_resolver)
🚨 五、一个非常关键的“真实坑”
❗ 如果你没配置
route.default_domain_resolver
👉 结果:
节点域名解析 → 走系统DNS
后果
- ❌ DNS 泄漏
- ❌ 污染
- ❌ 节点偶尔连不上
✅ 六、推荐配置策略(高阶)
✔ DNS 层
国外 DNS → detour 代理
国内 DNS → detour 直连
✔ domain_resolver
统一用 direct_dns(稳定)
或 remote_dns(更安全)
✔ route
必须有 final(避免断流)
🧠 七、终极关系一句话总结
dns.rules 决定“问谁”
dns.detour 决定“DNS怎么走”
dns.domain_resolver 决定“DNS服务器IP怎么来”
route.rules 决定“走哪个出口”
route.final 是兜底
outbound.domain_resolver 决定“节点IP怎么来”
outbound.detour 决定“节点连接怎么走”
default_domain_resolver 是所有解析的兜底
dns.final 是DNS的兜底
route.final 是流量的兜底