文章目录

  • DNS
  • DNS整个工作流程
  • 一、DNS服务概述
  • 二、域名与IP关系
  • 三、DNS、IP与域名
  • DNS工作原理图解
  • 配置unbound作为DNS服务器
  • 配置仅转发DNS服务器


DNS

DNS整个工作流程

一、DNS服务概述

DNS是Domain Name System的缩写,即域名系统。其实,DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要提供网站域名与IP地址的相互转换的服务。域名解析分文争相解析与反向解析,正向解析是将主机名转换成IP地址的过程,域名的反向解析是将IP地址转换成主机名的过程。通常我们很少需要将IP地址转换成主机名。其中,反向解析经常被一些后台程序使用,用户看不到。

二、域名与IP关系

域名与IP地址之间是呈一一对应的关系,但多个域名可以对应同一个IP地址。就像一个人的姓名和身份证号码之间的关系,显然记忆人的名字要比身份证号码容易的多。IP地址是网络上标识用户站点的数字地址,为了简单好记,采用域名来代替IP地址表示站点地址,域名服务器(DNS)将域名解析成IP地址,使之一一对应。

三、DNS、IP与域名

显然,一串数字类型的IP地址是不容易被使用者记住的,而域名因为带有某些特定的意义而容易被人们记住。所以,域名作为IP地址的“助记符”,起了相当重要的作用。但是,想实现全世界的电脑互联,即需要是让每一台计算机都把全世界的计算机的IP地址和域名对应起来,很明显这是不现实的,因此要有一个系统专门做这件事,这就是DNS服务。

四、DNS工作的流程

任何计算机如果需要连接internet网,那么,首先需要设置一些关于DNS的信息。您的电脑需要借助于Internet上的某台域名服务器帮助进行域名查询。所以您首先需要设置您的电脑,在需要进行域名查询时,向哪个服务器发出询问。Internet上有许许多多域名服务器,您可以选任何一台作为您首选的域名服务器。也就是说,您要告诉您的电脑,当需要进行域名查询时,首先去问哪一台域名服务器。域名服务器接收到您的电脑的查询请求,它会帮助您进行查询,然后将结果返回您的电脑。为了获得最快的响应,一般选择与您的电脑有最好的连接的服务器。一般的电脑上,其实已经不用在设置了,在>本地连接>属性>internet协议(TCP/IP)>自动获得DNS服务器后者手动添加首选DNS与备选DNS。

dns配置 dockerfile DNs配置是啥_dns配置

DNS工作原理图解

下面就来看看DNS的具体工作流程:
1、DNS相关背景:
在Internet上,一个域名要由两台域名服务器提供“权威性的”域名解析。这里的“权威性”,指的是被服务的域名的所有记录是由这两台服务器唯一决定的。虽然Internet上的其他域名服务器上都可能保存有该域名的记录,但那些记录是从这两台“权威性”的域名服务器上拷贝过去的,是非权威性的。这两台域名服务器,和您的域名一起被登记在域名注册管理机构的数据库中。如果是国际域名,域名注册管理机构就是Internic;如果是国内域名,域名注册管理机构就是CNNIC。这两台“权威性的”服务器,一主一辅,保存着相同的记录,主要是为了提高可靠性。域名注册管理机构的数据库的记录最终体现在“根”域名服务器上。目前在Internet上的最顶级“根”域名服务器共有13台,它们被完善地维护着。如果它们全都不工作,Internet就崩溃了(网络仍通,但域名及电子邮件完全不能工作)。根服务器中保存的记录的最本质的信息,就是一个域名由哪两台域名服务器提供解析服务。
2、DNS工作实例:
当您打开浏览器,访问某个站点时,例如www.100anju.com,您的电脑需要知道这个站点的IP地址是多少。于是它会自动向您的“主控DNS”服务器发出询问,即“www.100anju.com的IP是多少?”,如果这台域名服务器对100anju.com这个域名不是“权威性”的,起初它上面并没有关于100anju.com的记录,于是它向根服务器发出一个查询:“100anju.com由什么服务器提供域名解析服务”?根服务器的回答将是:“哦,去问dns1.hichina.com或者dns2.hichina.com吧。他们的IP地址是203.196.4.70及203.196.4.10”。您的主控DNS服务器继而会询问dns1.hichina.com这台域名服务器,还是那个问题,即“www.100anju.com的IP是多少?”,dns1.hichina.com将给出“权威性的”回答。您的主控DNS服务器收到这个回答,一方面将该信息告诉您的电脑,另一方面它会把该信息保存在自己的缓冲区内,如果它再次接到相同的查询,它就直接将刚才缓存了的记录回答给下一个询问者。但是这个缓存的记录有一个失效期,当失效期到达后,您的主控DNS服务器将会自动丢弃缓存的记录。当再有电脑发出同样的查询请求时,将重复前面叙述的完整的过程。可以看出,您的主控DNS服务器“代理”了您的电脑的查询过程,一级一级地进行了查询,这被称之为“递归式”的查询。
对于国内域名,如www.domain.com.cn,查询过程将更加复杂一些。您的电脑向您的主控DNS服务器发出查询请求:“www.domain.com.cn的IP地址是多少?”,如果您的主控DNS服务器不是该域名的“权威性”的服务器,它上面没有关于www.domain.com.cn的记录,于是它向根服务器发出询问:“com.cn由什么服务器提供域名服务?”,根服务器的回答将是:“哦,去问ns.cnc.ac.cn或者sns.edu.cn吧。他们的IP地址是159.226.1.1及202.112.0.34”您的主控DNS服务器继而向ns.cnc.ac.cn发出查询:“domain.com.cn由谁提供域名服务?”,nc.cnc.ac.cn将回答:“去问dns1.hichina.com或者dns2.hichina.com吧,他们的IP地址是203.196.4.70及203.196.4.10。”您的主控DNS服务器接着会询问dns1.hichina.com这台域名服务器,“www.domain.com.cn的IP是多少?”,dns1.hichina.com将给出“权威性的”回答。同样,您的主控DNS服务器也将缓存这个记录直至失效期到来。在域名系统中,象ns.cnc.ac.cn或sns.edu.cn这样的服务器就是国内域名的根服务器。请注意,根服务器不能作为您的“主控DNS”服务器,因为它不会帮助您进行“递归式”的查询。
五、检查DNS出错
一个域名要想能够被Internet上的用户访问到,必须得到正常的域名服务。这包括:
(1)在根服务器中有记录,这实际上就是进行了域名的注册;
(2)在“权威性的”域名服务器上有记录,即它们为您的域名提供了域名解析服务。
这些“权威性的”服务器,就是登记在根服务器中,指定为您的域名提供“权威性”
服务的服务器。“权威性的”域名服务器中记录了一个域名下的多个主机的IP地址,如www主机、ftp主机、mail主机等,还有该域名的电子邮件如何投递的记录、上述的失效期等。可能给该域名本身也指定一个IP地址,我们创联万网就是这样做的,其好处就是让用户访问您的网站时,不用写“www”也可以访问得到。
一个域名如果得到了正确的域名服务,那么在世界上的任何地方,Internet用户使用各种软件都能够查询到,如浏览器、telnet、ftp、ping等。值得指出的是,即使一个域名得到了正确的解析服务,但如果该域名相应的服务器未正常工作(例如没有开机、当机或服务不正常),您仍然访问不到它们。
判别它们的方法很简单,因为您的机器的给您的报告不同:域名解析服务不正常时,结果是:找不到该主机;而服务器不正常得到的回答是:主机没有响应。

配置unbound作为DNS服务器

首先安装unbound服务:yum -y install unbound,启动服务并设置开机自启:systemctl start unbound , systemctl enable unbound

dns配置 dockerfile DNs配置是啥_dns配置_02


服务启动以后,ls /etc/unbound 会自动生成很多文件:

dns配置 dockerfile DNs配置是啥_dns配置_03


防火墙中开放dns服务并永久生效:firewall-cmd --add-service=dns , firewall-cmd --add-service=dns --permanent

dns配置 dockerfile DNs配置是啥_DNS_04


这时候查看53端口会发现有tcp也有udp:

dns配置 dockerfile DNs配置是啥_DNS_05


什么时候用tcp什么时候用udp端口如下图:

dns配置 dockerfile DNs配置是啥_dns配置_06


开始配置,先cd /etc/unbond,主配置文件是unbound.conf, 所以vi unbound.conf,对其中一些命令进行说明:

编辑文件前先说一下unbond.conf的结构:

server: ----------------------------对整个服务器做设置

data-zone:-------------------------用来解析域

stub-zone:------------------------------做其他设置如别名转发

forward-zone:-----------------------用来做转发的

interface:指定53端口开放ip,不建议设置为0.0.0.0(对所有开放),这样容易导致unbound服务无法正常运行(比如服务器上装了虚拟化,虚拟化里也有53端口,就会导致unbound服务异常)。

dns配置 dockerfile DNs配置是啥_dns配置_07


access-control:访问控制,默认全部拒绝,就是说如果不开启这个,即使你某张网卡开启了53端口,该网卡依然无法访问。 所以如果需要使用dns,这个就需要开启,可以自行设置网段,0.0.0.0/0是全部允许,refuse是拒绝,allow是允许:

dns配置 dockerfile DNs配置是啥_DNS_08


username:认证,可以把里面的内容去掉,不指定认证用户名

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_09


include: /etc/unbound/local.d/*.conf:每次读取当前配置文件的时候,都会执行/etc/unbound/local.d/下所有.conf结尾的文件,所以其他功能,可以到/local.d目录中定义。(如unbound四大结果中的配置)

dns配置 dockerfile DNs配置是啥_dns配置_10


所以现在cd /etc/unbound/local.d ,vi aa.conf(aa是自定义名称) ,定义如下内容:

local-zone:“example.com” staticlocal-data:“example.com. NS control.”

local-data:“example.com. MX 5 mail.example.com.”

local-data:“www.example.com. A 10.233.3.225” #ip都是自定义的 随便写

local-data:“ftp.example.com. A 10.233.3.227”

local-data:“control. A 10.233.3.228”

local-data:“mail.example.com. A 10.233.3.229”

dns配置 dockerfile DNs配置是啥_服务器_11


添加完毕以后,执行 netstat -ntulp |grep unbound ,看监控了什么ip,然后把监控的ip添加到DNS:vi /etc/resolv.conf:

dns配置 dockerfile DNs配置是啥_dns详细_12


然后到同网段的另外一个服务器:添加和上诉配置服务器同样的DNS:

vi /etc/resolv.conf:

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_13


测试:host 后面跟解析的域名即可,如:host www.example.com

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_14


dns配置 dockerfile DNs配置是啥_服务器_15


测试除了host,还有nslookup,dig均可:

dns配置 dockerfile DNs配置是啥_dns详细_16


如果出现以下报错,是无法直接用yum -y install host /yum -y grepinstall host安装的:

dns配置 dockerfile DNs配置是啥_dns详细_17


需要先查找包名:yum whatprovides */nslookup / yum whatprovides */dig / yum whatprovides */host ,然后再yum -y install 包名:

dns配置 dockerfile DNs配置是啥_服务器_18

配置仅转发DNS服务器

dns配置 dockerfile DNs配置是啥_dns详细_19


配置需要3台服务器:DNS 服务器 ,DNS仅转发服务器,DNS客户端

DNS服务器上一个步骤已经配置过了,见:配置unbound作为DNS服务器

所以现在配置DNS转发服务器(ip为200结尾):

首先把防火墙中的dns服务启动:firewall-cmd --add-service=dns

dns配置 dockerfile DNs配置是啥_DNS_20


安装unbound服务:yum -y install unbound

需要检查DNS服务器和DNS转发服务器:vi /etc/hosts 看下解析 是否有误;

安装好后需要做一些必须启动的设置,之前DNS服务器已经配置过,所以这里直接把DNS服务器的配置拷贝过来即可:scp /etc/unbound/unbound.conf ip:/etc/unbound/

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_21


拷贝过来以后,在转发服务器中把监听地址改为现有ip:

dns配置 dockerfile DNs配置是啥_dns配置_22


然后找到:domain-insecure: * 把该行注释取消掉,就是说 当访问example.com的时候,不做安全验证,这个可以有很多,把不需要验证的域名添加进去即可:

注:DNS服务器中也需要把这个注释取消

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_23


如果不需要做安全验证,则找到module-config 定义为iterator即可:

dns配置 dockerfile DNs配置是啥_dns详细_24


重启服务:systemctl restart unbound

更改解析ip为当前服务器ip:vi /etc/resolv.conf

dns配置 dockerfile DNs配置是啥_dns配置 dockerfile_25


定义转发规则:cd /etc/unbound/local.d , vi aa.conf

foreard-zone:

name:"."

forward-addr:转发到该ip

dns配置 dockerfile DNs配置是啥_DNS_26


重启服务:systemctl restart unbound

dns配置 dockerfile DNs配置是啥_dns详细_27

转发服务器配置成功以后,到任意客户端测试:

首先需要把DNS改为转发服务器中定义的DNS(到转发服务器中cat /etc/resolv.conf查看(一般是当前服务器ip)):vi /etc/resolv.conf

dns配置 dockerfile DNs配置是啥_dns详细_28


然后装host命令:yum -y install bind-utils

可以到有host命令的服务器使用rpm查看:rpm -qf which host

dns配置 dockerfile DNs配置是啥_dns详细_29


也可以在当前服务器查看:yum whatprovides */host

解析之前在dns服务器中执行抓包53端口的命令:tcpdump -i eth0 port 53

dns配置 dockerfile DNs配置是啥_服务器_30


再到客户端执行解析:host www.example.com.

dns配置 dockerfile DNs配置是啥_dns详细_31


现在回到dns服务器看抓包流程:

dns配置 dockerfile DNs配置是啥_dns配置_32


报错处理思路:host www.example.com(因为定义的是 . ,所以域名可以任意输入)

dns配置 dockerfile DNs配置是啥_DNS_33


也可以在客户端把缓存清除一下:echo 3 > /proc/sys/vm/drop_caches

dns配置 dockerfile DNs配置是啥_DNS_34


转发服务器中清除:unbound-control flush example.com

dns配置 dockerfile DNs配置是啥_dns详细_35


解释一下/etc/resolv.conf中search的作用:

dns配置 dockerfile DNs配置是啥_dns配置_36