V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gazeboxu
V2EX  ›  DNS

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

  •  3
     
  •   gazeboxu · 2018-01-03 00:37:01 +08:00 · 22205 次点击
    这是一个创建于 2276 天前的主题,其中的信息可能已经有所发展或是发生改变。
    支持 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
    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   ·   我们的愿景   ·   实用小工具   ·   3157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 12:34 · PVG 20:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.