DNS Chooser,一个支持多上游 DNS 本地 DNS 工具

2018-01-03 00:37:01 +08:00
 gazeboxu
支持 N 多个上游 DNS,选最快的 IP 给你,大家尝试一下,https://www.jianshu.com/p/ad63fe00858c。本来是自己在看 coursera 过程遇到的问题,折腾半天,最后自己做了个工具。
22281 次点击
所在节点    DNS
58 条回复
LGA1150
2018-01-03 01:25:16 +08:00
dnsmasq 配置加行 all-servers 的事……
gazeboxu
2018-01-03 08:50:17 +08:00
可能是我表述有问题,我这里说的最快的 IP 不是 DNS 返回最快的,而是实际你连通的速度是最快的(通俗点说就是 PING 值最低的),all-servers 会返回最先收到的 DNS 回应给你,这个往往不是最好,最先返回的往往是最不想要的^__^。如果用 tcpdump 跟踪过向 8.8.8.8 请求回应过程就更清楚了。这个工具最适合访问 CDN 的情形,因为 CDN 在各地方都有点,比如 AWS 的 CDN,在日本,韩国,香港都有点,有时香港快,有时日本快,有时韩国快。链接里面说得更清楚些,也有测试,可以看看。
另外 V2EX 的同学都是野猫子么?
moonvstod
2018-01-03 09:05:05 +08:00
试用了,貌似解决了我遇到的一个:只要没 DNS 缓存,解析网址 dns lookup 3~4 秒的问题
gazeboxu
2018-01-03 09:29:15 +08:00
3~4 秒,什么意思? DNS Chooser 解析一个网址不可能花这么长时间的。有 1 秒超时的,即使解析一个不存在的域名也不会超过 1 秒的。
jimzhong
2018-01-03 12:55:25 +08:00
想法不错,不过通过建立 TCP 连接测速不太文明。
miaomiao888
2018-01-03 14:33:04 +08:00
@gazeboxu 哥们这想法和我想一块去了,好多年前一直在找类似的工具都没有,全是单纯取 DNS 返回最快的 IP,像 flickr,有时用香港 DNS 解析的 IP 延迟只有 20MS 左右,谢谢,用用先!
gazeboxu
2018-01-03 16:34:54 +08:00
@jimzhong,其实也不算不文明,是个好问题,我在一开始实现时就考虑过这个问题。本质上讲 PING 或 TCP 建链在 IP 层都是来回几个 IP 包,PING 两个,TCP 建链三个。连通后马上关闭,同时取消其它请求。另外我也尽量减少了不必要的数据请求,上游 DNS 的返回结果做了合并处理,只有完全不同的返回结果下才要分开测速,而且同一 DNS 应答返回结果多于一个 A 记录的情况下,也只测一个,认为一组返回结果效果应该是一样的。因为本身也带有 CACHE,从 IP 包层面来看,增加的 IP 流量应该是几乎可以忽略不记的。
gazeboxu
2018-01-03 16:46:49 +08:00
@miaomiao888,是呀,我在自己动手做之前也觉得应该有这种工具,但找了几天,确实没有找到,我当时上 coursera,视频完全看不动,不得以用 KXSW 的方式,但全是流量啊,总感觉不是办法。最后决定自己整一个,因为自己也要用,调研的开源项目有 N 个,NSD, Unbound, YADIFA, BIND, MaraDNS 等等,后来是基于 dnscrypt-proxy 来做的。开源项目都很好,就是对用户不太友好,我特别考虑了这点,尽量做成一键启用。其实还可以做较多的工作,比如配置放网上,给用户查询 DNS 使用情况,广告屏蔽。不过有点远了,当前也没精力搞,核心功能还是找最快的 IP。另外如果觉得好用帮助推荐给朋友用一下,有 BUG 请反馈。感谢!
gazeboxu
2018-01-03 17:03:15 +08:00
@jimzhong,另外如果用普通域名解析,如果找到的 IP 完全不通还好,如果是掉包率较高的 IP,那 IP 层面引起的重传可能更可观。域名解析只是一下子,而之后才是大量数据传输,所以我真不觉得是流氓行为(比如吸血骡?),如果被认为是流氓软件真心与我的初始想法完全背离哈。
tony1016
2018-01-03 20:48:13 +08:00
确实是 dnsmasq 的一句 all-servers
venster
2018-01-03 21:12:33 +08:00
win10 17025 预览版,运行报错

应用程序: dnschooser-winclient.exe
Framework 版本: v4.0.30319
说明: 由于未经处理的异常,进程终止。
异常信息: System.ArgumentException
在 System.ThrowHelper.ThrowArgumentException(System.ExceptionResource)
在 System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Insert(System.__Canon, System.__Canon, Boolean)
在 dnschooser_winclient.NetworkManager.GetNICs()
在 dnschooser_winclient.ApplicationForm.update_Service_Info_Once()
在 dnschooser_winclient.ApplicationForm..ctor()
在 dnschooser_winclient.Program.Main(System.String[])

服务正常运行。点击 client 无反应,事件日志如上记录。卸载不正常,服务删不掉,需要手工删服务
gazeboxu
2018-01-03 21:40:36 +08:00
@venster这个东东要求.Net Framework 4.6.1 以上版本,README.TXT 里有安装相关的问题。另外也可以用"dnschooser.exe --uninstall"卸载。
venster
2018-01-03 21:57:18 +08:00
@gazeboxu #12 4.6.1 肯定是够了。17025 版本自带的是 4.7.1.
gazeboxu
2018-01-03 22:05:30 +08:00
那可能要查一下了,没有 client 也可以用,就是要手动,要自己设置 dns 为 127.0.0.1。抱歉
gazeboxu
2018-01-04 10:48:43 +08:00
@venster,尝试改了一下,可能是你有两个网卡的描述是相同的原因,麻烦下载最新版本尝试一下。只替换 CLIENT 就可以了。https://coding.net/u/gazeboxu/p/dnschooser-pub/git/raw/master/release/dnschooser/dnschooser-winclient.exe
miaomiao888
2018-01-04 15:55:39 +08:00
如果支持非标准端口的话就可以使用一些现成的 DNS 达到防污染的效果,比如 208.67.222.222:5353/443 202.141.162.123:5353
miaomiao888
2018-01-04 16:06:50 +08:00
另外,本地 DNS 地址可以设定吗,比如 127.0.0.5
gazeboxu
2018-01-04 17:24:22 +08:00
@miaomiao888,你是指上游 DNS 非标准端口么?支持的哈,配置文件里写成 ip:port 形式就可以了(需要卸载,再安装 才能生效哈),不过同一 IP 多端口要分开写哈。其实这样也是明文,要完全防污染,只有起用上游 dnscrypt,配置稍微复杂一些,可参照 dnscrypt-proxy 的文档来。127.0.0.5 ?没太懂你的意思,你是指本地 DNS 不配置成 127.0.0.1,而写成 127.0.0.5 是吧?这个现在不直接支持哈,改代码可以,我觉得意义不大哈。
gazeboxu
2018-01-04 17:28:45 +08:00
如果只是为了防污染,不需要这样的哈,当前缺省配置了 5 个游 DNS 了,2 个国内,3 个国外,再加一个自动的,除非所有 DNS 同时被污染才会有问题。而如果是为了防止劫持,那就要把上游 DNS 全换成完全可靠的,还要把自动的那个强制禁用了才行哈。
miaomiao888
2018-01-04 18:48:17 +08:00
@gazeboxu 谢谢,支持非标准端口非常不错,目前来说靠非标准端口防污染还是比较方便的;
主要因为 dnschooser 还没 HOSTS 之类的功能,所以目前我需要与其他 DNS 工具配合使用,比如 Acrylic DNS Proxy ;
而 Acrylic DNS Proxy 已经占用了默认的 127.0.0.1,所以希望能自定义(不过我已经用 16 进制编辑器改成 5 发现也能正常运行);
另外建议在 dnschooser 启动时不自动添加系统原有的 DNS,内置的几组已经足够了,而且我发现和 Acrylic DNS Proxy 一起使用会导致 Acrylic 的解析日志重复很长,怀疑 dnschooser 把 127.0.0.1 添加进去导致的循环解析,总之希望能有更多能自定义的地方。:)

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

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

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

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

© 2021 V2EX