一、DNS服务
1、资源记录
(1)区域解析库:由众多RR组成:
资源记录:RR(Resource Record)
记录类型:A, AAAA, PTR,SOA, NS, CNAME, MX
·SOA:Start Of Authority,起始授权记录,表明谁是主DNS服务器;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
·A:internet Address,作用:FQDN--> IP
·AAAA: FQDN--> IPv6
·PTR:PoinTeR,作用:IP --> FQDN
·NS: Name Server,专用于标明当前区域的DNS服务器名字
NS记录还必须配合一个A记录,将NS中的名字解析成地址
·CNAME:Canonical Name,别名记录
·MX: Mail eXchanger,邮件交换器
(2)资源记录定义的格式:
语法:name [TTL] IN rr_type value 无论什么记录都由5项内容组成
name:名称
TTL:缓存的生命期(单位为秒)
IN:固定写法(也可以不写)
rr_type:类型
value:值
注意:
1) TTL可从全局继承
2) @可用于引用当前区域的名字
3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
(3)SOA记录
·name: 当前区域的名字,例如“magedu.com.”,也可以用@表示,代表当前区域的名字。
·value: 有多部分组成
1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com
3) 主从服务区域传输相关定义以及否定的答案的统一的TTL
·例如:
magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. (
2015042201 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
ns.magedu.com.:主DNS服务器名称(也可以写成ns,它会自动把后面的.magedu.com补全。如果要全写的话一定不要忘记com后有个点。ns这个名字随便起的,在下面要搭配一个A记录指向它的地址)
nsadmin.magedu.com.:管理员邮箱地址,当DNS出故障了,就会联系这个邮箱(邮箱地址不能包含@,因为在这个文件中@是有它的含义的,如果想写@就改成.即可,即这个邮箱地址本来为[email protected])
序列号(最多10位):我们知道为了容错,可以搭建两个DNS服务器,一个主一个从,它们需要同步数据库,同步的时候就看这个序列号,如果两个人一样,就认为数据库一样,如果从的数据库比主的小,就说明主发生了改变,就需要同步一下。因此,如果我们改了主的数据库,要记得认为的将这个数字改大一些,这样从的服务器才知道你改了,然后去同步你的数据。
刷新时间:每隔多长时间,从会去主那里看看数据是否发生改变。
重试时间:如果在之前刷新的时候刚好遇到问题(比如网络连接失败)导致没有刷新成功,那么隔这个重试时间后就会再刷新一遍。
过期时间:如果从一直不能同步,多长时间从的数据库过期
否定答案的TTL值:数据库里没有的对应数据被一个用户问过一次之后它也会缓存下来,如果再有用户问就直接从缓存里告诉他没有。这个缓存也有生命期,就是这个值。
(4)NS记录
·name: 当前区域的名字
·value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.
·注意:一个区域可以有多个NS记录
例如:
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
·注意:
1) 相邻的两个资源记录的name相同时,后续的可省略
2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
(5)MX记录(发邮件)
·name: 当前区域的名字
·value: 当前区域的某邮件服务器(smtp服务器)的主机名
·一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
·例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
·注意:
1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
(6)A记录
·name: 某主机的FQDN,例如www.magedu.com.
如果你就是专门给magedu.com域配的数据库,名字那直接写www即可,后面会自动给你补上
·value: 主机名对应主机的IP地址
·例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 2.2.2.2
mx1.magedu.com. IN A 3.3.3.3
mx2.magedu.com. IN A 4.4.4.4
$GENERATE 1-254HOST$ A 1.2.3.$
上面的意思就是下面这1-254条记录,只不过用变量的方式表示了。
HOST1 A 1.2.3.1
HOST2 A 1.2.3.2
HOST3 A 1.2.3.3
……
HOST253 A 1.2.3.253
HOST254 A 1.2.3.254
*.magedu.com. IN A 5.5.5.5
magedu.com.IN A 6.6.6.6
·避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
(7)其它记录
·AAAA:
name: FQDN
value: IPv6
·PTR:
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
·例如:
4.3.2.1.in-addr.arpa.IN PTR www.magedu.com.如1.2.3为网络地址,可简写成:
4 IN PTR www.magedu.com.
·注意:网络地址及后缀可省略;主机地址依然需要反着写
(8)别名记录
CNAME:
name: 别名的FQDN
value: 真正名字的FQDN
因为有些大型网站访问的人太多,于是它在全国各地都有服务器,于是需要通过别名对应的服务器解析出哪个服务器离你最近然后返回给你最近的IP。
(9)子域
·子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
·类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
·magedu.com. 在.com的名称服务器上,解析库中添加资源记录
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
magedu.com. IN NS ns3.magedu.com.
ns1.magedu.com. IN A 3.3.3.1
ns2.magedu.com. IN A 3.3.3.2
ns3.magedu.com. IN A 3.3.3.3
·glue record:粘合记录,父域授权子域的记录
二、DNS资源配置
1、BIND安装与配置
BIND的安装配置:
dns服务程序包:bind(常用),unbound(较新,不常用)
程序名:named,unbound
程序包:yum list allbind*
bind:服务器
bind-libs:相关库
bind-utils:客户端
bind-chroot: /var/named/chroot/ 把DNS很多相关文件迁移到一个比较深的文件夹
BIND使用53端口,当我们将软件包安装上然后启动服务,就会自动打开53端口。
(1)现在我们来安装一下Bind,
在这个服务安装完之后,会自动创建一个叫named的用户:
在启动之前使用ss -nutl查询,没有53端口
然后我们启动服务,53端口开启:
也会开启53端口。
tcp的53端口不打开会导致无法传输区域数据库,从DNS就无法进行数据复制了。udp的53端口不打开会导致无法使用dig查询,也会影响数据复制。
所以一定要注意这两个端口一定要在防火墙上打开。
(2)安装完BIND之后,它就可以当DNS服务器了,如果客户端想使用这个DNS服务器,那就将DNS地址指向服务器。192.168.37.107就是我们刚才安装了BIND的机器。
所以我们配置一下客户端(192.168.37.101)的DNS为服务器端地址:192.168.37.107
(3)我们之前说过,DNS安装完之后就会知道13个根的位置,它之所以知道,是根据一个文件中记录的,我们使用rpm -ql bind查看安装服务其实生成的文件列表
找到一个叫named.ca的文件
查看内容,发现里面记录了13个根对应的地址
从a到m,一共13个。
(4)我们现在有DNS服务器了,而且也将客户端的DNS对应地址改成服务器端地址了,但是现在还是不能使用,因为我们的53端口目前绑定了自己,只能给自己用,我们应该修改它。
编辑/etc/named.conf文件,这是DNS的主配置文件
我们将port 53这行后面的地址改为localhost,表示本机的所有IP,这样,无论什么IP都能访问了。
改完保存然后使用systemctl reload named重启服务。
然后就可以连接了。
使用telent测试一下可以连接。
(5)但是现在客户端仍然无法使用这个DNS服务器,因为我们发现这个DNS服务器在访问网站的时候都不使用它自己,而是去问别人的DNS服务器,
我们去把它改成改成自己的IP
也就是说,它现在作为一个DNS服务器是有效果的,自己能解析。
但是客户端现在并不能使用这个DNS解析:
因为默认情况下DNS服务器只能给自己提供服务。
所以我们还需要更改一下配置文件:
所以我们应该修改这一项,可以加一个192.168.37的网段,也可以改成any
这样任何人都能查询了。
这样我们使用客户端访问网站:
DNS搭建成功。
(6)排错
其实刚才这两行也可以不做具体的修改,直接使用//将这两行注释掉即可,也相当于改成了any。
为了防止改错,我们有一个检查错误的命令named-checkconf可以检查配置文件的正确性
比如我们故意删掉一个分号
图为提示有错误,提示错误在第19行在}前少了个;
我们添加回来
显示没有错误了。