DNS配置必备知识: DNS配置-阿里云开发者社区

开发者社区> 阿里云术语库> 正文

DNS配置必备知识: DNS配置

简介: DNS,英文全程"Domain Name System,中文全程:域名系统,作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS基于C/S架构(多数基于套接字架构的都是C/S架构),同时使用TCP和UDP的53号端口,当前,对于每一级域名长度限制是63个字符,域名总长度则不能超过253个字符。  我们都知道,IP地址是由32位的二进制数字组成。用户与因特网上某台主机通行时,显然不愿意使用难以记忆的32位的二进制主机地址。相反,大家更愿意使用比较容易记住的主机名称。这时DNS的出现就将繁琐复杂32位二进制数字解析大家易于接受的字符串形式。

所属技术领域:

DNS

|名词定义|

一、DNS概述:
DNS,英文全程"Domain Name System,中文全程:域名系统,作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS基于C/S架构(多数基于套接字架构的都是C/S架构),同时使用TCP和UDP的53号端口,当前,对于每一级域名长度限制是63个字符,域名总长度则不能超过253个字符。
 我们都知道,IP地址是由32位的二进制数字组成。用户与因特网上某台主机通行时,显然不愿意使用难以记忆的32位的二进制主机地址。相反,大家更愿意使用比较容易记住的主机名称。这时DNS的出现就将繁琐复杂32位二进制数字解析大家易于接受的字符串形式。
二、DNS即使用TCP又使用UDP
传输层协议
 TCP:Transmission Control Protocol 面向连接的协议:双方通信前需要事先建立虚连接
 UDP:User Datagram Protocol 无连接的协议:双方无需通信前事先建立虚连接
首先了解一下TCP与UDP传送字节的长度限制:UDP报文最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UPD报文一般不会大于512字节。
 区域传送使用TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多,因此为了保证数据的正确性,则使用基于可靠连接的TCP。
域名解析时使用UDP协议,客户端向DNS服务器查询域名,一般返回的内容不超过512字节,用UDP传输,不经过TCP三次握手,大大提高响应速度。
三、域名空间
对于DNS域名空间,我们要制定一套命名规则,防止域名出现重复,关于DNS域名规则我们可以将生活中的快递系统联系起来,使用层次的地址结构。当你要邮寄物品给某人时,快递单号上肯定要写上:中国、广东省、惠州市、惠城区、江北市政府xx号。而一个域名看起来则是这样的groups.google.com。
 对于Internet来说,域名层次结构的顶级(相当于国际快递地址中的国家部分)由ICANN(互联网名称与数字地址分配机构)负责管理。目前,已经有超过800多个顶级域名,每个顶级域名可以进一步划为一些子域(二级域名),这些子域可被再次划分(三级域名),以此类推。所有这些域名可以组织成一颗树,如下图所示(图片来自Computer Networks:7-1):
图片.png

顶级域名类别有:
• 通用的顶级域名如:.org、.com、.net、.gov、.edu 等等
• 国家代码顶级域名如:.us、.ca 等,分别对应美国和加拿大的国家代码
• 新的品牌顶级域名,允许组织创建最多64个字符的TLD,如:.linux、.microsoft、.companyname 等
• 基础架构顶级域名如:.arpa
子域名
当访问一个类似mail.google.com这样这样的网站,这里的mail就是googole.com的子域名,只有mail.google.com的名称服务器知道下面存在的所有主机,所以Google会回复是否有一个叫mail的子域名,根名称服务器对此并不知请。
DNS服务器的类型
分为三种DNS服务器:
主DNS服务器
 这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定的域名的地址。主DNS服务器知道全部在它管辖范围的主机和子域名的地址。
辅助DNS服务器
 这些服务器作为主DNS服务器的备份,也承担了一定的负载。主服务器知道辅助DNS服务器存在,并且会向他们推送更新。
缓存DNS服务器
 这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。
四、工作流程简述
图片.png

域名到IP地址的解析是由分布因特网上的许多域名服务器程序共同完成的。域名服务器程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器。
 域名到IP地址的解析过程要点如下:当某一个应用需要把主机名解析为IP地址,该应用进程就调用解析程序,并称为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可通行。
 若本地域名服务器不能回答该请求,则此域名服务器就暂时称为DNS的另一个客户,并向其他域名服务器发出查询请求。这种过程直到能够回答该请求的域名服务器为止。此过程称之为(迭代)
五、域名解析查询:递归及迭代两者区别

  1. 主机向本地域名服务器查询一般都是常用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户端的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
  2. 本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
    图片.png

就个人理解递归查询可以比喻为我们到政府部门办理事情一样,如果你运气好的话,碰到办事员心情不错而往往事情就能好办很多,直接放下材料就能回去了,剩下的事情就等待处理结果就好了。要万一当天办事员因为失恋了,心情不好,那你就要被告知你所要办理的材料还需要找什么部门,需要谁谁盖章后才能受理,就如一个“皮球“被踢来踢去。如此反复,最后事情一波三折的也还不一定能够办下来,这就是迭代查询。
为提高DNS查询效率,减轻根域名服务器的负荷和减少因特网上DNS查询报文的数量,在域名服务器中广泛使用了高速缓存(或高速缓存服务器),用来存放最近查询过的域名以及从何处获得域名映射信息的记录
 当DNS服务器向另一个DNS服务器请求并收到它的响应,就在把它发送给客户之前,把这个信息存储到它的高速缓存中,这个信息会在高速缓存中存在一个生存周期TTL,过了生存周期就删除这条信息。

DNS从服务器的配置详解
一、DNS从服务器的作用
DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就会宕机罢工,其次如果这台服务器出现了硬件故障那么服务器管理的区域的域名将无法访问。为了解决这些问题,最好的办法就是使用多个DNS服务器同时工作,并实现数据的同步,这样两台服务器就都可以实现域名解析操作。主DNS服务器架设好后,辅助的DNS服务器的架设就相对简单多了。架设主从DNS服务器有两个前提条件,一是两台主机可以不一定处在同一网段,但是两台主机之间必须要实现网络通信;二,辅助DNS服务器必须要有主DNS服务器的授权,才可以正常操作。此时,我们以IP地址192.168.115.130作为我们辅助的DNS服务器的IP地址;

二、DNS从服务器搭建和配置
目的:减轻主服务器的压力
准备:主服务器(192.168.115.120)
从服务器(192.168.115.130)
客户机
1、搭建主DNS服务器
(1)配置前的准备工作
1、配置好本地光盘yum源或者配置网络yum源
2、设置好防火墙开放UDP的53端口,或者直接关闭防火墙
防火墙永久关闭:/etc/init.d/iptables stop

              service iptables stop

3、关闭selinux
selinux临时关闭:setenforce 0
selinux永久关闭:sed –i“7s/enforcing/disabled/g”/etc/selinux/config
(2)安装bind软件
[root@master ~]# yum -y install bind

(3)修改主配置文件/etc/named.conf两个地方为{any}
[root@master ~]# vim /etc/named.conf
options {

    listen-on port 53 { any; };
    listen-on-v6 port 53 { ::1; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { any; };

(4)修改区域文件/etc/named.rfc1912.zones
[root@master ~]# vim /etc/named.rfc1912.zones
zone "long.com" IN {

    type master;
    file "named.zheng";   正向解析文件名(名称可以自定义)
    allow-update { none; };

};

zone "115.168.192.in-addr.arpa" IN {

    type master;
    file "named.fan";    反向解析文件名(名称可以自定义)
    allow-update { none; };

提示:上面的配置文件可以只保留两个地方,一个正向解析域名,一个反向解析域名,其余都可以删除
[root@master ~]# cd /var/named/
[root@master named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves

生成上面的/etc/named.rfc1912.zones配置文件中指定的正反解析文件
[root@master named]# cp -a named.localhost named.zheng
[root@master named]# cp -a named.loopback named.fan

(5)修改上面的正向解析文件和反向解析文件
正向解析文件named.zheng的修改
[root@master named]# vim named.zheng
$TTL 1D
@ IN SOA long.com. rname.invalid. (

                                    0       ; serial
                                    1D      ; refresh
                                    1H      ; retry
                                    1W      ; expire
                                    3H )    ; minimum
       NS      dns.long.com.

dns A 192.168.115.120 dns服务器的IP地址
www A 192.168.115.120 www服务器的IP地址

    AAAA    ::1

~

反向解析文件named.fan的修改:
[root@master named]# vim named.fan
$TTL 1D
@ IN SOA long.com. rname.invalid. (

                                    0       ; serial
                                    1D      ; refresh
                                    1H      ; retry
                                    1W      ; expire
                                    3H )    ; minimum
      NS      dns.long.com.

120 PTR dns.long.com.
120 PTR www.long.com.

[root@master named]# systemctl start named.service 启动dns服务
(6)把主DNS服务器也同时作为网页服务器并安装Apache服务
[root@master ~]# yum -y install httpd
[root@master ~]# systemctl start httpd.service
2、搭建从DNS服务器
前面的步骤和主服务器基本一样。
(1)安装bind软件
[root@slave ~]# yum -y install bind
(2)修改配置文件/etc/named.conf两个地方为{any}
[root@slave ~]# vim /etc/named.conf
options {

    listen-on port 53 { any; };
    listen-on-v6 port 53 { ::1; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { any; };

(3)修改区域文件/etc/named.rfc1912.zones
[root@slave ~]# vim /etc/named.rfc1912.zones
zone "long.com" IN { 这里域名和主DNS一样

    type slave;     这里把类型改为slave
    masters { 192.168.115.120; };     这里添加一行写主服务器的地址
    file "slaves/named.zheng";     把主服务器的正向解析文件同步到本服务器
    allow-update { none; };

};

zone "115.168.192.in-addr.arpa" IN {

    type slave;      
    masters { 192.168.115.120; };
    file "slaves/named.fan";
    allow-update { none; };

};
(4)启动从DNS服务器的named服务,并查看正反解析文件是否同步
[root@slave named]# systemctl start named.service 启动从服务器的named服务
[root@slave slaves]# pwd
/var/named/slaves
[root@slave slaves]# ls 可以看到主服务器的正向和反向解析文件已经同步过来了
named.fan named.zheng
3、配置客户机的DNS地址为从服务器的IP地址,看能否访问Apache服务器。
(1)配置客户机的DNS地址为从服务器IP地址
客户机的配置如下:
IPADDR=192.168.115.150
NETMASK=255.255.255.0
GATEWAY=192.168.115.2
DNS1=192.168.115.130 从DNS服务器的IP地址
(2)在客户机测试是否可以访问Apache页面
[root@localhost ~]# yum -y install elinks
[root@localhost ~]# elinks www.long.com
图片.png

通过在客户机测试可以看出我们的从DNS服务器已经配置成功了。
提示:以上所有配置和测试都是在centos7.x上进行的。

|发展历程|

DNS最早于1983年由保罗•莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。
  早期的域名必须以英文句号“.”结尾,当用户访问 www.wikipedia.org的HTTP服务时必须在址栏中输入: http://www.wikipedia.org. ,这样DNS才能够进行域名解析。如今DNS服务器已经可以自动补上结尾的句号。
  当前,对于域名长度的限制是63个字符,包括www.和.com或者其他的扩展名。域名同时也仅限于ASCII字符的一个子集,这使得很多其他语言无法正确表示他们的名字和单词。基于Punycode码的IDNA系统,可以将Unicode字符串映射为有效的DNS字符集,这已经通过了验证并被一些注册机构作为一种变通的方法所采纳。
|技术特点|
将域名解析为IP 地址

      客户端向DNS服务器(DNS服务器有自己的IP地址)发送域名查询请求

DNS服务器告知客户机Web服务器的IP 地址

客户机与Web 服务器通信

|相关词|

DNS查询过程(这是很重要的了解DNS原理的一个过程)

    通过分级管理可以有效的管理全球上亿的域名信息(类似于在公司中,CEO只管理各个部门的经理;各个部门的经理只管理自己部门中的各个组长;各个组长只管理自己组的组员。至少这是一种比较有效的管理方式)

    下面以一个客户机想要访问 www.benet.com 这个WEB服务器的过程来理解DNS的原理
图片.png

 

      1.客户机(PC)向首选DNS服务器(首选DNS服务器是指当前你的PC机连接的DNS服务器,Windows可以使用ipconfig命令查看)发起请求:”你知道www.benet.com的IP吗?“如果首选DNS服务器知道(一般如果首选DNS服务器曾经解析过,那么会进行一段时间内的缓存,默认三天,如果正好在缓存时间内,那么首选服务器就会知道这个域名的IP),那么首选DNS 服务器就会直接给客户机返回域名的IP 地址

      2.若首选DNS 服务器上没有相关信息,就不能直接返回域名的IP 地址,这时候,首选DNS 服务器就会去询问根DNS服务器(所有的DNS 服务器都知道全球的13 台DNS根服务器在哪里),根服务器可能不知道这个具体的 www.benet.com 的IP地址,但是它知道一级域 com 的IP(也就是说根服务器只负责维护所有的一级域,所以也就几百条数据在这里,虽然数据量少,但是它接受来自全球的请求,所以负载也很大)

      3.根服务器将com 的IP地址返回给 首选DNS 服务器

      4.首选DNS服务器再去请求 "com" DNS服务器:”你知道 www.benet.com的IP吗“,但是com DNS服务器也不知道 www.benet.com 的IP,但是com DNS 服务器知道 benet.com 的IP,

      5.”com“DNS服务器将这个信息返回给 首选DNS 服务器

      6.首选DNS服务器再去请求 "benet.com" DNS服务器,这时候 benet.com 服务器当然就会知道 www.benet.com的IP地址

      7.”benet.com“DNS服务器将这个信息返回给首选DNS 服务器

      8.首选DNS 服务器将获取到的 www.benet.com的IP返回给客户机

      9.客户机根据获取到的www.benet.com 的IP地址来访问WEB服务器

      10.WEB服务器返回相关的数据

域名空间结构
图片.png

    
扩充:

为什么一定要设置DNS才能上网?有些朋友可能会发现,为什么我可能登陆QQ、MSN,但却打不开网页呢?其实大部分原因都是因为DNS服务器故障造成的,DNS服务器地址是唯一的,是运营商提供给终端用户用来解析IP地址及域名的关系,而如果不设定DNS服务器地址,那么就无法查询地址的去向,自然也就打不开网页,而QQ、MSN等即时聊天软件,采用的是UDP传输协议,即不可靠传输协议,无需提供DNS服务器地址,也同样可以登陆。

资料来源:

  1. 名词定义:https://www.jianshu.com/p/32b16cb3c8d8
  2. 发展历程:https://www.dns.la/support/art_206.aspx
  3. 技术特点:CSDN社区https://blog.csdn.net/qq_31930499/article/details/79767330
  4. 相关词:CSDN社区https://blog.csdn.net/qq_31930499/article/details/79767330

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里云术语库提供术语的标准定义、缩略语、术语用法及多语言等,提供术语的增删改查等功能。

官方博客
官网链接