一、DNS 简介
- 定义与作用:DNS(Domain Name System)是互联网上的一项服务,作为将域名和 IP 地址相互映射的分布式数据库,使人更方便地访问互联网。使用 53 端口,通常以 UDP 查询,未查到完整信息时用 TCP 重新查询。
- 因特网的域名结构 :
- 国家顶级域名:采用 ISO3166 规定,如 cn、us、uk 等,记为 ccTLD。
- 通用顶级域名:有 com、net、org、int、gov、mil 等。
- 基础结构域名:只有 arpa,用于反向域名解析。
二、域名服务器的类型划分
- 根域名服务器:最高层次,最重要。知道所有顶级域名服务器的域名和 IP 地址,若本地域名服务器无法解析,先求助根域名服务器。全球有 13 个根服务器,美国占多数,"雪人计划"形成了 13 台原有根加 25 台 IPv6 根的新格局,中国部署了 4 台。
- 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
- 权限域名服务器:负责一个"区"的域名服务器。
- 本地域名服务器:对域名系统非常重要,当主机发出 DNS 查询请求时,报文发送给本地域名服务器。
- 主从 DNS 服务器:主 DNS 服务器负责解析至少一个域,辅助域名服务器辅助主服务器,当主服务器故障时保证查询工作不中断,数据复制由主到从,更改数据只能在主服务器进行。
- 缓存 DNS 服务器:不负责解析域,只缓存域名解析结果。
三、DNS 域名解析的过程
- 先检查本地 hosts 文件是否有网址映射关系,有则调用完成解析。
- 若 hosts 没有,查找本地 DNS 解析器缓存,有则返回完成解析。
- 若前两者都没有,找首选 DNS 服务器(本地 DNS 服务器),若该服务器区域解析有结果则返回,完成解析;若已缓存网址映射关系也可完成解析。
- 若本地 DNS 服务器本地区域文件与缓存解析都失效,未用转发模式则向 13 台根 DNS 服务器请求,根服务器返回负责该顶级域名服务器的 IP,本地服务器继续联系,直至找到目标主机;若用转发模式则转发至上一级 DNS 服务器,循环查询。
- 从客户端到本地 DNS 服务器是递归查询,DNS 服务器之间是迭代查询。114.114.114.114 是国内常用 DNS,解析成功率高、速度快稳定;8.8.8.8 是谷歌提供的全球通用 DNS,更适合国外及访问国外网站用户。
四、DNS 服务器配置
提供DNS服务的软件叫bind,服务名是named。
[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
[root@localhost ~]# vim /etc/named.conf
options {
#定义监听端口,如果所有地址都监听,则只写端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
#定义数据文件目录
directory "/var/named";
#只允许本地主机进行查询
allow-query { localhost; };
};
#定义区域
zone "." IN {
type hint;
file "named.ca";
};
实验 1:配置 DNS 正向解析
[root@localhost ~]# vim /etc/named.conf主配置文件
options {
#监听端口为53,大括号内数据内容可以为any
listen-on port 53 { 192.168.121.10; };
directory "/var/named";
};
zone "baidu.com" IN {
type master;
file "named.baidu.com";
};
正向解析文件资源记录(Resource Record,RR),常见的正解文件RR相关信息:
domain | IN | RR type | RR data |
---|---|---|---|
主机名. | IN | A | IPv4的IP地址 |
主机名. | IN | AAAA | IPv6的IP地址 |
域名. | IN | NS | 管理这个域名的服务器主机名字,即由哪一台主机去解析当 前所定义的域主机 |
域名. | IN | SOA起始授 权记录 | 管理这个域名的七个重要参数 |
域名. | IN | MX | 顺序数字,接收邮件的服务器主机名字 |
主机别 名. | IN | CNAME | 实际代表这个主机别名的主机名字 |
SOA主要是与区域有关,所以domain要写域名。而SOA后面会接七个参数,这七个参数的意义如下:
- Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思。
- 管理员的Email,发生问题可以联系这个管理员。由于@在数据库文件中有特殊含义,所以将用"."代替@
- 序号(Serial),这个序号代表的是这个数数据库文件的新旧,序号越大代表越新。所以当你更改了数据库内容时,需要将这个数值放大。
- 更新频率(Refresh)定义slave多久向Master要求数据更新。
- 失败重新尝试时间(Retry),如果Slave无法对Master实现连接,那么在多长时间内,Slave会尝试重新连接到Master。
- 失效时间(Expire),如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续尝试连接,并且尝试删除这份下载的zone file信息。
- 缓存时间(Minumum TTL),如果这个数据库zone file中,每条记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。
时间单位:M(分钟),H(小时),D(天),W(周),默认是秒
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.121.10
mail IN A 192.168.121.10
www IN A 192.168.121.10
ftp IN CNAME www
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl disable firewalld --now
[root@webserver ~]# setenforce 0
#客户端测试
host [-a] FQDN [server]
nslookup [FQDN] [server]
dig [options] FQDN [@server]
options:+trace代表从.开始追踪;-t type查询的数据主要有MX、NS、SOA、A等类型;-x查
询反解信
息
[root@localhost ~]# host www.baidu.com 192.168.121.10
[root@localhost ~]# nslookup www.baidu.com 192.168.121.10
[root@localhost ~]# dig -t A www.baidu.com @192.168.121.10
实验 2:反向解析
[root@localhost ~]# vim /etc/named.conf
zone "121.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.121";
};
#反向区域文件
[root@localhost ~]# vim /var/named/named.192.168.121
$TTL 1D
@ IN SOA ns.baidu.com. admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
10 IN PTR ns.baidu.com.
10 IN PTR www.baidu.com.
10 IN PTR mail.baidu.com.
10 IN PTR ftp.baidu.com.
#反解需要注意:主机名尽量使用完整的FQDN,即要写上"."
#客户端测试
[root@localhost ~]# host 192.168.121.10 192.168.121.10
[root@localhost ~]# nslookup 192.168.121.10 192.168.121.10
[root@localhost ~]# dig -x 192.168.121.10 @192.168.121.10
实验 3:主从 DNS 服务器
-
完全区域传送:主服务器配置允许区域传送并设置从服务器 IP,编辑区域文件并添加从服务器信息;从服务器安装 bind,配置区域为 slave 类型并指定主服务器 IP 和文件存储位置,重启服务后进行测试。
-
增量区域传送:修改主服务器区域配置文件,增大序号并添加新记录,重启服务。
#主DNS服务器的配置【主dns服务器的ip地址为192.168.121.10】
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.121.10; };
directory "/var/named";
allow-transfer { 192.168.121.11; };
};
zone "baidu.com" IN {
type master;
file "named.baidu.com";
};
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.121.10
slave IN A 192.168.121.11
mail IN A 192.168.121.10
www IN A 192.168.121.10
ftp IN CNAME www
[root@localhost ~]# systemct restart named
#从DNS服务器的配置【从dns服务器的ip地址为192.168.121.11】
[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.121.10; };
directory "/var/named";
};
zone "baidu.com" IN {
type slave;
file "slaves/named.baidu.com";
masters {192.168.121.10;};
};
[root@localhost ~]# systemctl restart named
#测试
[root@localhost ~]# host www.baidu.com 192.168.121.11
#修改主服务器的区域配置文件,序号比之前的序号大【注:区域文件里面必须要写从服务器的NS和A记
录】
#主DNS服务器的配置【主dns服务器的ip地址为192.168.121.10】
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 1 1D 1H 1W 3H )
IN NS ns.baidu.com.
IN NS slave.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.121.10
slave IN A 192.168.121.11
mail IN A 192.168.121.10
www IN A 192.168.121.10
ftp IN CNAME www
www1 IN CNAME www
[root@localhost ~]# systemct restart named