简介
EndDNS(原DNS Chooser),一个能帮你将域名解析成最快的IP,特别适合CDN域名的解析。比如可以解决上coursera遇到视频不能播放,卡顿的问题,这个也是该工具的最初始动因。基本原理就是配置一组上游DNS,同时解析,评估后选择最快的IP返回给用户。评估的原理也简单,就是目标IP的80或443端口的建链时间(也支持ping)。另外除去解析最快IP外,还根据分域名配置不同解析规则,可以实现最快解析,屏蔽广告,cache等功能。安装包中的缺省配置适合大部分使用者的需求,如有其它修改化需求也可自己修改配置文件。
改名的原因一是DNS Chooser直接让人想到的是选择不同的DNS服务器(而不是最快的IP,让人误解),虽然老版的DNS Chooser本身没有这个功能,新版EndDNS却有。另外EndDNS更能表达终点,边缘DNS的概念,即DNS完全自己控制
基本功能
- 智能选择最快的IP
- 最快解析速度(与最快IP不能共存,只能二选一)
- 屏蔽广告
- 本地hosts
- 防DNS染污
- 本地cache,二次访问直接返回
- 分域名配置不同解析规则(详情参考配置文件注释)
一些说明
- DNS是系统的重要服务,修改本地hosts及DNS配置都需要管理员权限。基于安全考量,dnswhitelist.toml限制可以使用的上游DNS(局域网地址不限)。如果确有需要,可以自己添加白名单签名(需root)后使用。注意自己签名的白名单与本机绑定,只能用于本机。
- 完全小白用户不建议使用此工具
- 完全IPv6环境没有测试过,理论上可以
- 非A或AAAA请求,只有一个IP,没有配置评估器等等情况不会测速,直接返回最先响应的
- 网络情况复杂,测速不能保证每次都是最优的
一个简单对比测试
域名 | 用途 | 不使用 EndDNS | 使用EndDNS |
---|---|---|---|
d3c33hcgiwev3.cloudfront.net | Coursera视频地址 | 不通 | 128ms |
devstreaming.apple.com | 苹果开发视频地址 | 140ms | 87ms |
cdn.cnn.com | CNN视频地址 | 200ms | 96ms |
vod-dash-ww-live.bbcfmt.hs.llnwd.net | BBC视频地址 | >600ms | 350-450ms |
snappytvpoc-vh.akamaihd.net | MSNBC视频地址 | 250-300ms | 90ms |
(网络状况随时在变,数据不一定准确,就是这么个意思,测试时请注意清系统DNS Cache,最好用dig或nslookup解析域名)
关于本软件的申明
此软件为免费软件,且当前仍处于开发阶段,不能确保稳定性。愿意使用此软件的用户都被视为测试用户,此软件开发者不对用户使用此软件造成的任何直接或间接损失承担责任,如果不同意此要求,请不要使用此软件。
用户数据收集及隐私
- 域名解析记录是很敏感的信息,你的DNS解析请求只会发送到配置里的上游DNS,EndDNS本身不会收集这些记录。
- 开启日志功能后会打印访问记录,请妥善处理。(缺省以服务运行方式不会记录DNS解析记录)
- 另外EndDNS还有一个基于GA的安装启动数统计。
FAQ
- 我能用EndDNS科学上网么?
- 抱歉,EndDNS不是用于这个目的的
- 那这东西有什么用?
- 找到域名最快的IP(针对当前解析的你),最典型的应用场景是上coursera课程,解决卡顿,视频不流畅问题。这个也是本软件最原始的动因。通常来讲,适用于CDN域名的解析(可以理解成一个域名有多个可能的IP的)场景。
- 最快解析,可以配置成最快解析,上流DNS服务器最先返回直接返回结果,还有容错的效果
- 屏蔽广告域名
- 本地hosts
- 基于80或443端口测速,那如果相应服务器这些端口本身都没有打开会解析失败么?
- 首先,绝大部分要解析的域名,这两个端口中的其中一个应该是打开了的。
- 其次,对于只有一个IP的情形,不会评估(测速),直接返回。
- 如果确实需要测速,但端口都没有打开,那EndDNS也能正常返回IP,只是要等一个超时(reviewerTimeout)。
- 最后,如果有兴趣,可以试一下ping评估器。
- 安装时系统或杀毒软件会有报警,为什么需要管理员权限?
- EndDNS服务缺省需要监听在53端口,一般还需要安装成服务,界面辅助程序还需要设置系统的DNS服务器,这些都需要管理员权限。一般操作系统对于不是通过其官方渠道发布的软件,都有警告信息。如果特别介意,慎用。
- 既然是选择最快的IP,为什么dig或nslookup时,有时候的返回结果是多个IP?
- 单个DNS请求,返回的结果是可能有多个IP的,这些IP(组)一般都在同一个区域,质量(对你的连接速度这些)应该都是一致的。而CDN是针对不同的DNS请求,根据请求者IP来源(或通过EDNS0的subnet),返回不同的IP(组),EndDNS的测速是在这些IP(组)之间进行的,EndDNS不会修改上游DN的返回结果,要不舍弃,要不原样返回。
- EndDNS需要服务器么?完全免费么?
- EndDNS只会根据你配置的上游DNS服务器进行解析,除此外的功能实现不依赖于其它特定服务器。本质上讲,当前EndDNS是一个纯客户端软件,不是一个云服务。
- EndDNS现在和以后都完全免费使用,当然如果你认可EndDNS,觉得她帮你解决了问题,愿意支持一下,可以请作者喝杯咖啡
下载链接
安装后的简单验证
- ping test.enddns.com
- 解析为127.0.0.1,EndDNS服务正常运行
- 解析为1.2.4.8,本机上网正常,但解析不是用的EndDNS
- 无法解析,DNS配置错误或没有联网
- ping d3c33hcgiwev3.cloudfront.net
- 应该能ping通过,否则看下一条
- nslookup d3c33hcgiwev3.cloudfront.net,看解析出的IP地址是否与ping解析的一致,如果一致,则EndDNS解析失败了,否则看下一步
- 则可能需要清除一下本机DNS Cache(操作系统或浏览器),可参考。其实最简单的办法是重启一下电脑。。。
enddns主程序命令参数
- help 输出此帮助信息
- version 输出版本信息
- run 以普通方式运行EndDNS服务
- verify 验证配置文件有效性
- sign 对IP白名单签名(need root),实际是计算私有签名,需要手工替换
- service 以服务方式运行EndDNS服务
- -action 参数
- install 安装EndDNS服务
- start 启动EndDNS服务
- stop 停止EndDNS服务
- uninstall 卸载EndDNS服务
- -sysService 参数
- false 安装为用户服务,缺省
- true 安装为系统服务
- -action 参数
日志中的一些解释(以服务方式运行不会输出日志)
- isTCP,是否为TCP请求
- isNeedChoose,是否为需要IP选择处理的DNS请求
- totalTime,整个解析总耗时,单位为毫秒(不严格等于resolveTime+priority)
- resolveTime,DNS解析时间,单位为毫秒
- priority,IP质量,数值越低越好,当前其实就是TCP建链的耗时,单位为毫秒,小于或等0的数字有特殊含义:
- 0,超时或未知
- -1,无需测速
- -2,命中Cache
- -3,没有成功的DNS返回记录(这个应该很少见)
- -4,假测速(staticrv)
参考
- EndDNS https://www.enddns.com/
- DNS https://baike.sogou.com/v127037.htm
- CDN https://baike.sogou.com/v30907.htm
- RFC7871 https://tools.ietf.org/html/rfc7871
- Windows下更改TCP/IP设置 https://support.microsoft.com/zh-cn/help/15089/windows-change-tcp-ip-settings
- windows下如何查看以及清除DNS缓存 使host立即生效 https://my.oschina.net/shunshun/blog/1820427
- 在Mac上指定DNS服务器 https://support.apple.com/zh-cn/guide/mac-help/mchlp2720/mac
- Mac OS X 清除DNS缓存 https://www.cnblogs.com/qq952693358/p/9126860.html
- 如何清除Chrome的dns cache(不重启Chrome) https://www.zhihu.com/question/19721279