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

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

  •  
  •   gazeboxu · 195 天前 · 6347 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。
    支持 N 多个上游 DNS,选最快的 IP 给你,大家尝试一下,https://www.jianshu.com/p/ad63fe00858c。本来是自己在看 coursera 过程遇到的问题,折腾半天,最后自己做了个工具。
    第 1 条附言  ·  194 天前
    特别适合上 coursera,解决视频卡顿,放不出来的问题。这个也是做这个工具的初始原因,之前我个人是设置本地静态 hosts,但太麻烦了,特别是 ios 设备还不能设置 hosts。
    44 回复  |  直到 2018-07-06 09:40:53 +08:00
        1
    LGA1150   195 天前   ♥ 1
    dnsmasq 配置加行 all-servers 的事……
        2
    gazeboxu   194 天前   ♥ 1
    可能是我表述有问题,我这里说的最快的 IP 不是 DNS 返回最快的,而是实际你连通的速度是最快的(通俗点说就是 PING 值最低的),all-servers 会返回最先收到的 DNS 回应给你,这个往往不是最好,最先返回的往往是最不想要的^__^。如果用 tcpdump 跟踪过向 8.8.8.8 请求回应过程就更清楚了。这个工具最适合访问 CDN 的情形,因为 CDN 在各地方都有点,比如 AWS 的 CDN,在日本,韩国,香港都有点,有时香港快,有时日本快,有时韩国快。链接里面说得更清楚些,也有测试,可以看看。
    另外 V2EX 的同学都是野猫子么?
        3
    moonvstod   194 天前
    试用了,貌似解决了我遇到的一个:只要没 DNS 缓存,解析网址 dns lookup 3~4 秒的问题
        4
    gazeboxu   194 天前
    3~4 秒,什么意思? DNS Chooser 解析一个网址不可能花这么长时间的。有 1 秒超时的,即使解析一个不存在的域名也不会超过 1 秒的。
        5
    jimzhong   194 天前
    想法不错,不过通过建立 TCP 连接测速不太文明。
        6
    miaomiao888   194 天前
    @gazeboxu 哥们这想法和我想一块去了,好多年前一直在找类似的工具都没有,全是单纯取 DNS 返回最快的 IP,像 flickr,有时用香港 DNS 解析的 IP 延迟只有 20MS 左右,谢谢,用用先!
        7
    gazeboxu   194 天前
    @jimzhong,其实也不算不文明,是个好问题,我在一开始实现时就考虑过这个问题。本质上讲 PING 或 TCP 建链在 IP 层都是来回几个 IP 包,PING 两个,TCP 建链三个。连通后马上关闭,同时取消其它请求。另外我也尽量减少了不必要的数据请求,上游 DNS 的返回结果做了合并处理,只有完全不同的返回结果下才要分开测速,而且同一 DNS 应答返回结果多于一个 A 记录的情况下,也只测一个,认为一组返回结果效果应该是一样的。因为本身也带有 CACHE,从 IP 包层面来看,增加的 IP 流量应该是几乎可以忽略不记的。
        8
    gazeboxu   194 天前
    @miaomiao888,是呀,我在自己动手做之前也觉得应该有这种工具,但找了几天,确实没有找到,我当时上 coursera,视频完全看不动,不得以用 KXSW 的方式,但全是流量啊,总感觉不是办法。最后决定自己整一个,因为自己也要用,调研的开源项目有 N 个,NSD, Unbound, YADIFA, BIND, MaraDNS 等等,后来是基于 dnscrypt-proxy 来做的。开源项目都很好,就是对用户不太友好,我特别考虑了这点,尽量做成一键启用。其实还可以做较多的工作,比如配置放网上,给用户查询 DNS 使用情况,广告屏蔽。不过有点远了,当前也没精力搞,核心功能还是找最快的 IP。另外如果觉得好用帮助推荐给朋友用一下,有 BUG 请反馈。感谢!
        9
    gazeboxu   194 天前
    @jimzhong,另外如果用普通域名解析,如果找到的 IP 完全不通还好,如果是掉包率较高的 IP,那 IP 层面引起的重传可能更可观。域名解析只是一下子,而之后才是大量数据传输,所以我真不觉得是流氓行为(比如吸血骡?),如果被认为是流氓软件真心与我的初始想法完全背离哈。
        10
    tony1016   194 天前
    确实是 dnsmasq 的一句 all-servers
        11
    venster   194 天前
    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 无反应,事件日志如上记录。卸载不正常,服务删不掉,需要手工删服务
        12
    gazeboxu   194 天前
    @venster,这个东东要求.Net Framework 4.6.1 以上版本,README.TXT 里有安装相关的问题。另外也可以用"dnschooser.exe --uninstall"卸载。
        13
    venster   194 天前
    @gazeboxu #12 4.6.1 肯定是够了。17025 版本自带的是 4.7.1.
        14
    gazeboxu   194 天前 via iPhone
    那可能要查一下了,没有 client 也可以用,就是要手动,要自己设置 dns 为 127.0.0.1。抱歉
        15
    gazeboxu   193 天前
    @venster,尝试改了一下,可能是你有两个网卡的描述是相同的原因,麻烦下载最新版本尝试一下。只替换 CLIENT 就可以了。https://coding.net/u/gazeboxu/p/dnschooser-pub/git/raw/master/release/dnschooser/dnschooser-winclient.exe
        16
    miaomiao888   193 天前
    如果支持非标准端口的话就可以使用一些现成的 DNS 达到防污染的效果,比如 208.67.222.222:5353/443 202.141.162.123:5353
        17
    miaomiao888   193 天前
    另外,本地 DNS 地址可以设定吗,比如 127.0.0.5
        18
    gazeboxu   193 天前   ♥ 1
    @miaomiao888,你是指上游 DNS 非标准端口么?支持的哈,配置文件里写成 ip:port 形式就可以了(需要卸载,再安装 才能生效哈),不过同一 IP 多端口要分开写哈。其实这样也是明文,要完全防污染,只有起用上游 dnscrypt,配置稍微复杂一些,可参照 dnscrypt-proxy 的文档来。127.0.0.5 ?没太懂你的意思,你是指本地 DNS 不配置成 127.0.0.1,而写成 127.0.0.5 是吧?这个现在不直接支持哈,改代码可以,我觉得意义不大哈。
        19
    gazeboxu   193 天前
    如果只是为了防污染,不需要这样的哈,当前缺省配置了 5 个游 DNS 了,2 个国内,3 个国外,再加一个自动的,除非所有 DNS 同时被污染才会有问题。而如果是为了防止劫持,那就要把上游 DNS 全换成完全可靠的,还要把自动的那个强制禁用了才行哈。
        20
    miaomiao888   193 天前
    @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 添加进去导致的循环解析,总之希望能有更多能自定义的地方。:)
        21
    miaomiao888   193 天前
    所有的参数都能在配置文件里定义,然后用批处理安装 /启动就行,只跑一个进程,这类工具其实也不常用到 GUI,GUI 感觉有点多余!
    发现卸载需要调用 GUI,像 V2RAY 那种主程序和 GUI 分开的挺不错
        22
    gazeboxu   193 天前
    @miaomiao888,如果要禁用本机原始的 DNS,在 conf 文件里添加 OriginalResolverAddress disabled,停止 /启动一下就可以了。自动添加本机原始 DNS 的原因是有时本地局域网有特殊解析需要。
    嗯,这个所有的配置都是通过配置文件来的,GUI 的主要作用就是找到网卡并设置 DNS 为 127.0.0.1,然后监控一些不正常状态(比如网卡 DNS 设置成 127.0.0.1,但服务没有运行或要求自动启用,但到了连接一个新 WIFI 又没有自动设置等等)。主要是你是属于对计算机比较熟,喜欢折腾的同学,一般用户如果没有 GUI,可能就很难用了。
    卸载调用 GUI 的原因也是需要将本机原来的 DNS 还原,用服务来做这个,不太合适,因为服务本身要尽量做到跨平台。
    另外如果觉得好用,麻烦帮推荐一下,感谢!
        23
    gazeboxu   193 天前
    我刚才查了一下 Acrylic DNS Proxy,主要就是 CACHE 么?如果是这个的话,不需要哈,dnschooser 自带了 cache 的,你可以仔细看一下我简书上的那个文章。不过 caceh 是完全遵守 TTL 规范的,一般域名在 1 至 2 分钟内,但就 cache 来说,足够用了。你也可以尝试解析同一个域名两次,第二次是立即返回的。且 WINDOWS 本身还带有 cache (用 ipconfig/displaydns 可查看)。
        24
    jimzhong   193 天前
    @gazeboxu 话说回来,用 TCP 连接测试兼容性是最佳的,有些服务器不响应 ping 请求。
        25
    miaomiao888   192 天前
    @gazeboxu Acrylic DNS Proxy 的缓存是一方面,可以自行设置缓存更新周期,HOSTS 也比较常用,支持通配符,不同域名支持使用不同的 DNS 进行解析,比如有的域名需要用内网 DNS 解析,或者让双栈域名只解析 IPV4
    当然目前 dnschooser 已经非常不错也够用了,只不过我需求略多所以需要搭配。
        26
    kevinlicy   192 天前
    这个很好用,多谢作者!
        27
    a86913179   191 天前
    确实比 dnsmasq 的 all-servers 有用多了
        28
    wzw   189 天前
    多谢多谢, 我立刻试试
        29
    leobin   189 天前
    很赞,有这种寻求很久了
        30
    allin1   189 天前
    发现一个小问题,conf 文件改动过就不能安装服务了。恢复原样又可以了
        31
    gazeboxu   189 天前
    @allin1,没问题的哈,改了后可以安装的,你可能是改的格式有问题,可以发上来我看看。
        32
    allin1   189 天前
    对哦,是我的问题。我是用记事本打开,没看到后面的符号。现在解决了。可以安装了
        33
    acca   156 天前
    软件被 bitdefender 报毒了
        34
    miaomiao888   149 天前   ♥ 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
        35
    HandSonic   128 天前
    希望能开源,希望能移植到 OpenWrt/LEDE
        36
    aleung   117 天前 via Android
    这个要能移植到 linux,可以安装在路由器树莓派上价值就大了
        37
    ondrej   107 天前
    希望能移植到 OpenWrt/LEDE+1
        38
    2001225354   58 天前
    真的是好用,希望作者没弃坑
        39
    liangxy   55 天前
    @gazeboxu 大佬你好,现在用这个软件会被 dns 污染,具体情况请看 https://github.com/chengr28/Pcap_DNSProxy/issues/288
        40
    gazeboxu   41 天前
    @liangxy 如果是解析到不通的 IP,是没有问题的,因为 DNS CHOOSER 是会选择最快连接的 IP。但如果故意解析到一个错误的,但是通的 IP,就会有问题,DNS CHOOSER 可能选择这个 IP。dns chooser 内部没有维护固定的 IP 列表信息,选择的权重就是 80,443TCP 的建连时间。
        41
    gazeboxu   41 天前
    @2001225354,不算弃坑吧,不过确实之前热情较高,现在不太高了,但还在维护。主要是用的人不算太多(我自己感觉挺有用的功能,囧)。不过还好,之前也是自己看 coursera 遇到问题,自己弄得很烦(我也不知道为什么 coursera 用的 amzon 的那个 CDN 都会被污染),写来自己用的。
        42
    gazeboxu   41 天前
    @liangxy 另外,dns chooser 支持 dnscrypt,你如果愿意的话,可以把上游 DNSC 全部配置成 dnscrypt。。。
        43
    Yut   21 天前
    真的超好用,谢谢老板了,我这里也是 aws 被各种奇怪的解析,其实可以封个包做成游戏魔法加速器卖(笑
        44
    gcc1117   10 天前
    请教一下怎样才能记录解析日志啊?我配置文件写了没有信息 LogFile log.txt
    LogLevel 1
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   643 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1