Skip to content

Commit ac14ce5

Browse files
authored
配图:入门技巧 - 用 DNS 实现精准境内外分流 (#768)
1 parent b9730a1 commit ac14ce5

File tree

1 file changed

+38
-6
lines changed

1 file changed

+38
-6
lines changed

docs/document/level-1/routing-with-dns.md

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525

2626
未知的域名假如在中国有服务器,希望尽可能直连,但一顿操作后遇到了传说中的 [DNS Leak](https://github.com/XTLS/BBS/issues/3#issuecomment-3505661189) 怎么办?
2727

28-
那么有没有什么办法能做到 100% 安全又精准的分流呢?
28+
那么有没有什么办法能做到 99.99% 安全又精准的分流呢?
2929

3030
答案是:包的。
3131

3232
## 利用 Xray-core DNS 模块实现精准分流
3333

34-
合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了最精确的 IP 作为分流条件。
34+
合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了比 geosite cn/!cn 更为精确且实时的 IP 作为分流条件,因为 IP 归属地,特别是 cn 归属地变更频率较低
3535

3636
在继续阅读本文之前,你需要充分阅读并理解“入门技巧:路由 (routing) 功能简析[上篇](./routing-lv1-part1.html)[下篇](./routing-lv1-part2.html)”。
3737
与此同时你已经快要把官方配置指南给翻烂了,因此你完全理解了路由和出站中的 domainStrategy、入站中 sniffing 各选项的作用、以及其不同值的组合下产生的行为。
@@ -162,13 +162,45 @@ socks、http 入站时,请求的就是域名,到了路由后,路由中非
162162
}
163163
```
164164

165-
你可以根据它解析出的 IP 结合域名、或者完全靠 IP 来分流。
165+
```mermaid
166+
graph TD
167+
A[收到 DNS 查询请求] --> B{域名分类判断};
168+
169+
B -->|geosite:google<br>谷歌域名| C["通过<b>代理</b>查询<br>国外DNS (1.1.1.1...)"];
170+
C --> C_OUT[大概率返回国外IP];
171+
C_OUT --> Z[结束查询];
172+
173+
B -->|geosite:cn<br>已知疑似国内域名| D["通过<b>直连</b>查询<br>国内DNS (114, AliDNS)"];
174+
D --> E{解析结果是国内IP?};
175+
E -->|"是 (符合预期)"| F_OUT[返回国内IP];
176+
F_OUT --> Z;
177+
E -->|"否 (被污染/分类错/退华)"| G["<b>回落</b>: 通过<b>代理</b>查询<br>国外DNS (1.1.1.1...)"];
178+
G --> G_OUT[返回正确的国外IP];
179+
G_OUT --> Z;
180+
181+
B -->|geosite:geolocation-!cn<br>已知疑似国外域名| I["通过<b>代理</b>查询<br>国外DNS (1.1.1.1...)"];
182+
I --> J{解析结果是国外IP?};
183+
J -->|"是 (符合预期)"| K_OUT[返回国外IP];
184+
K_OUT --> Z;
185+
J -->|"否 (意外返回国内IP 分类错)"| L["<b>回落</b>: 通过<b>代理+ECS</b>查询<br>国外DNS (8.8.8.8...)"];
186+
L --> L_OUT[返回优化的国内IP];
187+
L_OUT --> Z;
188+
189+
B -->|未知域名| N["通过<b>代理+ECS</b>查询<br>国外DNS (8.8.8.8...)<br>期望获得国内IP"];
190+
N --> O{解析结果是国内IP?};
191+
O -->|"是 (有国内服务器)"| P_OUT[返回国内IP];
192+
P_OUT --> Z;
193+
O -->|"否 (纯国外网站)"| Q["<b>回落</b>: 通过<b>代理</b>查询<br>国外DNS (1.1.1.1...)"];
194+
Q --> Q_OUT[返回优化的国外IP];
195+
Q_OUT --> Z;
166196
167-
realIp 透明代理环境,你甚至可以在劫持 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。
197+
```
168198

169-
> 注意:这里说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则
199+
你可以根据此配置解析出的 IP 结合域名、或者完全靠 IP 来分流
170200

171-
---
201+
realIp 透明代理环境,你甚至可以在保证完全劫持各种渠道的 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。
202+
203+
> 注意:上面说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则中的 ECS。
172204
173205
#### 例子 2:此配置解析出正确,但不保证国外 CDN 友好的地址,保证无 DNS Leak 的同时,只要中国有服务器节点就能优先解析出来,适合 fakeIp 透明代理、socks、http 入站等场景。
174206

0 commit comments

Comments
 (0)