|
25 | 25 |
|
26 | 26 | 未知的域名假如在中国有服务器,希望尽可能直连,但一顿操作后遇到了传说中的 [DNS Leak](https://github.com/XTLS/BBS/issues/3#issuecomment-3505661189) 怎么办? |
27 | 27 |
|
28 | | -那么有没有什么办法能做到 100% 安全又精准的分流呢? |
| 28 | +那么有没有什么办法能做到 99.99% 安全又精准的分流呢? |
29 | 29 |
|
30 | 30 | 答案是:包的。 |
31 | 31 |
|
32 | 32 | ## 利用 Xray-core DNS 模块实现精准分流 |
33 | 33 |
|
34 | | -合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了最精确的 IP 作为分流条件。 |
| 34 | +合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了比 geosite cn/!cn 更为精确且实时的 IP 作为分流条件,因为 IP 归属地,特别是 cn 归属地变更频率较低。 |
35 | 35 |
|
36 | 36 | 在继续阅读本文之前,你需要充分阅读并理解“入门技巧:路由 (routing) 功能简析[上篇](./routing-lv1-part1.html)、[下篇](./routing-lv1-part2.html)”。 |
37 | 37 | 与此同时你已经快要把官方配置指南给翻烂了,因此你完全理解了路由和出站中的 domainStrategy、入站中 sniffing 各选项的作用、以及其不同值的组合下产生的行为。 |
@@ -162,13 +162,45 @@ socks、http 入站时,请求的就是域名,到了路由后,路由中非 |
162 | 162 | } |
163 | 163 | ``` |
164 | 164 |
|
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; |
166 | 196 |
|
167 | | -realIp 透明代理环境,你甚至可以在劫持 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。 |
| 197 | +``` |
168 | 198 |
|
169 | | -> 注意:这里说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则。 |
| 199 | +你可以根据此配置解析出的 IP 结合域名、或者完全靠 IP 来分流。 |
170 | 200 |
|
171 | | ---- |
| 201 | +realIp 透明代理环境,你甚至可以在保证完全劫持各种渠道的 DNS 后,设置 domainStrategy=AsIs、routeOnly=true 做全程无二次 DNS 解析。 |
| 202 | + |
| 203 | +> 注意:上面说的 CDN 友好,境外部分是针对你代理服务器所在位置做的优化,如果你是仅黑名单走代理,而非全部境外流量都走代理,需要自行调整规则中的 ECS。 |
172 | 204 |
|
173 | 205 | #### 例子 2:此配置解析出正确,但不保证国外 CDN 友好的地址,保证无 DNS Leak 的同时,只要中国有服务器节点就能优先解析出来,适合 fakeIp 透明代理、socks、http 入站等场景。 |
174 | 206 |
|
|
0 commit comments