DNS Chooser,一个支持多上游 DNS 本地 DNS 工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gazeboxu
V2EX    DNS

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

  •  3
     
  •   gazeboxu 2018-01-03 00:37:01 +08:00 23520 次点击
    这是一个创建于 2846 天前的主题,其中的信息可能已经有所发展或是发生改变。
    支持 N 多个上游 DNS,选最快的 IP 给你,大家尝试一下,https://www.jianshu.com/p/ad63fe00858c。本来是自己在看 coursera 过程遇到的问题,折腾半天,最后自己做了个工具。
    第 1 条附言    2018-01-03 10:32:21 +08:00
    特别适合上 coursera,解决视频卡顿,放不出来的问题。这个也是做这个工具的初始原因,之前我个人是设置本地静态 hosts,但太麻烦了,特别是 ios 设备还不能设置 hosts。
    第 2 条附言    2020-04-20 15:26:19 +08:00
    好吧,我终于更新了,DNS Chooser 改名为 EndDNS 了,功能更大,支持 MAC,分规则解析不同域名,DoH,请各位试用新版本哈,有意见提哈,觉得好用,麻烦帮宣传一下。
    https://www.jianshu.com/p/2738bc0198d1
    新版本,刚发布,有 BUG 见谅哈。
    第 3 条附言    2020-04-20 15:29:23 +08:00
    第一个版本,所以老 DNS Chooser 用户还没有推送更新哈,大家可以自己更新,在安装 EndDNS 前请先将 DNS Chooser 卸载了(在此前请先将 DNS 设置为非 127.0.0.1 ),过一两个版本后再推送 DNS Chooser 的更新。
    58 条回复    2020-05-29 11:58:39 +08:00
    LGA1150
        1
    LGA1150  
       2018-01-03 01:25:16 +08:00   1
    dnsmasq 配置加行 all-servers 的事……
    gazeboxu
        2
    gazeboxu  
    OP
       2018-01-03 08:50:17 +08:00   1
    可能是我表述有问题,我这里说的最快的 IP 不是 DNS 返回最快的,而是实际你连通的速度是最快的(通俗点说就是 PING 值最低的),all-servers 会返回最先收到的 DNS 回应给你,这个往往不是最好,最先返回的往往是最不想要的^__^。如果用 tcpdump 跟踪过向 8.8.8.8 请求回应过程就更清楚了。这个工具最适合访问 CDN 的情形,因为 CDN 在各地方都有点,比如 AWS 的 CDN,在日本,韩国,香港都有点,有时香港快,有时日本快,有时韩国快。链接里面说得更清楚些,也有测试,可以看看。
    另外 V2EX 的同学都是野猫子么?
    moonvstod
        3
    moonvstod  
       2018-01-03 09:05:05 +08:00
    试用了,貌似解决了我遇到的一个:只要没 DNS 缓存,解析网址 dns lookup 3~4 秒的问题
    gazeboxu
        4
    gazeboxu  
    OP
       2018-01-03 09:29:15 +08:00
    3~4 秒,什么意思? DNS Chooser 解析一个网址不可能花这么长时间的。有 1 秒超时的,即使解析一个不存在的域名也不会超过 1 秒的。
    jimzhong
        5
    jimzhong  
       2018-01-03 12:55:25 +08:00
    想法不错,不过通过建立 TCP 连接测速不太文明。
    miaomiao888
        6
    miaomiao888  
       2018-01-03 14:33:04 +08:00
    @gazeboxu 哥们这想法和我想一块去了,好多年前一直在找类似的工具都没有,全是单纯取 DNS 返回最快的 IP,像 flickr,有时用香港 DNS 解析的 IP 延迟只有 20MS 左右,谢谢,用用先!
    gazeboxu
        7
    gazeboxu  
    OP
       2018-01-03 16:34:54 +08:00
    @jimzhong,其实也不算不文明,是个好问题,我在一开始实现时就考虑过这个问题。本质上讲 PING 或 TCP 建链在 IP 层都是来回几个 IP 包,PING 两个,TCP 建链三个。连通后马上关闭,同时取消其它请求。另外我也尽量减少了不必要的数据请求,上游 DNS 的返回结果做了合并处理,只有完全不同的返回结果下才要分开测速,而且同一 DNS 应答返回结果多于一个 A 记录的情况下,也只测一个,认为一组返回结果效果应该是一样的。因为本身也带有 CACHE,从 IP 包层面来看,增加的 IP 流量应该是几乎可以忽略不记的。
    gazeboxu
        8
    gazeboxu  
    OP
       2018-01-03 16:46:49 +08:00
    @miaomiao888,是呀,我在自己动手做之前也觉得应该有这种工具,但找了几天,确实没有找到,我当时上 coursera,视频完全看不动,不得以用 KXSW 的方式,但全是流量啊,总感觉不是办法。最后决定自己整一个,因为自己也要用,调研的开源项目有 N 个,NSD, Unbound, YADIFA, BIND, MaraDNS 等等,后来是基于 dnscrypt-proxy 来做的。开源项目都很好,就是对用户不太友好,我特别考虑了这点,尽量做成一键启用。其实还可以做较多的工作,比如配置放网上,给用户查询 DNS 使用情况,广告屏蔽。不过有点远了,当前也没精力搞,核心功能还是找最快的 IP。另外如果觉得好用帮助推荐给朋友用一下,有 BUG 请反馈。感谢!
    gazeboxu
        9
    gazeboxu  
    OP
       2018-01-03 17:03:15 +08:00
    @jimzhong,另外如果用普通域名解析,如果找到的 IP 完全不通还好,如果是掉包率较高的 IP,那 IP 层面引起的重传可能更可观。域名解析只是一下子,而之后才是大量数据传输,所以我真不觉得是流氓行为(比如吸血骡?),如果被认为是流氓软件真心与我的初始想法完全背离哈。
    tony1016
        10
    tony1016  
       2018-01-03 20:48:13 +08:00
    确实是 dnsmasq 的一句 all-servers
    venster
        11
    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
        12
    gazeboxu  
    OP
       2018-01-03 21:40:36 +08:00
    @venster这个东东要求.Net Framework 4.6.1 以上版本,README.TXT 里有安装相关的问题。另外也可以用"dnschooser.exe --uninstall"卸载。
    venster
        13
    venster  
       2018-01-03 21:57:18 +08:00
    @gazeboxu #12 4.6.1 肯定是够了。17025 版本自带的是 4.7.1.
    gazeboxu
        14
    gazeboxu  
    OP
       2018-01-03 22:05:30 +08:00 via iPhone
    那可能要查一下了,没有 client 也可以用,就是要手动,要自己设置 dns 为 127.0.0.1。抱歉
    gazeboxu
        15
    gazeboxu  
    OP
       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
        16
    miaomiao888  
       2018-01-04 15:55:39 +08:00
    如果支持非标准端口的话就可以使用一些现成的 DNS 达到防污染的效果,比如 208.67.222.222:5353/443 202.141.162.123:5353
    miaomiao888
        17
    miaomiao888  
       2018-01-04 16:06:50 +08:00
    另外,本地 DNS 地址可以设定吗,比如 127.0.0.5
    gazeboxu
        18
    gazeboxu  
    OP
       2018-01-04 17:24:22 +08:00   2
    @miaomiao888,你是指上游 DNS 非标准端口么?支持的哈,配置文件里写成 ip:port 形式就可以了(需要卸载,再安装 才能生效哈),不过同一 IP 多端口要分开写哈。其实这样也是明文,要完全防污染,只有起用上游 dnscrypt,配置稍微复杂一些,可参照 dnscrypt-proxy 的文档来。127.0.0.5 ?没太懂你的意思,你是指本地 DNS 不配置成 127.0.0.1,而写成 127.0.0.5 是吧?这个现在不直接支持哈,改代码可以,我觉得意义不大哈。
    gazeboxu
        19
    gazeboxu  
    OP
       2018-01-04 17:28:45 +08:00
    如果只是为了防污染,不需要这样的哈,当前缺省配置了 5 个游 DNS 了,2 个国内,3 个国外,再加一个自动的,除非所有 DNS 同时被污染才会有问题。而如果是为了防止劫持,那就要把上游 DNS 全换成完全可靠的,还要把自动的那个强制禁用了才行哈。
    miaomiao888
        20
    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 添加进去导致的循环解析,总之希望能有更多能自定义的地方。:)
    miaomiao888
        21
    miaomiao888  
       2018-01-04 18:59:42 +08:00
    所有的参数都能在配置文件里定义,然后用批处理安装 /启动就行,只跑一个进程,这类工具其实也不常用到 GUI,GUI 感觉有点多余!
    发现卸载需要调用 GUI,像 V2RAY 那种主程序和 GUI 分开的挺不错
    gazeboxu
        22
    gazeboxu  
    OP
       2018-01-04 19:30:35 +08:00
    @miaomiao888,如果要禁用本机原始的 DNS,在 conf 文件里添加 OriginalResolverAddress disabled,停止 /启动一下就可以了。自动添加本机原始 DNS 的原因是有时本地局域网有特殊解析需要。
    嗯,这个所有的配置都是通过配置文件来的,GUI 的主要作用就是找到网卡并设置 DNS 为 127.0.0.1,然后监控一些不正常状态(比如网卡 DNS 设置成 127.0.0.1,但服务没有运行或要求自动启用,但到了连接一个新 WIFI 又没有自动设置等等)。主要是你是属于对计算机比较熟,喜欢折腾的同学,一般用户如果没有 GUI,可能就很难用了。
    卸载调用 GUI 的原因也是需要将本机原来的 DNS 还原,用服务来做这个,不太合适,因为服务本身要尽量做到跨平台。
    另外如果觉得好用,麻烦帮推荐一下,感谢!
    gazeboxu
        23
    gazeboxu  
    OP
       2018-01-04 19:35:52 +08:00
    我刚才查了一下 Acrylic DNS Proxy,主要就是 CACHE 么?如果是这个的话,不需要哈,dnschooser 自带了 cache 的,你可以仔细看一下我简书上的那个文章。不过 caceh 是完全遵守 TTL 规范的,一般域名在 1 至 2 分钟内,但就 cache 来说,足够用了。你也可以尝试解析同一个域名两次,第二次是立即返回的。且 WINDOWS 本身还带有 cache (用 ipconfig/displaydns 可查看)。
    jimzhong
        24
    jimzhong  
       2018-01-05 05:30:10 +08:00
    @gazeboxu 话说回来,用 TCP 连接测试兼容性是最佳的,有些服务器不响应 ping 请求。
    miaomiao888
        25
    miaomiao888  
       2018-01-05 14:24:59 +08:00
    @gazeboxu Acrylic DNS Proxy 的缓存是一方面,可以自行设置缓存更新周期,HOSTS 也比较常用,支持通配符,不同域名支持使用不同的 DNS 进行解析,比如有的域名需要用内网 DNS 解析,或者让双栈域名只解析 IPV4
    当然目前 dnschooser 已经非常不错也够用了,只不过我需求略多所以需要搭配。
    kevinlicy
        26
    kevinlicy  
       2018-01-06 01:12:07 +08:00
    这个很好用,多谢作者!
    a86913179
        27
    a86913179  
       2018-01-06 12:56:40 +08:00
    确实比 dnsmasq 的 all-servers 有用多了
    wzw
        28
    wzw  
       2018-01-08 09:32:10 +08:00
    多谢多谢, 我立刻试试
    leobin
        29
    leobin  
       2018-01-08 15:02:40 +08:00
    很赞,有这种寻求很久了
    allin1
        30
    allin1  
       2018-01-08 17:36:57 +08:00
    发现一个小问题,conf 文件改动过就不能安装服务了。恢复原样又可以了
    gazeboxu
        31
    gazeboxu  
    OP
       2018-01-08 19:00:24 +08:00
    @allin1,没问题的哈,改了后可以安装的,你可能是改的格式有问题,可以发上来我看看。
    allin1
        32
    allin1  
       2018-01-08 20:02:22 +08:00
    对哦,是我的问题。我是用记事本打开,没看到后面的符号。现在解决了。可以安装了
    acca
        33
    acca  
       2018-02-10 20:41:28 +08:00
    软件被 bitdefender 报毒了
    miaomiao888
        34
    miaomiao888  
       2018-02-17 23:19:17 +08:00   1
    用到现在感觉非常不错,顺便催下增加 TCP,202.14.67.4 这类港台 DNS 用 TCP 解析 TUMBLR、FLICKR、AKICDN 的 IP 速度都非常不错!

    帖个防污染配置:StandardResolverAddress 101.6.6.6:53,223.113.97.99:53,208.67.222.222:5353,202.141.162.123:5353,202.38.93.153:5353,202.141.178.13:5353
    HandSonic
        35
    HandSonic  
       2018-03-11 00:37:32 +08:00
    希望能开源,希望能移植到 OpenWrt/LEDE
    aleung
        36
    aleung  
       2018-03-21 09:16:25 +08:00 via Android
    这个要能移植到 linux,可以安装在路由器树莓派上价值就大了
    ondrej
        37
    ondrej  
       2018-03-31 11:56:13 +08:00
    希望能移植到 OpenWrt/LEDE+1
    2001225354
        38
    2001225354  
       2018-05-19 19:58:26 +08:00
    真的是好用,希望作者没弃坑
    liangxy
        39
    liangxy  
       2018-05-22 13:03:43 +08:00
    @gazeboxu 大佬你好,现在用这个软件会被 dns 污染,具体情况请看 https://github.com/chengr28/Pcap_DNSProxy/issues/288
    gazeboxu
        40
    gazeboxu  
    OP
       2018-06-05 10:03:56 +08:00
    @liangxy 如果是解析到不通的 IP,是没有问题的,因为 DNS CHOOSER 是会选择最快连接的 IP。但如果故意解析到一个错误的,但是通的 IP,就会有问题,DNS CHOOSER 可能选择这个 IP。dns chooser 内部没有维护固定的 IP 列表信息,选择的权重就是 80,443TCP 的建连时间。
    gazeboxu
        41
    gazeboxu  
    OP
       2018-06-05 10:08:40 +08:00
    @2001225354,不算弃坑吧,不过确实之前热情较高,现在不太高了,但还在维护。主要是用的人不算太多(我自己感觉挺有用的功能,)。不过还好,之前也是自己看 coursera 遇到问题,自己弄得很烦(我也不知道为什么 coursera 用的 amzon 的那个 CDN 都会被污染),写来自己用的。
    gazeboxu
        42
    gazeboxu  
    OP
       2018-06-05 10:13:21 +08:00
    @liangxy 另外,dns chooser 支持 dnscrypt,你如果愿意的话,可以把上游 DNSC 全部配置成 dnscrypt。。。
    Yut
        43
    Yut  
       2018-06-25 22:59:50 +08:00
    真的超好用,谢谢老板了,我这里也是 aws 被各种奇怪的解析,其实可以封个包做成游戏魔法加速器卖(笑
    gcc1117
        44
    gcc1117  
       2018-07-06 09:40:53 +08:00
    请教一下怎样才能记录解析日志啊?我配置文件写了没有信息 LogFile log.txt
    LogLevel 1
    hero679
        45
    hero679  
       2019-05-13 15:02:53 +08:00
    @gazeboxu 出来挨打。为啥太监了呢,蛮好的一个软件。
    ech0x
        46
    ech0x  
       2019-06-09 21:38:22 +08:00
    @hero679 #45 这个原理是什么呢?获取解析好的 IP,一一对其 Ping 测速吗?
    wysnylc
        47
    a href="/member/wysnylc" class="dark">wysnylc  
       2019-11-13 15:37:41 +08:00
    好顶赞,希望能继续更新下去
    wysnylc
        48
    wysnylc  
       2019-11-14 15:17:36 +08:00
    其实用很多人在用的比如用来加速 warframe:https://tieba.baidu.com/p/5628424409?red_tag=0012069433<br>
    jbag
        49
    jbag  
       2020-02-13 16:54:22 +08:00
    尝试了无数 dns 解析软件,你的 DNS Chooser 是做到配置与使用最平衡的( win 端),因为我的需求就是要快,无特殊需求,给你个赞。
    onionnews
        50
    onionnews  
       2020-03-25 10:04:40 +08:00
    @wysnylc 哈哈是我发的
    ashang
        51
    ashang  
       2020-03-31 23:32:28 +08:00
    用了好久,特来感谢一下 lz
    wysnylc
        52
    wysnylc  
       2020-05-03 04:18:47 +08:00
    你终于更新了,不枉我在简书知乎 oschina 各种找你,哭了
    Takuron
        53
    Takuron  
       2020-05-03 09:22:52 +08:00 via Android
    弱弱的问一句,如何做到防污染和最快同时实现?抢答服务器返回的 IP 一定比真实的快吧
    gazeboxu
        54
    gazeboxu  
    OP
       2020-05-04 08:20:45 +08:00
    @wysnylc 嗯,最近有空,更新了,底层全部改写了。
    gazeboxu
        55
    gazeboxu  
    OP
       2020-05-04 08:25:08 +08:00
    @Takuron,严格意义上讲,在当前实现逻辑上,不可能做到最快响应与最快 IP 同时满足的(最快响应就是直接返回第一个响应,最快 IP 必然有一个收集到 IP 集后测速的过程)。不过可根据需求,不同域名设置不同解析规则。
    jy02201949
        56
    jy02201949  
       2020-05-29 11:15:32 +08:00
    如何让虚拟机也能使用呢,在设备自动启用那里,虚拟机的网卡勾选不上
    gazeboxu
        57
    gazeboxu  
    OP
       2020-05-29 11:57:49 +08:00
    @Takuron,你可以理解成全收,全测。
    gazeboxu
        58
    gazeboxu  
    OP
       2020-05-29 11:58:39 +08:00
    @jy02201949,有 BUG 提在 gitee 上哈。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2567 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:50 PVG 15:50 LAX 00:50 JFK 03:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86