From ac14ce5ecdcd5302bfa0221df88353250f714b91 Mon Sep 17 00:00:00 2001 From: Meow <197331664+Meo597@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:20:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E5=9B=BE=EF=BC=9A=E5=85=A5=E9=97=A8?= =?UTF-8?q?=E6=8A=80=E5=B7=A7=20-=20=E7=94=A8=20DNS=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E7=B2=BE=E5=87=86=E5=A2=83=E5=86=85=E5=A4=96=E5=88=86=E6=B5=81?= =?UTF-8?q?=20(#768)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/document/level-1/routing-with-dns.md | 44 +++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/docs/document/level-1/routing-with-dns.md b/docs/document/level-1/routing-with-dns.md index 564e989..49ca9b1 100644 --- a/docs/document/level-1/routing-with-dns.md +++ b/docs/document/level-1/routing-with-dns.md @@ -25,13 +25,13 @@ 未知的域名假如在中国有服务器,希望尽可能直连,但一顿操作后遇到了传说中的 [DNS Leak](https://github.com/XTLS/BBS/issues/3#issuecomment-3505661189) 怎么办? -那么有没有什么办法能做到 100% 安全又精准的分流呢? +那么有没有什么办法能做到 99.99% 安全又精准的分流呢? 答案是:包的。 ## 利用 Xray-core DNS 模块实现精准分流 -合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了最精确的 IP 作为分流条件。 +合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了比 geosite cn/!cn 更为精确且实时的 IP 作为分流条件,因为 IP 归属地,特别是 cn 归属地变更频率较低。 在继续阅读本文之前,你需要充分阅读并理解“入门技巧:路由 (routing) 功能简析[上篇](./routing-lv1-part1.html)、[下篇](./routing-lv1-part2.html)”。 与此同时你已经快要把官方配置指南给翻烂了,因此你完全理解了路由和出站中的 domainStrategy、入站中 sniffing 各选项的作用、以及其不同值的组合下产生的行为。 @@ -162,13 +162,45 @@ socks、http 入站时,请求的就是域名,到了路由后,路由中非 } ``` -你可以根据它解析出的 IP 结合域名、或者完全靠 IP 来分流。 +```mermaid +graph TD + A[收到 DNS 查询请求] --> B{域名分类判断}; -realIp 透明代理环境,你甚至可以在劫持 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。 + B -->|geosite:google
谷歌域名| C["通过代理查询
国外DNS (1.1.1.1...)"]; + C --> C_OUT[大概率返回国外IP]; + C_OUT --> Z[结束查询]; -> 注意:这里说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则。 + B -->|geosite:cn
已知疑似国内域名| D["通过直连查询
国内DNS (114, AliDNS)"]; + D --> E{解析结果是国内IP?}; + E -->|"是 (符合预期)"| F_OUT[返回国内IP]; + F_OUT --> Z; + E -->|"否 (被污染/分类错/退华)"| G["回落: 通过代理查询
国外DNS (1.1.1.1...)"]; + G --> G_OUT[返回正确的国外IP]; + G_OUT --> Z; ---- + B -->|geosite:geolocation-!cn
已知疑似国外域名| I["通过代理查询
国外DNS (1.1.1.1...)"]; + I --> J{解析结果是国外IP?}; + J -->|"是 (符合预期)"| K_OUT[返回国外IP]; + K_OUT --> Z; + J -->|"否 (意外返回国内IP 分类错)"| L["回落: 通过代理+ECS查询
国外DNS (8.8.8.8...)"]; + L --> L_OUT[返回优化的国内IP]; + L_OUT --> Z; + + B -->|未知域名| N["通过代理+ECS查询
国外DNS (8.8.8.8...)
期望获得国内IP"]; + N --> O{解析结果是国内IP?}; + O -->|"是 (有国内服务器)"| P_OUT[返回国内IP]; + P_OUT --> Z; + O -->|"否 (纯国外网站)"| Q["回落: 通过代理查询
国外DNS (1.1.1.1...)"]; + Q --> Q_OUT[返回优化的国外IP]; + Q_OUT --> Z; + +``` + +你可以根据此配置解析出的 IP 结合域名、或者完全靠 IP 来分流。 + +realIp 透明代理环境,你甚至可以在保证完全劫持各种渠道的 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。 + +> 注意:上面说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则中的 ECS。 #### 例子 2:此配置解析出正确,但不保证国外 CDN 友好的地址,保证无 DNS Leak 的同时,只要中国有服务器节点就能优先解析出来,适合 fakeIp 透明代理、socks、http 入站等场景。