一、什么是DNS服务
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器,也可将IP地址转换为对应的域名。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
工作端口:
TCP53:用于主备之间同步数据
UDP53:用于客户端查询解析域名
解析方式分类:
1、正向解析,既将FQDN解析为IP。
2、反向解析,将IP解析为FQDN。
DNS查询方式:
1、迭代查询: DNS服务器收到请求后,若没有缓存记录,会返回下一个可能知道答案的服务器地址,由客户端(或最初请求的服务器)自行继续查询,直到找到最终结果。
例如: 本地DNS服务器收到迭代查询:
先向根域名服务器询问 .com 的顶级域服务器地址。
根服务器返回 .com 的地址,本地DNS再向 .com 服务器询问 example.com 的权威服务器地址。
.com 服务器返回 example.com 的权威服务器地址,本地DNS最终向该权威服务器查询www.example.com 的IP。
最终本地DNS整合结果后返回给客户端。
2、递归查询: 客户端向DNS服务器发起请求后,该DNS服务器必须负责返回最终结果(IP地址或明确的错误)。如果服务器没有缓存记录,它会代替客户端层层查询其他DNS服务器,直到获取答案。
例如: 用户访问 www.example.com,向本地DNS服务器(如 8.8.8.8)发送递归查询请求。
本地DNS服务器若没有缓存,则代替客户端依次查询根域名服务器 → .com顶级域服务器 → example.com权威服务器,最终获取IP地址。
本地DNS服务器将最终结果返回给用户。
DNS查询流程:
1.当客户端查询www.baidu.com时,首先会检查客户端本地hosts文件,如果该文件中有,则响应,如果没有,则会去查询DNS服务器;
2.如果DNS服务器有该记录,则直接返回,如果没有,可以向转发DNS查询;
3.如果转发DNS有该记录,则返回给客户端,并缓存到DNS服务器中;
4.如果配置forward only;转发DNS没有该记录,则返回客户端无记录,如果配置forwardfirst,如果转发DNS没有该记录,则从根开始一级级进行查询。
实验环境:
IP地址 | 作用 |
---|---|
192.168.10.201 | 主DNS服务器 |
192.168.10.200 | 备份DNS服务器 |
192.168.10.13 | 客户端测试 |
二、DNS的安装和配置文件
在Linux下,DNS的软件包为bind(Berkeley Internet Name Domain)
[root@web2 ~]# yum install -y bind
bind软件包的配置文件
主程序 | /usr/sbin/named |
---|---|
主配置文件 | /etc/named.conf |
区域配置文件 | /etc/named.rfc1912.zones |
zone的默认存放路径 | /var/named |
/etc/named.conf : Bind的主配置文件,用于定义全局设置,DNS的zone等相关配置。
[root@web2 ~]# vim /etc/named.conf
options { #options段用于定义全局设置
listen-on port 53 { 127.0.0.1; }; #定义bind的监听IPv4地址
listen-on-v6 port 53 { ::1; }; #定义bind的监听IPv6地址
directory "/var/named"; #zone文件的默认路径
dump-file "/var/named/data/cache_dump.db"; #cache的备份
statistics-file "/var/named/data/named_stats.txt"; #静态文件
memstatistics-file "/var/named/data/named_mem_stats.txt"; #内存静态文件
secroots-file "/var/named/data/named.secroots"; #存储DNSSEC验证安全根(Secure Roots)的文件
recursing-file "/var/named/data/named.recursing"; #存储递归查询状态的文件
allow-query { 127.0.0.1; }; #允许谁向此DNS进行查询
recursion yes; #启用递归查询
##安全相关部分:
dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
###日志相关
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
##定义zone
zone "." IN {
type hint;
file "named.ca";
};
##子配置文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
/etc/named.rfc1912.zones:Bind的区域配置文件,用于定义zone
[root@web2 ~]# vim /etc/named.rfc1912.zones
zone "localhost.localdomain" IN { #正向解析zone的名字
type master; #类型
file "named.localhost"; #解析文件
allow-update { none; }; #是否自动更新
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN { #反向解析zone的名字
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone的默认存放路径/var/named/下(与named.rfc1912.zones中的zone对应的文件)
zone文件的书写格式:
$TTL 1D #TTL默认值为1天
@ [TTL] IN SOA 主DNS服务器FQDN 管理员邮箱 (
0 ; 序列号
1D ; 更新间隔
1H ; 更新失败后重试间隔
1W ; 过期时长
3H ) ; 否定记录保存时长
资源类型:A(IPv4), AAAA(IPv6):定义FQDN的IP
NS : 定义DNS服务器的FQDN
SOA : 起始授权(每个zone首先要定义此值)
MX: 定义邮件交换记录,有优先级概念(0-99),值越小优先级越高。
CNAME: 定义别名
PTR: 反向记录
三、配置主DNS服务
搭建主DNS服务器,解析yanyujie.com域名
1.修改DNS主配置文件
[root@web2 ~]# vim /etc/named.conf
##修改下面两处位置:
listen-on port 53 { any; };
allow-query { any; };
2.定义zone配置
[root@web2 ~]# vim /etc/named.rfc1912.zones
##添加两个zone配置
zone "yanyujie.com" IN {
type master;
file "yanyujie.zone";
allow-update { none; };
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "named.yanyujie";
allow-update { none; };
};
3.复制、修改zone文件
[root@web2 named]# cp -p named.localhost yanyujie.zone
[root@web2 named]# cp -p named.loopback named.yanyujie
[root@web2 named]# vim yanyujie.zone
$TTL 86400
@ IN SOA ns1.yanyujie.com. root.yanyujie.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.yanyujie.com.
ns1 A 192.168.10.201
www A 192.168.10.201
ftp A 192.168.10.202
mail A 192.168.10.203
database A 192.168.10.13
web CNAME www.yanyujie.com.
@ MX 10 mail.yanyujie.com.
[root@web2 named]# vim named.yanyujie
$TTL 86400
@ IN SOA ns1.yanyujie.com. root.yanyujie.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.yanyujie.com.
ns1 A 192.168.10.201
201 PTR www.yanyujie.com.
202 PTR ftp.yanyujie.com.
203 PTR mail.yanyujie.com.
13 PTR database.yanyujie.com.
201 PTR web.yanyujie.com.
4.重启服务
[root@web2 named]# systemctl restart named
[root@web2 named]# netstat -tunlp|grep :53
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 941/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 941/named
tcp6 0 0 ::1:53 :::* LISTEN 941/named
udp 0 0 0.0.0.0:5353 0.0.0.0:* 851/avahi-daemon: r
udp 0 0 192.168.122.1:53 0.0.0.0:* 1877/dnsmasq
udp 0 0 192.168.122.1:53 0.0.0.0:* 941/named
udp 0 0 192.168.31.178:53 0.0.0.0:* 941/named
udp 0 0 192.168.10.201:53 0.0.0.0:* 941/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 941/named
udp6 0 0 :::5353 :::* 851/avahi-daemon: r
udp6 0 0 ::1:53 :::* 941/named
5.客户端测试
[root@database ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.10.201
[root@database b1 ~]# nslookup
> www.yanyujie.com
Server: 192.168.10.201
Address: 192.168.10.201#53
Name: www.yanyujie.com
Address: 192.168.10.201
> 192.168.10.202
202.10.168.192.in-addr.arpa name = ftp.yanyujie.com.
四、配置备DNS服务
1.安装bind包,修改主配置文件
[root@web3 ~]# yum install -y bind
[root@web3 ~]# vim /etc/named.conf
##修改下面两处位置:
listen-on port 53 { any; };
allow-query { any; };
2.定义zone配置
##添加两个zone配置
[root@web3 ~]# vim /etc/named.rfc1912.zones
zone "yanyujie.com" IN {
type slave;
masters { 192.168.10.201; };
file "slaves/yanyujie.slave.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.201; };
file "slaves/name.yanyujie.slave";
};
3.重启服务,查看是否同步zone数据
[root@web3 ~]# systemctl restart named
[root@web3 ~]# ls /var/named/slaves/
name.yanyujie.slave yanyujie.slave.zone
4.客户端测试
[root@database ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search yanyujie.com
nameserver 192.168.10.201
nameserver 192.168.10.200
[root@database ~]# nslookup
> web.yanyujie.com
Server: 192.168.10.201 ##主DNS服务器提供服务
Address: 192.168.10.201#53
web.yanyujie.com canonical name = www.yanyujie.com.
Name: www.yanyujie.com
Address: 192.168.10.201
> 192.168.10.201
201.10.168.192.in-addr.arpa name = web.yanyujie.com.
201.10.168.192.in-addr.arpa name = www.yanyujie.com.
关闭主DNS服务
[root@web2 named]# systemctl stop named.service
再次测试,看看是否会变为备份DNS提供解析
[root@database ~]# nslookup
> www.yanyujie.com
Server: 192.168.10.200 ##备份DNS服务器提供服务
Address: 192.168.10.200#53
Name: www.yanyujie.com
Address: 192.168.10.201
> 192.168.10.202
202.10.168.192.in-addr.arpa name = ftp.yanyujie.com.
五、增量备份DNS服务
在主备DNS配置的基础上修改zone文件的设置。
1.修改主DNS的正向解析zone文件
[root@web2 named]# vim yanyujie.zone
$TTL 86400
@ IN SOA ns1.yanyujie.com. root.yanyujie.com. (
0 ; serial
60 ; refresh ##更新间隔修改为60秒
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.yanyujie.com.
ns1 A 192.168.10.201
www A 192.168.10.201
ftp A 192.168.10.202
mail A 192.168.10.203
database A 192.168.10.13
web CNAME www.yanyujie.com.
@ MX 10 mail.yanyujie.com.
2.修改主DNS的反向解析zone文件
[root@web2 named]# vim named.yanyujie
$TTL 86400
@ IN SOA ns1.yanyujie.com. root.yanyujie.com. (
0 ; serial
60 ; refresh ##更新间隔修改为60秒
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.yanyujie.com.
ns1 A 192.168.10.201
201 PTR www.yanyujie.com.
202 PTR ftp.yanyujie.com.
203 PTR mail.yanyujie.com.
13 PTR database.yanyujie.com.
201 PTR web.yanyujie.com.
3.删除备份DNS服务器的zone文件同步数据,并重启服务,查看是否重新同步zone文件数据
[root@web3 ~]# rm -f /var/named/slaves/*
[root@web3 ~]# systemctl restart named
[root@web3 ~]# ls /var/named/slaves/
name.yanyujie.slave yanyujie.slave.zone
4.在主DNS服务器的正向和反向解析文件中添加一条记录,并修改serial序列号
[root@web2 named]# vim yanyujie.zone ##正向解析文件
##修改serial序列号,最后面添加一条记录
1 ; serial
test A 192.168.10.204
[root@web2 named]# vim named.yanyujie ##反向解析文件
##修改serial序列号,最后面添加一条记录
1 ; serial
204 PTR test.yanyujie.com.
[root@web2 named]# systemctl restart named
5.客户端测试,看备份DNS服务器是否会自动增量更新。
[root@database ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search yanyujie.com
#nameserver 192.168.10.201
nameserver 192.168.10.200
[root@database ~]# nslookup
> test.yanyujie.com
Server: 192.168.10.200
Address: 192.168.10.200#53
Name: test.yanyujie.com
Address: 192.168.10.204
> 192.168.10.204
204.10.168.192.in-addr.arpa name = test.yanyujie.com.
六、转发DNS服务
在主备DNS配置的基础上修改主配置文件/etc/named.conf,主备DNS需要能够上外网。
1.主备DNS服务器都修改
[root@web2 named]# vim /etc/named.conf
####在options全局中添加
forwarders { 8.8.8.8; }; ##可以配置多个
forward only; ##还可以配置为forward first;
配置转发DNS之后,本地zone文件查询不到就会转发DNS,当配置forward only;转发DNS没有该记录,则返回客户端无记录,如果配置forward first,如果转发DNS没有该记录,则从根开始一级级进行查询。
2.客户端测试
[root@database ~]# nslookup
> www.baidu.com
Server: 192.168.10.200
Address: 192.168.10.200#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 36.152.44.132
Name: www.a.shifen.com
Address: 36.152.44.93
Name: www.a.shifen.com
Address: 2409:8c20:6:123c:0:ff:b0f6:b2d
Name: www.a.shifen.com
Address: 2409:8c20:6:1794:0:ff:b080:87f0