一、DNS域名解析原理
DNS,Domain Name System,域名系统:在互联网中由大量域名解析服务器共同提供的一整套关于“域名 <--> IP地址”信息查询的数据系统
!!!! C/S架构:DNS服务端监听UDP 53端口(处理客户端查询),也监听TCP 53端口(主-辅同步)
!!!! 客户机向DNS服务器提问:xx域名的IP地址是多少?
#### 如何通过域名找到一个站点
FQDN,Full Qualified Domain Name,完全限定域名(站点名+域名) ,比如:servera.lab.example.com、www.stu.cn
#### 分层次管理(域名体系结构):
根域 =》.
顶级域/一级域 =》.com、.cn
二级域 (最常见)=》 .example.com、.stu.cn
三级域(比较少) =》 lab.example.com、……
站点(使用DNS名称的各服务器)=》 www、mail、ftp、game、news、……
#### 分布式部署(域名服务器):
每个权威DNS服务器只负责分担自己管辖的一个或多个域,提供这个域内的名称解析服务
每个权威DNS服务器可以代客户端查询管辖范围外的域名(问其他DNS服务器)
每个权威DNS服务器可以授权某个子域DNS服务器,告知客户端自己去找子域DNS服务器继续查询
比如,IANA管理根域(.)的DNS服务器、CNNIC管理一级域.cn的DNS服务器、stu管理二级域.stu.cn的DNS服务器
#### DNS服务器的类型
权威DNS:需由IANA统一授权管理,管理一个或更多个DNS区域,有公网IP地址
缓存DNS:运行商或企业自行架设、自行管理,主要面向客户端提供代理查询服务,提高客户体验(缓存加速),无需管理任何区域
#### 域名查询的主要方式
!!!! 按问题内容分 ——
正向查询:根据已知的域名查询这个域名的IP地址,比如“域名www.baidu.com的IP地址是多少?”
反向查询:根据已知的IP地址查询这个IP地址的域名,比如“IP地址39.156.66.18对应的域名是什么?”
!!!! 按服务方式分 ——
递归查询:为客户机查询非本DNS服务器管辖的解析记录,主要出现在“客户机 -> 缓存DNS服务器”场景;客户端只发送一次查询请求,剩下的都交给DNS服务器
迭代查询:告知客户机子域DNS服务器的地址,让客户机自己去找子域DNS查询,主要出现在“缓存DNS -> 权威DNS服务器”场景;客户端需要发送多次查询请求,依次询问根DNS、一级DNS、二级DNS、……
#### 域名解析条目的类型
TTL:设置解析记录的默认超时时间(缺省单位为秒,可以添加 H/D/W表示小时/天/周)
SOA:设置区域授权记录(建议参考/var/named/named.localhost范本文件) —— @ IN SOA @ admin.@ ( .. .. )
NS:域名服务器
MX:邮件服务器记录
CNAME:域名别名记录
A:正向解析记录(域名->IPv4地址)
AAAA:正向解析记录(域名->IPv6地址)
PTR:反向解析记录(IP地址->域名)
二、域名查询(host/nslookup/dig)
软件包bind-utils提供以下域名查询工具:
host:简单查询工具,用法:host 域名或IP地址 DNS服务器地址
nslookup:交互式查询工具,用法:nslookup 域名或IP地址 DNS服务器地址
dig:深度挖掘查询工具,用法:dig @DNS服务器地址 域名或IP地址 [-t 资源类型]
[root@work ~]# yum -y install bind-utils //安装域名查询工具包
!!!! 使用上述工具时,需要有可用的DNS服务器
!!!! 如果还没有配置DNS服务器,也可以找一台能上网的主机,练习host/nslookup/dig命令
!!!! 在Windows系统中,自带nslookup命令,也可以向DNS查询域名
练习:查询域名
1)直接查询(向本机设置的默认DNS服务器查询)www.12306.cn的IP地址
C:\Users\TsengYia>nslookup www.12306.com
服务器: public1.114dns.com
Address: 172.50.163.10
非权威应答:
名称: www.12306.com
Address: 112.74.143.83
2)向DNS服务器8.8.8.8查询www.12306.cn的IP地址
C:\Users\TsengYia>nslookup www.12306.com 8.8.8.8
服务器: dns.google
Address: 8.8.8.8
非权威应答:
名称: www.12306.com
Address: 112.74.143.83
3)向8.8.8.8查询IP地址114.114.114.114的域名是多少(注意:大多数IP地址是查不到反向结果的)
C:\Users\TsengYia>nslookup 114.114.114.114 8.8.8.8
服务器: dns.google
Address: 8.8.8.8
名称: public1.114dns.com
Address: 114.114.114.114
三、权威DNS服务器-bind正向域设置
BIND,Berkeley Internet Name Domain,伯克利互联网名称服务器
servera(权威DNS服务器,servera.lab.example.com的IP地址是多少)
1)装包 bind
2)配置 (主配置、地址库)
3)起服务 named
获取BIND配置帮助:
# man named.conf
# firefox file:///usr/share/doc/bind/Bv9ARM.html
#### 主配置文件/etc/named.conf,设置DNS全局参数、管理哪些区域(用哪一个地址库)、安全控制、……
# vim /etc/named.conf
options {
listen-on port 53 { 本机的IPv4监听地址; };
listen-on-v6 port 53 { 本机 ky的IPv6监听地址; };
directory "/var/named"; //指定地址库文件的默认存放目录
allow-query { 客户机的网段或IP地址; };
recursion yes; //是否允许提供递归查询服务
dnssec-enable yes; //启用DNS安全
dnssec-validation yes; //启用DNS安全校验
};
zone "区域名" IN {
type master; //设置区域类型(master、hint、slave、forward)
file 地址库文件名或者绝对路径;
};
include xxxx文件; //需要在主配置文件中包含xxxx文件
# named-checkconf //查错工具
TTL,Time To Live,存活时间(DNS解析记录的有效期)
SOA,Start Of Authority,授权记录的开始(管理的区域的信息,以及提供给从DNS服务器用的一些参数)
#### 地址库文件 /var/named/*,设置具体的地址记录(域名->IP地址)
# vim /var/named/地址库文件名
$TTL 有效记录的生存时间
@ IN SOA 区域名 管理邮箱地址. (
序列号 //十位以内的整数
刷新时间
重试时间
过期时间
无效记录的生存时间
)
@ NS 当前区域的DNS服务器的域名.
MX 优先级 当前区域的邮件服务器的域名.
www A IP地址
mail A IP地址
servera A IP地址
.. ..
# named-checkzone 区域名 地址库文件的路径和名称 //查错
work(客户机) ==》servera(权威DNS)
实验拓扑:
servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com)
work(客户机):向servera查询域名serverc.lab.example.com的IP地址
1)安装bind包
[root@servera ~]# yum -y install bind
2)调整配置
[root@servera ~]# vim /etc/named.conf //修改主配置文件
options {
listen-on port 53 { any; }; //在本机所有IPv4接口监听
listen-on-v6 port 53 { any; }; //在本机所有IPv6接口监听
directory "/var/named"; //zone地址库文件的默认存放路径
allow-query { localhost; 172.25.250.0/24; }; //允许哪些客户机查询
.. ..
};
zone "lab.example.com" { //定义DNS区域
type master; //类型为主区域
file "lab.example.com.zone"; //指定地址库文件名
};
[root@servera ~]# named-checkconf //检查主配置文件(无输出即无错)
[root@servera ~]#
[root@servera ~]# vim /var/named/lab.example.com.zone //创建正向区域地址库文件
$TTL 1D
@ IN SOA @ root.lab.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS servera.lab.example.com.
servera A 172.25.250.10
serverb A 172.25.250.11
serverc A 172.25.250.12
serverd A 172.25.250.13
[root@servera ~]# chmod 640 /var/named/lab.example.com.zone
[root@servera ~]# chown :named /var/named/lab.example.com.zone
[root@servera ~]# named-checkzone lab.example.com /var/named/lab.example.com.zone //检查区域地址文件(OK即无错)
.. ..
OK
3)启动named服务
[root@servera ~]# firewall-cmd --permanent --add-service=dns //开放DNS访问
[root@servera ~]# firewall-cmd --reload //重载防火墙
[root@servera ~]# systemctl enable named --now //启用named服务
4)域名查询测试 —— 向servera查询serverc的IP地址
[root@work ~]# host serverc.lab.example.com servera
Using domain server:
Name: servera
Address: 172.25.250.10#53
Aliases:
serverc.lab.example.com has address 172.25.250.12
四、权威DNS服务器-bind反向域设置
针对网段172.25.250/24,
对应的反向区域的名称 250.25.172.in-addr.arpa
然后在主配置文件中也需要定义也这个区域,并且提供相应的地址库文件
对应的反向地址记录:
12 PTR 完整的域名.
work(客户机) ==》servera(权威DNS)
实验拓扑:
servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa)
work(客户机):向servera查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名
1)修改主配置文件,添加反向域设置
[root@servera ~]# cp -p /etc/named.conf{,.bak} //备份主配置文件
[root@servera ~]# vim /etc/named.conf
.. ..
zone "250.25.172.in-addr.arpa" IN { //注意反向区域名中网段的倒序写法
type master;
file "172.25.250.zone";
};
2)创建反向区域地址库文件
[root@servera ~]# vim /var/named/172.25.250.zone
$TTL 300
@ IN SOA @ root.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS servera.lab.example.com.
10 PTR servera.backend.lab.example.com.
11 PTR serverb.backend.lab.example.com.
12 PTR serverc.backend.lab.example.com.
13 PTR serverd.backend.lab.example.com.
[root@servera ~]# chmod 640 /var/named/172.25.250.zone
[root@servera ~]# chown :named /var/named/172.25.250.zone
[root@servera ~]# named-checkzone 250.25.172.in-addr.arpa /var/named/172.25.250.zone //检查反向区域地址文件(OK即无错)
.. ..
OK
3)重启named服务
[root@servera ~]# systemctl restart named
4)域名查询测试 —— 向servera查询IP地址172.25.250.12的域名
[root@work ~]# host 172.25.250.12 servera
Using domain server:
Name: servera
Address: 172.25.250.10#53
Aliases:
12.250.25.172.in-addr.arpa domain name pointer serverc.lab.example.com.
扩展小知识(解析库的应用) ——
DNS解析记录的轮询(负载均衡,一个站点对应多个IP地址):
serverd A 172.25.250.13
serverd A 72.25.250.13
别名解析记录的设置(一个IP对应多个站点):
servera A 172.25.250.10
www CNAME servera
泛域名解析记录的设置(只查询域名或错误的站点名,也能有结果):
@ NS servera.lab.example.com.
A 172.25.250.10
* A 172.25.250.10
五、缓存DNS服务器-unbound缓存/转发设置
work(客户机) ==》serverb(缓存DNS) ==》servera(权威DNS)
实验拓扑:
servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa)
serverb.lab.example.com,缓存DNS,代理客户端查询,将来自客户端的所有查询请求转发给servera
work(客户机):向serverb查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名
1)安装unbound包
[root@serverb ~]# yum -y install unbound
2)调整配置
[root@serverb ~]# cp -p /etc/unbound/unbound.conf{,.bak} //备份主配置文件
[root@serverb ~]# vim /etc/unbound/unbound.conf //修改主配置文件
server:
.. ..
interface: 172.25.250.11 //在指定接口(可以是0.0.0.0,表示本机所有IP地址)提供监听
access-control: 172.25.250.0/24 allow //允许哪些网段的客户机使用(可以配置多行),缺省为refuse拒绝
access-control: 127.0.0.0/8 allow
domain-insecure: "lab.example.com" //标记不安全区域(允许转发查询,避免对客户端做DNSSEC安全验证)
unblock-lan-zones: yes //允许查询本地区域
insecure-lan-zones: yes //允许查询不安全的本地区域
forward-zone:
name: "lab.example.com" //将针对xx区域的查询转发给指定DNS(其余区域走auth-zone上游DNS服务器)
forward-addr: 172.25.250.10 //指定另一台DNS服务器的IP地址
forward-zone:
name: "250.25.172.in-addr.arpa" //将针对xx反向区域的查询转发给指定DNS
forward-addr: 172.25.250.10
auth-zone:
name: "." //对于未设置转发的其他区域,默认从根域开始查询
for-downstream: no
for-upstream: yes
fallback-enabled: yes
master: b.root-servers.net
master: c.root-servers.net
.. ..
[root@serverb ~]# unbound-checkconf //检查配置文件
unbound-checkconf: no errors in /etc/unbound/unbound.conf
[root@serverb ~]# unbound-control-setup //首次起服务前,执行此命令生成密钥文件
.. ..
3)启动unbound服务
[root@serverb ~]# firewall-cmd --permanent --add-service=dns //开放DNS访问
[root@serverb ~]# firewall-cmd --reload //重载防火墙
[root@serverb ~]# systemctl enable unbound --now //启用unbound服务
4)客户端查询DNS记录
[student@work ~]$ host serverc.lab.example.com serverb //向serverb查询serverc的IP地址
.. ..
serverc.lab.example.com has address 172.25.250.12
5)管理缓存的DNS数据
[root@serverb ~]# unbound-control dump_cache //查看缓存的解析记录
[root@serverb ~]# unbound-control flush work.lab.example.com //清除缓存的某个域名的解析记录
[root@serverb ~]# unbound-control flush lab.example.com //清除缓存的某个区域的所有解析记录