CoreDNS实战(十一)-分流与重定向

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

1 自建DNS服务现状

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

  • 权威域名服务器主要为我们内部使用的域名提供服务,为了避免和提供给外部用户访问的域名冲突,这类内网域名一般会使用如local域、internal域,或者是和自身业务无关的org域、io域等后缀;
  • 递归域名服务器主要是正常的外部域名解析服务,如163.combaidu.comgoogle.com这一类常用的外网域名等;

2 DNS解析逻辑

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

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

  • 因为主要是分析到DNS服务器的解析流程,因此这里的第一二步直接跳过;
  • 图中的本地DNS服务器可以视为我们的CoreDNS服务器;
  • 正常情况下,我们的CoreDNS服务器和根域名服务器之间的连接是正常的,也就是说④⑤这两步正常情况下是能顺利返回结果的;
    那这里出现异常的情况主要就是请求了一些非法的不合规域名,比如请求tinychen.comillegal这种奇怪的域名,它的顶级域名是.comillegal,如果这个顶级域名是不存在的,那么DNS解析就会返回异常,无法解析;
  • 正常情况下,⑥⑦这两步是由本地DNS服务器去访问顶级域名服务器的IP来获取对应域名的权威域名服务器,一般常用的顶级域名如.com 、.cn这类顶级域名的服务器IP肯定是能正常连上的,但是一些小众的顶级域名就不一定能正常连接了,这类比较常见的是一些小国家的自有顶级域名,详细列表可以参考维基百科
  • 最后就是权威域名服务器,这里也是最容易出问题的地方;
    正常情况下,本地DNS服务器从顶级域名服务器里面拿到权威域名服务器的IP之后就会去权威域名服务器这里获取到最后的域名解析结果,但是这里容易出现两个问题:
  1. 本地DNS服务器和权威域名服务器之间的连接容易出现问题,权威域名服务器一般是各个域名使用者自己维护或者是使用一些DNS服务商提供的服务器,这些服务器出现无法连接或者是崩溃的概率要远大于前面的根域名服务器和顶级域名服务器
  2. 权威域名服务器返回的结果不一定能够正确的传送到本地DNS服务器中,大部分情况下DNS查询并不是加密的,使用明文的UDP进行查询,是比较容易被中间的运营商进行劫持,这里也是DNS污染常见的操作范围;

还有一种常见的DNS污染手段就是市面上的免费公共DNS服务器提供者针对某个特殊域名的解析进行修改,使得用户在使用这些免费的公共DNS解析时没办法解析到正常的IP从而导致该域名提供的服务异常

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

  • 解析正常,一般是国内的主流域名;
  • 因为顶级域名服务器或者权威域名服务器无法正常连接导致无法正常解析,一般为海外域名;
  • 因为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本身配置的灵活性,可以有数种组合,这里只是提供一个示范案例作为参考。

注意上图的插件每个的顺序都是可以调整并且不断递归查询,因此理论上可以进行无限的横向和纵向扩展用于满足日后的增长需求。
  • 首先还是针对递归查询的外部DNS域名,这里以.(root):53表示监听在53端口的根域名查询;
  • 进来的第一层匹配就是前面提及的最高优先级全局劫持名单查询,这一层主要是对恶意域名进行屏蔽过滤;
  • 当需要查询的域名不在全局劫持名单中的时候就会触发fallthrough条件,进入到下一层的dnsredir组件进行分流;
  • dnsredir组件的主要功能就是根据我们配置的域名列表来进行转发,这里我们把域名分为三大类,分别进行不同的逻辑处理;
  • 对于列表里面的海外域名,我们将其转发到海外的DNS解析服务器进行解析,这里统称为海外DNS服务器,例如部分有条件的同学可以在海外线路的机房又或者是公有云的海外节点自建DNS服务器;
  • 当然在自建的海外线路节点DNS服务器也是会有可能碰到无法正常解析的,这时候就需要依赖alternate组件将请求二次转发到海外公共DNS服务器,比如一些海外的公共DNS服务器如8.8.8.8和1.1.1.1等;
  • 对于一些需要自己定义的域名,则再维护另外一份自定义域名列表和RFC1035格式的域名解析结果文件;
  • 这时候相当于再单独自建一个.(root)根域名给自定义域名使用,dnsredir组件将这些自定义的域名转发到这个自建的根域进行解析,正常情况下就会直接解析出自己定义的域名结果;
  • 如果自定义的域名列表和解析结果出现了偏差,导致部分域名在分流列表中缺不在解析结果中,会使得查询失败返回NXDOMAIN,这时候就需要依赖alternate组件将请求二次转发到正常的DNS解析流程
  • 最后就是正常的域名解析,优先使用本机的自建递归缓存服务器进行查询,当查询失败的时候可以转去国内的一些公共递归DNS如114或者是自建的海外DNS等进行补充查询

得益于CoreDNS自身的灵活性,上述的全部插件逻辑可以随意进行组合分配递归调整用于适配不同的业务逻辑。

3.3 Q&A

3.3.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中的配置文件定义;

3.3.2 为什么使用RFC1035格式的文本文件作为自定义域名的配置文件?

CoreDNS本身支持多种外部后端存储方式(mysql、redis、etcd、pdsql等),使用RFC1035格式的文本文件主要是基于性能、稳定性和可维护性考量。

  • CoreDNS会把文本文件的内容全部load到内存中,每次查询都是在内存中查询操作,性能最优,无需额外的网络IO消耗;
  • 无需单独维护额外的数据库和中间件;
  • 排除故障的时候可以直接查看文本文件定位问题;
  • 因为文本文件在每台机器上面都有一份,因此单个CoreDNS实例出现故障不会影响其余的CoreDNS节点;
  • RFC1035格式的文本文件的一个简单示例如下,更具体的操作可以查看bind9的官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】页内切换<router-view>使得url变化导致菜单高亮消失

在写项目时&#xff0c;我们常会用到侧边菜单栏&#xff0c;而具体页面中经常使用<router-view>切换子组件。 但是按照我们平时的写法&#xff0c;切换子组件后会导致url改变&#xff0c;从而使得菜单高亮消失&#xff0c;这是非常影响用户体验的。 所以&#xff0c;我…

圈子社交系统:打破时间与空间的限制。APP小程序H5三端源码交付,支持二开!

在现代社会&#xff0c;社交已成为人们生活中不可或缺的一部分。然而&#xff0c;传统的社交方式往往受制于时间和空间的限制&#xff0c;使得人们难以充分发挥社交的潜力。为了解决这一问题&#xff0c;圈子社交系统应运而生。 圈子社交系统通过技术手段打破时间与空间的限制&…

想考研到电子类,未来从事芯片设计,目前该怎么准备?

最近看不少天坑学子想考研微电子专业&#xff0c;但却不知道该怎么准备&#xff1f;接下来就带大家一起来具体了解一下~ 首先是目标院校的选择&#xff1f; 目前所设的微电子专业学校里&#xff0c;比较厉害的有北京大学、清华大学、中国科学院大学、复旦大学、上海交通大学、…

探索人工智能领域——每日20个名词详解【day9】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…

flex 布局防止元素被挤换行

刚开始是这样的代码&#xff1a; <div class"flex"><span>选择模型&#xff1a;</span><n-select :options"state.chatModelOptions" /> </div>选择模型换行了…不行&#xff0c;这个效果不行&#xff0c;修改后&#xff1…

基于STM32驱动的压力传感器实时监测系统

本文介绍了如何使用STM32驱动压力传感器进行实时监测。首先&#xff0c;我们会介绍压力传感器的工作原理和常见类型。然后&#xff0c;我们将介绍如何选择合适的STM32单片机和压力传感器组合。接下来&#xff0c;我们会详细讲解如何使用STM32驱动压力传感器进行数据采集和实时监…

647. Palindromic Substrings 516. Longest Palindromic Subsequence

647. Palindromic Substrings Given a string s, return the number of palindromic substrings 回文子串 in it. A string is a palindrome when it reads the same backward as forward. A substring is a contiguous sequence of characters within the string. nomal: …

玄子Share-CSS3 弹性布局知识手册

玄子Share-CSS3 弹性布局知识手册 Flexbox Layout&#xff08;弹性盒布局&#xff09;是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局&#xff0c;最重要的一个概念就是主轴与…

服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器使用磁盘柜RAID卡搭建了一组riad5磁盘阵列。服务器上层分配了一个LUN&#xff0c;划分了两个分区&#xff1a;sdc1分区和sdc2分区。通过LVM扩容的方式&#xff0c;将sdc1分区加入到了root_lv中&#xff1b;sdc2分区格式化为XFS文件系统。…

iptables的源地址、目标地址转换

目录 一、实验准备 二、配置web服务器 三、配置web防火墙网卡 四、配置客户机网卡 五、测试 1、开启防火墙功能&#xff0c;设置源地址转换&#xff0c;通过改变我客户机的地址身份为web服务器同网段来实现访问 2、通过改变目标地址&#xff08;客户机&#xff09;的地址…

力扣973. 最接近原点的 K 个点(java 排序法,大顶堆法)

Problem: 973. 最接近原点的 K 个点 文章目录 题目描述思路解题方法复杂度Code 题目描述 给定一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点&#xff0c;并且是一个整数 k &#xff0c;返回离原点 (0,0) 最近的 k 个点。 这里&#xff0c;平面…

gitLab创建新项目

1.进入git2.选择创建项目3.勾选生成readme.md文件4.邀请成员

如何借助Instagram群发工具更为精准、高效的市场拓展

在当今全球化的商业舞台上&#xff0c;Instagram作为一种强大的社交媒体平台&#xff0c;已成为跨海商家推广产品和服务的理想选择。为了更有效地利用这一平台&#xff0c;跨海商家纷纷借助Instagram群发工具&#xff0c;通过智能化的推广方式&#xff0c;实现了更为精准、高效…

17、迭代器模式(Iterator Pattern)

迭代器模式提供了顺序访问集合对象中的各种元素&#xff0c;而不暴露该对象内部结构的方法。如Java中遍历HashMap。 迭代器模式将遍历集合中所有元素的操作封装成迭代器类&#xff0c;其目的是在不暴露集合对象内部结构的情况下&#xff0c;对外提供统一访问集合的内部数据的方…

D6208单片双向马达驱动电路国产芯片,工作电源电压范围宽(4.5V~15.0V),内设保护二极管采用SOP8封装

D6208 是一块单片双向马达驱动电路&#xff0c;它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动&#xff0c;功率输出部分根据逻辑控制能提供100mA&#xff08;典型值&a…

nodejs微信小程序+python+PHP在线购票系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

青春挚爱-计算机

为什么选择计算机&#xff1f; 看到这个问题&#xff0c;不禁把镜头遥向十几年前的某个片刻。 一、梦想的种子 首先信仰技术是从小的梦想&#xff0c;比如科学家精神之启蒙&#xff0c;比如勇敢者探索之启蒙。 为什么课本中的科学家可以做到精忠报国&#xff0c;矢志不渝&…

备战春招——12.05算法

树、二叉树 本次主要是对树、二叉树的前中后和递归与非递归遍历以及通过这种结构完成一些操作实现。 二叉树 中序遍历 中序遍历就是中间打印出结果嘛,如下列递归实现的&#xff0c;中间取结果. /** 递归实现* Definition for a binary tree node.* struct TreeNode {* …

基于高德API实现网络geoJSON功能(整体)

代码实现&#xff1a; <script>// 3、初始化一个高德图层const gaode new ol.layer.Tile({title: "高德地图",source: new ol.source.XYZ({url: http://wprd0{1-4}.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z},w…

UE小:UE5性能分析

开始录制性能追踪 要开始录制性能追踪&#xff0c;您可以简单地点击界面上的“开始录制”按钮。 查看追踪数据 录制完成后&#xff0c;点击“Trace”菜单中的“UnrealInsights”选项来查看追踪数据。 使用命令行进行追踪 如果点击录制按钮没有反应&#xff0c;您可以通过命令…