smartdns+mosdns配置分享访问国内网站有卡顿
一直以来我都是SmartDNS的忠实拥趸者,单用其很长一段时间,之前也发过自用配置的贴发个自用的smartdns配置https://ioozu.com/post-3348.html
在使用过程中也逐渐发现了一些问题,最明显的两个:
1、国内外分流缺少更加细致的判断,除了纳入文件清单的,其他的只能国内歪果任选其一;
2、有些网站初始访问会有停顿感,特别是国内网站更为明显。
针对第一个问题,很多人应该都选择了有更多条件判断的mosdns来搭配,我也是加入了mosdns+smartdns的队伍中。
第二个问题,其实原因很好猜,主要还是smartdns测速的问题。
举个例子,国内网站的DNS延迟很多都在40ms以内,甚至10几ms的都很多,比如说我打开企鹅的网站,DNS延迟就10几ms,经过smartdns测速花了5ms,最终测速结果可能比没测速就提升了1ms,很明显在延迟低的情况下,smartdns反而起到了负作用,我估计这也是很多人说没用的原因,毕竟我们大多数时候访问的都是国内网站。
这个问题我寻找了许久,一直没有好的解决方案,要放弃smartdns却有不甘,因为smartdns在我的使用过程中是有实际效果的,特别是一些小众网站,比如topazlabs的网站,不用smartdns打开时一直加载转圈,用了基本达到国内网站平均的打开速度。
有人会说那就国内的关了测速呗,这。。。smartdns还有灵魂吗?而且,不知道大伙信不信,我用着smartdns玩王者的延迟从原来的四五十降到了十几二十(可能是玄学)。
啰嗦了些题外话,进入正题了,第二个问题后来的解决方案是在研究mosdns配置的时候突发奇想尝试了,实际使用后效果甚佳,这里就和大家分享交流一下。
解决思路:
主要是利用了smartdns的设计特点(开启缓存功能后,无论使用哪种方式,smartdns都会将最佳结果保存到缓存中)和mosdns的主次流水线设计。
基本原理就是mosdns主流水线上游为smartdns,次流水线上游为smartdns的上游,设定一个超时时间,发起请求后,规定时间内没有收到smartdns的结果,那么先采用smartdns上游的结果,并赋予一个几秒的ttl值,等待超时后二次查询时smartdns可以从缓存直接给出最佳结果。
举个例子:
smartdns地址:192.168.1.11
smartdns上游:119.29.29.29
mosdns的配置可以这样写:
1、plugins定义三个插件
# 转发至smartdns的插件 - tag: forward_smartdns type: fast_forward args: upstream: - addr: "192.168.1.11" # 转发至smartdns上游的插件 - tag: forward_sy type: fast_forward args: upstream: - addr: "119.29.29.29" # 调整TTL为4秒的插件 - tag: ttl_4s type: ttl args: maximum_ttl: 4
2、主要的运行逻辑main_sequence部分引入主次流水线
# 已知的国内域名或CDN域名 - if: query_is_cnsite exec: - primary: # 主流水线转发给smartdns - forward_smartdns secondary: # 次流水线转发给smartdns上游 - forward_sy # 修改上游返回结果ttl为4秒 - ttl_4s # 超时设置为25毫秒 fast_fallback: 25 # 开启同步查询方便超时后次流水线更快给出结果 always_standby: true
这样配置后,就算第一次smartdns测速不能及时返回结果,也可以优先使用未测速结果,等待几秒后二次查询便可以返回最佳结果。
注意:
1、smartdns必须开启缓存,持久性缓存不建议开,管理功能太简陋,如果网络出错等原因缓存到错误结果你会很崩溃。
2、以上mosdns配置只是实现部分,具体完整配置请结合你自己使用的进行调整融合。(还有是mosdns v4的配置,v5的太割裂没研究请自行实现)
3、超时时间请结合自家网络使用实践调整,25毫秒只是我自己使用比较合适的值。
最后,效果我自己用起来丝滑流畅,但是可能因人因网络因设置而异,没效果的请弃疗,不用跟我说了,不清楚具体情况解决不了。
配置部分因帖子格式问题对齐有点错乱,请自行解决。
点击链接加入群聊三群:751529538
点击链接加入群聊二群:376877156
点击链接加入群聊【路由器交流群:622891808已满】
本站附件分享,如果附件失效,可以去找找看
饿了么红包