18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > CoreDNS篇10-分流与重定向

CoreDNS篇10-分流与重定向

时间:2023-02-09 09:06:01 | 来源:建站知识

时间:2023-02-09 09:06:01 来源:建站知识

本文主要介绍了目前CoreDNS服务在外部域名递归结果过程中出现的一些问题以及使用dnsredir插件进行分流和alternate插件进行重试优化的操作。

1、自建DNS服务现状

一般来说,无论是bind9、coredns、dnsmasq、pdns哪类dns服务器,我们自建的监听在UDP53端口上的DNS服务在DNS解析功能方面承担着两个角色:分别为权威域名服务器和递归域名服务器。

2、DNS解析逻辑

针对我们自建的权威域名服务器,解析的结果非常的确定,当服务器中存在这条记录就能正常解析,否则就是异常。但是对于递归域名服务器的工作流程来说,有些特殊的域名解析就会出现问题。

我们以下图为例介绍在递归解析过程中可能会出现的问题:







  1. 本地DNS服务器和权威域名服务器之间的连接容易出现问题,权威域名服务器一般是各个域名使用者自己维护或者是使用一些DNS服务商提供的服务器,这些服务器出现无法连接或者是崩溃的概率要远大于前面的根域名服务器和顶级域名服务器
  2. 权威域名服务器返回的结果不一定能够正确的传送到本地DNS服务器中,大部分情况下DNS查询并不是加密的,使用明文的UDP进行查询,是比较容易被中间的运营商进行劫持,这里也是DNS污染常见的操作范围;
还有一种常见的DNS污染手段就是市面上的免费公共DNS服务器提供者针对某个特殊域名的解析进行修改,使得用户在使用这些免费的公共DNS解析时没办法解析到正常的IP从而导致该域名提供的服务异常

总结上面的流程分析,我们自建DNS服务在进行外部域名递归解析的时候就可能会遇到下面的几类域名:

3、CoreDNS解析逻辑

得益于CoreDNS丰富多样的插件,我们可以使用插件来对DNS的解析流程进行优化,分流不同的域名到不同的服务器,同时还可以针对不同的返回码进行重试。下面介绍一个对CoreDNS进行优化,加入了DNS解析分流功能和DNS解析失败重试功能来补充各种使用场景的架构。




3.1 插件分析

首先是使用hosts插件,这个插件相当于在CoreDNS上面实现了我们修改服务器/etc/hosts文件的效果,可以用于对一些域名进行简单的劫持,例如一些域名想要拉黑,可以在里面配置解析为127.0.0.1(家庭网络屏蔽广告域名的常用手段);又或者是有部分域名同时有内外网多个入口的,在机房内网DNS解析直接劫持为内网IP,节省外网流量等。需要注意的是hosts插件仅支持A记录的修改,一些复杂的场景如CNAME记录、MX记录、TXT记录等则无能为力了。

接下来就是重头戏dnsredir插件alternate插件了。其中dnsredir插件是github上面开源的一个第三方插件,alternate插件则是CoreDNS官网上的External Plugins,由CoreDNS维护;两者可靠性相对较高,有需求的同学也可以对其二次开发,关于CoreDNS编译外部插件的教程可以查看之前的文章

官方对alternate插件的介绍是一个基于DNS查询返回码RCODE来把DNS查询请求重定向的插件。举个例子,当我们向CoreDNS查询域名解析tinychen.com的时候,CoreDNS将查询转发给114.114.114.114,然后得到了NXDOMAIN的返回码,这时候一般就说明tinychen.com这个域名在114DNS是没有解析结果的,但是我们不死心,使用alternate插件把RCODE是NXDOMAIN的查询再次转发给8.8.8.8,这时候说不定就能得到域名的解析结果。

alternate - allow redirecting queries to an alternate set of upstreams based on RCODE
还是继续上面的场景,假设我们已经知道tinychen.com这个域名在114DNS是没办法查询到正常结果,而在8.8.8.8DNS能正常解析,我们能否直接去8.8.8.8查询呢?

答案是肯定的。这时候就要用到我们的dnsredir插件了。它可以根据我们提供的域名列表,将不同的域名转发到不同的DNS服务器进行查询,从而达到DNS查询解析优化的效果,尤其是对应大部分海外域名解析,有条件的同学可以尝试将其转发到海外DNS节点解析,解析效果应该会有明显的提升。

3.2 解析逻辑分析

alternate插件和dnsredir插件分别从响应码RCODE和域名两个维度对DNS解析进行分流/重定向,再结合CoreDNS本身配置的灵活性,可以有数种组合,这里只是提供一个示范案例作为参考。







注意上图的插件每个的顺序都是可以调整并且不断递归查询,因此理论上可以进行无限的横向和纵向扩展用于满足日后的增长需求。
得益于CoreDNS自身的灵活性,上述的全部插件逻辑可以随意进行组合分配递归调整用于适配不同的业务逻辑。

3.3 Q&A

  1. 用于给dnsredir组件分流的域名列表格式?
    dnsredir组件使用的分流域名格式列表和dnsmasq的格式一致,格式参考如下:
    server=/http://a1.mzstatic.com/114.114.114.114
    server=/http://a2.mzstatic.com/114.114.114.114
    server=/http://a3.mzstatic.com/114.114.114.114
    server=/http://a4.mzstatic.com/114.114.114.114
    server=/http://a5.mzstatic.com/114.114.114.114
    server=/http://adcdownload.apple.com.akadns.net/114.114.114.114
    server=/http://adcdownload.apple.com/114.114.114.114
    server=/http://appldnld.apple.com/114.114.114.114
    server=/http://appldnld.g.aaplimg.com/114.114.114.114
    server=/http://appleid.cdn-apple.com/114.114.114.114
    server=/http://apps.apple.com/114.114.114.114
    server=/http://apps.mzstatic.com/114.114.114.114
    server=/http://cdn-cn1.apple-mapkit.com/114.114.114.114
    server=/http://cdn-cn2.apple-mapkit.com/114.114.114.114
    server=/http://cdn-cn3.apple-mapkit.com/114.114.114.114
    server=/http://cdn-cn4.apple-mapkit.com/114.114.114.114
    需要注意的是dnsredir组件只会读取上述配置中的域名,而不会读取后面的DNS服务器IP,实际转发的DNS服务器IP在CoreDNS中的配置文件定义;
  2. 为什么使用RFC1035格式的文本文件作为自定义域名的配置文件?
    CoreDNS本身支持多种外部后端存储方式(mysql、redis、etcd、pdsql等),使用RFC1035格式的文本文件主要是基于性能、稳定性和可维护性考量。


关键词:

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭