Linux域名解析(DNS)

2023-05-16

 DNS简介

域名系统(英文:Domain Name System,缩写:DNS),使用应用层协议,是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。 当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

默认端口:

  • 连接DNS服务器,使用TCP协议的53端口。
  • DNS服务器进行解析,使用UDP协议的53端口

DNS系统的作用

  • 正向解析:根据域名查找对应的IP地址
  • 反向解析:根据IP地址查找对应的域名

域名级数是指一个域名由多少级组成,域名的各个级别被“.”分开,最右边的"."就是根域名,通常省略不写。

所有的域名必须以点(.)结尾

1)根域名服务器:

  • IPv4的根名称服务器: 全世界只有13台IPv4根域名服务器。1个为主根服务器在美国。其余12个均为辅根服务器,其中9台在美国,欧洲2个(位于英国和瑞典),亚洲1个位于日本。
  • IPv6的根名称服务器:全球共25台,中国1主3从,美国1主2从。
  • 根域名服务器一旦有任何异常对整个互联网影响都非常大。目前全球有了许多的根域名服务器镜像服务器,这点增加了容错率。

2)一级DNS服务器: 专门负责一级域名(顶级域名)的解析

2)二级DNS服务器:专门负责二级域名的解析

3)子域名服务器: 专门负责子域名的解析(三级及以下域名都叫子域名)。

4)常用主机名

        

1.4 DNS系统类型

缓存域名服务器

也称为DNS高速缓存服务器
通过向其他域名服务器查询获得域名-->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度

主域名服务器

特定DNS区域的权威服务器,具有唯一性
负责维护该区域内所有域名-->IP地址的映射记录
需要自行建立所负责区域的地址数据文件

从域名服务器

也称为辅助域名服务器,是对主域名服务器的热备份
其维护的域名-->IP地址记录来源于主域名服务器
需要从主域名服务器自动同步区域地址数据库

1.5 DNS的查询方式(递归查询和迭代查询)

递归查询

主机向本地域名服务器的查询一般都是采用递归查询。
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。在域名服务器查询期间,客户机将完全处于等待状态。
因此,递归查询只会返回两种信息:要么是所要查询的IP地址,要么是查询失败。

迭代查询

本地域名服务器向根域名服务器及其它级别的查询是迭代查询。
当根域名服务器收到本地域名服务器发出的迭代查询请求报文后,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。下一个服务器收到请求后也是如此,要么返回IP,要么告诉本地域名服务器下一步去找谁。 即本地域名服务器按照提示的指引依次查询, 直到返回查询的结果为止 。

递归查询和迭代查询的特点:

递归查询:主机只发出一次请求,要求对方给出最终结果。返回的结果只有两种:查询成功或查询失败。
迭代查询:主机需要发起多次请求,返回的是所需IP地址或最佳查询地址。

DNS递归解析基本流程:

在这个查询过程中,一直是以本地名称服务器(Local DNS)为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理的作用。如果考虑了本地名称服务器的缓存技术(也就是在DNS服务器上对一定数量的以前查询记录保存一定时间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,则递归解析的基本流程如下:

1)、客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求

2)、本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面一样的DNS域名查询请求发给根名称服务器

3)、根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器

4)、本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面一样的DNS域名查询请求

5)、对应的顶级名称服务器在收到DNS查询请求后,也是先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给DNS客户端,否则向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址

然后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。然后再由本地名称服务器返回给DNS客户,同时本地名称服务器会缓存本次查询得到的记录项

迭代查询   

DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果

客户端向本机配置的本地名称服务器(在此仅以首先DNS服务器为例进行介绍,其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。 

本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回一条DNS应答报文,报文中会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。

DNS客户端在收到本地名称服务器的应答报文后,会根据其中的根名称服务器地址信息,向对应的根名称服务器再次发出与前面一样的DNS查询请求报文。

根名称服务器在收到DNS查询请求报文后,通过查询自己的DNS数据库得到请求DNS域名中顶级域名所对应的顶级名称服务器信息,然后以一条DNS应答报文返回给DNS客户端。

DNS客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名称服务器发出与前面一样的DNS查询请求报文。

顶级名称服务器在收到DNS查询请求后,先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给DNS客户端,否则通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条DNS应答报文返回给DNS客户端。

然后DNS客户端继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的权威名称服务器返回到最终的记录
 

1.6 本地主机映射文件hosts

/etc/hosts 文件,保存主机名与IP地址的映射记录。

hosts —— the static table lookup for host name(主机名查询静态表)。 hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下。hosts文件包含了ip地址与主机名之间的映射,还包括主机的别名。

hosts 文件和DNS服务器的比较:

  • 默认情况下,系统首先从hosts文件查找解析记录

    • hosts 文件的优先级高于DNS服务器,这是由 /etc/nsswitch.conf 文件规定的
  • hosts 文件只对当前的主机有效

  • hosts 文件可减少DNS查询过程,从而加快访问速度

1.7 域名的解析过程

客户机先去查找本机的/etc/hosts 文件,看文件中是否存在该域名和IP地址的映射记录。如果有就调用,没有就进行下一步。
客户机请求本地域名服务器(LDNS)来解析这个域名,主机要求本地域名服务器直接返回最终结果。在返回结果之前,客户机将完全处于等待状态,不再二次请求。统一由本地域名服务器向各级域名服务器转发请求。
本地域名服务器收到客户机的请求后,先查询自己的缓存信息,如果有这个域名的映射记录则返回结果,没有则进行下一步。
本地域名服务器请求根域名服务器解析这个域名,根域名告诉本地域名服务器去找对应的一级域名服务器。
本地域名服务器请求一级域名服务器解析这个域名,一级域名服务器告诉它去找对应的二级域名服务器。
本地域名服务器请求二级域名服务器解析这个域名,二级域名服务器告诉它去找对应的子域名服务器。
本地域名服务器请求子域名服务器解析这个域名,子域名服务器返回对应的IP地址。
本地域名服务器将IP地址记录到缓存中,并返回给客户机。客户机根据收到的IP地址访问该网站。

2 NDS服务程序——BIND

BIND配置文件

  • 主配置文件:  /etc/named.conf
  • 根域配置文件: /var/named/named.ca
  • 区域配置文件: /etc/named.rfc1912.zones
  • 保存DNS解析记录的数据库文件位于: /var/named/目录下

2.6 对配置文件进行语法检查

  • named-checkconf工具:检查主配置文件

 named-checkconf [主配置文件]  

  • named-checkzone工具:检查区域数据库文件

named-checkzone <域名> [区域数据库文件]

 named-checkzone yuji.com yuji.com.zone

实验一 地址解析

实验要求:

架设一台DNS服务器负责yuji.com域的域名解析工作。DNS服务器的IP地址为192.168.138.131,域名为master.yuji.com。要求为以下域名做正向解析工作。

  • 关闭防火墙和selinux。
  • 确认本机网络地址、主机映射,将DNS服务器改为本机IP。
  • 编辑主配置文件named.conf,允许DNS服务器监听所有IP地址,允许所有客户端查询。
  • 编辑区域配置文件/etc/named.rfc1912.zones文件,设置正向解析区域。
  • 建立正向解析区域数据文件yuji.com.zone。
  • 重新启动named服务,或重载配置。验证正向解析是否成功

关闭防火墙,安全机制,重启网卡 

查看DNS服务器地址 

 主配置文件修改

编辑区域配置文件/etc/named.rfc1912.zones

建立正向解析区域数据库文件yuji.com.zone

进入/var/named目录,复制模板

 检查配置文件是否正确

 重启服务,检查DNS解析功能

 实验二:构建主域名服务器之反向解析

  1. 编辑/etc/named.rfc1912.zones文件,设置反向解析区域。
  2. 建立反向解析区域数据文件nan.com.zone。
  3. 重新启动named服务,或重载配置。验证反向解析是否成功

vim /etc/named.rfc1912.zones

 进入 /var/named 文件夹 然后cope模板,然后设置数据库文件

 

 

实验三:构建从域名服务器(主从复制)

主域名服务器,相关配置文件中增加从服务器的地址

 设置好了 要重启named 服务

设置第二天DNS服务器的IP地址,重启网卡

配置从服务器,自动从主服务器中备份区域数据库文件到从服务器的/var/named/slaves/目录下。

关闭防火墙,安全机制,配置全局配置文件 

编辑全局配置文件/etc/named.conf。 

 .编辑区域配置文件/etc/named.rfc1912.zones。 

 重启named服务,显示主服务器的数据库文件自动备份到的从服务器

 验证

重点总结

  1. 一定要关闭防火墙和selinux。
  2. 编辑配置文件和区域数据库文件时,需要严格注意语法书写,其格式非常严格。
  3. ”@“是DNS记录中的保留字,表示当前域名。
  4. 修改配置文件后,一定要重启服务,之后才能生效。
  5. BIND软件包提供了三个DNS测试工具:nslookup,dig,host

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux域名解析(DNS) 的相关文章

  • 为SIGSEGV设置handler有用吗?

    背景 最近几天看到先辈们30年前留下了一块代码 xff0c 为SIGSEGV设置了handler xff0c 所以心中有了两个疑问 xff1a 为SIGSEGV设置handler有没有用 xff1f 能否跳过引起崩溃的那一句指令 xff1f
  • GDB调试技巧实战--为优化版release版本的函数寻找参数值

    在上一篇 GDB调试技巧实战 为release版本的函数寻找参数值 中 xff0c 我们探讨了一种为函数找参数的办法 xff0c 但是 xff0c 那是最理想的情况 编译时没有使用 fomit frame pointer 编译时没有开启优化
  • 通过实例了解uprobe及其对性能的影响

    前言 uprobe是用户空间探针的意思 xff0c 可以用来给用户程序的任何地方下探针 xff0c 不仅仅是函数粒度层级的 所以异常灵活 如果不熟悉ftrace uprobe 可参考以下文档 xff1a https www kernel o
  • bpftrace各维度捕捉SIGKILL信号

    一 问题 Ftrace 几乎适配任何主流内核版本 xff09 和 bpftrace xff08 要求内核版本4 1以上 xff09 中都有两个现成的脚本execsnoop bt killsnoop bt 我经常用他们从外部 xff08 不去
  • 图形化VS201x工程中的项目依赖关系

    目录 1 背景 2 入手 2 1 分析sln文件 2 2 给出正则表达式 3 程序 4 demo 5 补充 另外一种情况 6 补充 完整代码 1 背景 初次接手一个大工程时 往往因为复杂的项目依赖而遇到各种编译问题 同时如果能图形化其中的依
  • 深入应用python关键字yield--实现任务调度

    在此假设读者了解yield关键字的基本用法 如不了解请参照python文档或google之 大家知道遇到yield关键字时python会把当前的环境 xff0c 比如局部变量 全局变量等 xff0c 给记录下来以便以后能正确的继续向下运行
  • 刘慈欣(三体作者)写给200年以后的女儿的一封信

    原文地址 xff1a http blog sina com cn s blog 540d5e800101lcsb html 亲爱的女儿 xff0c 你好 xff01 这是一封你可能永远收不到的信 xff0c 我将把这封信保存到银行的保险箱中
  • 程序员玩游戏之二--篡改植物大战僵尸2的阳光值

    植物大战僵尸1几年前曾经风靡一时 xff0c 妇孺皆知 xff01 其续作奇幻时空之旅千呼万唤始出来 xff0c 不过从首发到目前都1月有余 xff0c 本人竟然还没玩过 于是昨晚下载了一个汉化版 本人系统为IOS5 0 1 xff0c a
  • 设计模式:生产者消费者模式

    在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题 该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度 为什么要使用生产者和消费者模式 xff1f 在线程世界里 xff0c 生产者就是生产数据的线程 xff0c
  • activemq 应用实践——queue

    首先创建发送端程序SenderTestBase和接收端程序ReceiveTestBase 发送端 xff1a SenderTestBase java package test import java util Date import jav
  • swig包装c++步骤

    使用Swig封装C 43 43 到Python的心得 01 收藏 一 xff0e 简述 前一段时间由于工作需要重点学习了一下用Swig来封装C 43 43 代码到Python的知识 xff0c 期间遇到一些问题 xff0c 也有一些心得体会
  • PS CC2019 安装过程中遇到 Command line option syntax error. Type Command /? for Help.

    背景前言 昨天买了一块高漫WH850 的数位板 手绘板 板子都买了 肯定要安装PSCC 2019 了 但是在安装过程中遇到一个问题 那就是Command line option syntax error Type Command for H
  • 【上传】Nginx 上传文件

    本文包含知识点 xff1a 1 nginx服务搭建 2 nginx文件上传模块搭建 3 文件重命名服务搭建 3 nginx整体配置 4 测试 引言 一般可以应用在上传不是跟频繁的场景 xff0c 都可以采用Nginx上传文件 我们都知道 x
  • 推荐一些非常非常实用的linux命令(持续更)

    终生学习是我追求的目标 1 通过yum命令只下载rpm软件包但不安装 PS xff1a 适合在没有外网的情况下自制本地yum源 xff0c 前提是先做好镜像 方法一 xff1a yumdownloader 如果只想通过 yum 下载软件的软
  • Android 根据打包环境不同,显示不同的应用名称

    可以动态的设置应用名称和应用图标 1 在app的buid gradle中设置resValue 值 productFlavors span class token punctuation span dev span class token p
  • springboot整合guava实现本地缓存

    springboot整合guava实现本地缓存 一 Springboot缓存 SpringBoot支持很多种缓存方式 xff1a redis guava ehcahe jcache等等 二 guava介绍 Guava Cache 是 Goo
  • Java 中如何使用枚举来消除 if/else

    今天 xff0c 准备重新学习一下 Java 中的枚举类型 为什么现在要去重新学习呐 xff1f 因为在刚开始学习 Java 的时候 xff0c 对于枚举这一块的学习不太重视 xff0c 工作之后发现用到枚举的地方挺多的 xff0c 就有了
  • Lottie- 让Android动画实现更简单

    Lottie是什么 xff1f Lottie是Airbnb开源的一个支持 Android iOS 以及 ReactNative xff0c 利用json文件的方式快速实现动画效果的库 这么看可能很难理解 xff0c 接下来我将详细的讲解如何
  • 使用HC05蓝牙模块实现数据无线传输,看完包会

    由于需要将单片机采集到的数据无线传输到上位机 xff0c 考虑到成本原因 xff0c 故采用HC05蓝牙模块进行数据传输 一 开发工具 单片机 两块HC05蓝牙模块 一个USB转TTL模块 xff0c 电脑上安装串口调试软件 xff08 推
  • 【路径规划】(4) 蚁群算法,附python完整代码

    大家好 xff0c 今天和各位分享一下蚁群算法 xff0c 并基于 tkinter 完成一个旅行商问题 完整代码可以从我的 GitHub 中获得 xff1a https github com LiSir HIT Mathematical P

随机推荐

  • 利用Jekyll在GitHub Pages上部署博客

    开始之前 我觉得阮一峰的 搭建一个免费的 xff0c 无限流量的Blog github Pages和Jekyll入门 是一个很经典的入门 xff0c 每个Jekyll初学者都应该先去看一看 xff0c 另外 GitHub Pages官网以及
  • CSDN博客导出工具 Mac By Swift

    写这个的目的主要是用于了解Swift语言本身 xff0c 以及如何与Objc和第三方框架交互 需要先使用CSDN账号来登录 xff0c 可以导出所有的博客文章 xff0c 添加YAML头信息的时候 xff0c 会在头信息里面包含文章对应的标
  • 如何避免在Block里用self造成循环引用

    一般来说我们总会在设置Block之后 xff0c 在合适的时间回调Block xff0c 而不希望回调Block的时候Block已经被释放了 xff0c 所以我们需要对Block进行copy xff0c copy到堆中 xff0c 以便后用
  • Xcode及模拟器SDK下载

    现在不会有人想在 Xcode 里安装旧版的模拟器了 xff0c 本篇不再维护 如果你嫌在 App Store 下载 Xcode 太慢 xff0c 你也可以选择从网络上下载 xff1a Xcode下载 xff08 Beta版打的包是不能提交到
  • Mac下最好用的文本编辑器

    友情提醒 xff1a 图多杀猫 以前在Windows下一直用gVim xff0c 可以用键盘控制一切 xff0c 操作起来是又快又爽 xff0c 还支持一大堆插件 xff0c 想怎么玩就怎么玩 后来转Mac后 xff0c 也沿袭着之前的习惯
  • iOS8 Core Image In Swift:更复杂的滤镜

    iOS8 Core Image In Swift xff1a 自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift xff1a 更复杂的滤镜 iOS8 Core Image In Swift xff1a 人脸检测
  • 使用CocoaPods过程中的几个问题

    当把CocoaPods生成的workspace移动到上层目录时 xff0c 需要改下Pods xcconfig和工程里的一些设置 xff0c 就通常没什么难度 当遇到这个问题时 xff1a Could not automatically s
  • 仿网易云音乐的播放进度条

    仿网易云音乐的播放进度条 xff0c 有三种状态 xff1a 播放 暂停和拖动 xff0c 只是实现了动画和主要的交互逻辑 xff0c 其他细节 xff08 如暂停音乐的播放等 xff09 还需要自己完善 xff1a DKPlayerBar
  • 用 Houston 在本地调试远程通知

    Houston 的背景 Houston 在 GitHub 上的地址 xff1a https github com nomad Houston xff0c 作者又是Mattt Thompson xff0c 简直是惨无人道啊 xff0c 又高产
  • 如何设计一个 iOS 控件?(iOS 控件完全解析)

    代码的等级 xff1a 可编译 可运行 可测试 可读 可维护 可复用 前言 一个控件从外在特征来说 xff0c 主要是封装这几点 xff1a 交互方式显示样式数据使用 对外在特征的封装 xff0c 能让我们在多种环境下达到 PM 对产品的要
  • 蛋花花分享人工智能概念的诞生与发展

    蛋花花分享人工智能概念的诞生与发展 xff01 如今人工智能非常的火 xff0c 在各行各业都有突出的变现 xff0c 让人期待它未来的发展 蛋花花认为了解人工智能向何处去 xff0c 首先要知道人工智能从何处来 1956年夏 xff0c
  • 用JFreeChart 生成报表

    JFreeChart是JAVA平台上的一个开放的图表绘制类库 它完全使用JAVA语言编写 xff0c 是为applications applets servlets 以及JSP等使用所设计 JFreeChart可生成饼图 xff08 pie
  • Mac原生字典支持的词典

    一共十八部词典 xff0c 见下 xff1a 打了一个包 xff0c 有700多M xff0c 在CSDN没有权限上传这么大的文件 xff0c 故上传到115上 放到 Library Dictionaries 目录中即可 下载地址
  • NSAttributedString 详解

    NSAttributedString可以让我们使一个字符串显示的多样化 xff0c 但是目前到iOS 5为止 xff0c 好像对它支持的不是很好 xff0c 因为显示起来不太方便 xff08 至少没有在OS X上方便 xff09 首先导入C
  • ftp三种用户权限设置

    修改配置文件vsftpd conf Vi etc vsftpd vsftpd conf 修改匿名用户为禁止 2在禁止登录名单里删除root vi etc vsftpd user list vi etc vsftpd ftpuser 然后按d
  • 常见的socket出错总结

    常见错误 ECONNREFUSED 111 没有这个端口 EAGAIN 11 buff已满 EPIPE 32 客户端断掉了 ECONNRESET xff08 104 xff09 客户端先可以正常连接服务端 xff0c 并可以进行数据收发 x
  • CentOS-8中安装JDK 1.8

    备忘录 xff1a 喜欢 xff0c 即可 xff0c 无它 本例环境 xff1a 操作系统 xff1a CentOS 8 1 1911 x86 64 dvd1 安装包 xff1a jdk 8u251 linux x64 rpm 远程连接工
  • Android 系统(125)---Android通过Dialer实现暗码启动

    Android通过Dialer实现暗码启动 目前接触比较多的就是通过dialer应用来启动 触发暗码 本文以Dialer为例 xff0c 1 经过调试定位 xff0c 发现拨号盘接对应的Activity为DialtactsActivity
  • 阿里程序员常用的 15 个高效工具,大部分已开源!

    阿里程序员常用的 15 个高效工具 xff0c 大部分已开源 xff01 阿里将自身在各类业务场景下的技术积淀 xff0c 通过开源 云上实现或工具等形式对外开放 xff0c 本文将精选了一些阿里巴巴的开发者工具 xff0c 希望能帮助开发
  • Linux域名解析(DNS)

    DNS简介 域名系统 xff08 英文 xff1a Domain Name System xff0c 缩写 xff1a DNS xff09 xff0c 使用应用层协议 xff0c 是互联网的一项服务 它作为将域名和IP地址相互映射的一个分布