一直没想明白,通过代理请求 dns 有何实际意义?

2023-07-17 11:30:18 +08:00
 zbatman

以 Clash 为例,配置如下

dns:
  enable: true
  listen: 127.0.0.1:5553
  enhanced-mode: fake-ip
  nameserver:
    - tls://120.53.53.53:853
  fallback:
    - https://public.dns.iij.jp/dns-query
……
rules:
  - GEOIP,CN,DIRECT
  - MATCH,代理

不考虑系统 DNS 缓存和浏览器 DNS 缓存,我理解的流程是

  1. Clash 接收到 google.com 这个域名,执行规则匹配
  2. [GEOIP,CN,DIRECT]这条规则需要域名解析,执行域名解析流程
    2.1 使用 nameserver 解析 google.com ,拿到一个错误(被污染)的境外 IP
    2.2 Clash 判断此 IP 为境外 IP ,使用 fallback 重新解析,拿到正确 IP
  3. [GEOIP,CN,DIRECT]规则不匹配,继续匹配下一条规则
  4. [MATCH,代理]规则匹配,将域名(而不是步骤 2 解析出来的 IP )转发到代理服务器
  5. 代理服务器重新解析 google.com 域名,拿到正确 IP ,建立连接
  6. 代理服务器返回网页内容

如果没有基于 IP 的规则

rules:
  - direct_domain,DIRECT
  - proxy_domain,代理
  - MATCH,代理

则只进行域名匹配,也不需要在本地域名解析

参考文章
DNS 污染对 Clash ( for Windows )的影响
浅谈在代理环境中的 DNS 解析行为

综上,我的理解是包括 Clash 在内的一众代理软件,配置 dns 的意义仅在于分流和 tun 模式下的 fake-ip ,最终代理服务器会重新解析域名,拿到最近的 IP 。但是经常在一些讨论贴,或是 Clash 、mosdns 的 Issue 区看到“通过代理请求域名服务器(比如通过代理请求 8.8.4.4)”这种需求,不理解有何实际含义,请 V 友们不吝赐教。

13310 次点击
所在节点    DNS
56 条回复
mohumohu
2023-07-17 15:18:27 +08:00
你自己都假设一个前提“如果没有基于 IP 的规则”了,那你又谈“ Issue 区看到“通过代理请求域名服务器(比如通过代理请求 8.8.4.4)”这种需求”不理解有何实际含义,那别人就是有基于 IP 的规则呢?
jujusama
2023-07-17 15:42:02 +08:00
1. DIRECT 仅会请求本地 dns
2. PROXY 最终会由代理服务器请求 dns 以拿到距离最近的 ip
3. 通常分流规则下,本地 dns 的请求免不了
zbatman
2023-07-17 15:48:14 +08:00
@jujusama
'1. DIRECT 仅会请求本地 dns',意思是如果请求 google.com ,正文中的 2.2 步骤是不会走的是吗,2.1 判断为境外 IP 的话,这条规则就跳过了?
'3. 通常分流规则下,本地 dns 的请求免不了',这个通常分流规则有具体示例吗?
byteroam
2023-07-17 16:19:44 +08:00
那不就是掩耳盗铃吗,以为别人不知道你访问了啥
jujusama
2023-07-17 16:32:32 +08:00
@zbatman #23
1. fallback 通常用于非 PROXY 的情况,如某些被污染但没有被阻断的网站
2. 如 nameserver 返回非 cn ip ,那么会取 fallback 的结果去 geoip 匹配,一般来说都会走到 MATCH ,然后提交到代理
3. 任意 ipcidr 的规则都会导致本地 dns 请求,否则如果域名匹配到 PROXY ,会直接发送给远端代理
jianzhao123
2023-07-17 16:38:52 +08:00
@baobao1270 你好,最近我也在看代理 DNS 泄露的问题,想请教一下基于域名分流确实不完美,但是基于 Geoip 的分流前提是得解析到一个 IP ,那么访问一下机场之类的域名还是要走本地的 DNS 解析,这个情况怎么避免呢?
mohumohu
2023-07-17 17:10:49 +08:00
@jianzhao123 可以单独跑第三方 DNS 服务来查询,或者在配置的 hosts 选项里面写死域名的解析,机场的域名的 IP 一般不经常变。
jianzhao123
2023-07-17 17:40:18 +08:00
@mohumohu 好的,感谢🙏
littlewing
2023-07-17 19:59:08 +08:00
@zbatman 那如果 DoH 或 DoT 被墙呢
mohumohu
2023-07-17 20:21:02 +08:00
举两个使用 GEOIP 规则用得到的场景:
1 、我要不同 IP 段走不同的节点;比如域名解析结果是 JP 的 IP 只走 JP 节点,其他走 HK ;
2 、回国线路,如果使用本地 IP 解析的是海外地址,使用代理解析符合 CN 的 IP 走代理;
qiany
2023-07-17 20:21:32 +08:00
1.dns 泄露,不在乎隐私可以无视
2.dns 污染.
3.cdn 优化
ysc3839
2023-07-17 20:59:50 +08:00
@NoOneNoBody http proxy 默认是代理解析域名,即使要自己走代理解析,也可以用 http CONNECT 请求连接 TCP DNS 服务器。
而 SOCKS 就复杂了,如果把 http_proxy 环境变量设置成 socks4 或 socks5 开头,curl 会在本地解析 DNS ,要改成 socks4a 或 socks5h ,改了之后别的程序可能就不认了。
dode
2023-07-17 21:16:29 +08:00
@ysc3839 浏览器设置 clash 的 socks 服务,会走 clash 解析域名吗
Lightbright
2023-07-17 21:21:07 +08:00
DNS 泄露问题可以参考这里,说的很详细
<amp-youtube data-videoid="aKlH6KRt9Jc" layout="responsive" width="480" height="270"></amp-youtube>
zhishixiang
2023-07-17 21:40:44 +08:00
国内互联网环境还不清楚? dns 又不加密,谁都能抢答,还能通过 dns 监听你正在访问什么网站
ysc3839
2023-07-17 23:50:05 +08:00
@dode 看浏览器设置,Firefox 好像是有个远程解析 DNS 的选项,不选就会本地解析
datocp
2023-07-18 00:04:29 +08:00
嘿嘿,想起当年 socks5+支持远程 DNS 查询?这都是多少年前的事情了。不解 2015 年的 1 月 1 日, ss 的 windows 客户端为什么因为一个 DNS 问题而导致无法访问,从那天开始弃用 ss 。内置 dns 软件见多了。记得 360/qq 打架那会儿,原来 QQ 浏览器也内置 DNS 查询。发现那天只好弃用。
chancat
2023-07-18 05:58:57 +08:00
fakeip fakedns
Jirajine
2023-07-18 08:47:41 +08:00
因为 clash 是网络加速工具而非审查绕过工具,使用过程中也只是看剧查资料等正常用户的需求,而非任何违反法律的事情,所以“拿到一个被污染的 ip (同时向国家暴露你在尝试访问被污染的域名)”和“将域名转发到代理服务器(让代理服务器知道你在访问的域名)”都是可以接受的,毕竟只要能连上就行,身正不怕影子斜的人不需要向任何人隐藏任何事,所以代理 dns 没有实际意义。
cheng6563
2023-07-18 09:14:16 +08:00
DNS 污染的域名多了去了,而且是"海关"污染的,用国内的 DoH 照样污染。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/957343

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX