企业级DNS服务器部署
1.关于dns的名词解释
DNS: Domain Name Service(域名解析服务)。
域名只是逻辑概念,而IP地址是32为二进制数字便于机器处理。
域名到IP地址的解析:是由分布在因特网上的许多域名服务器程序共同完成的。当某一个应用进程需要把主机名解析为IP地址使,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回,应用获得目的主机的IP地址后即可进行通信。
域名服务器:DNS是分布式系统,每一个域名服务器都能够进行部分域名到IP地址的解析,当某个DNS服务器不能进行域名到IP的转换时,它就会查找上级域名服务器进行解析。
(1)根域名服务器: 根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。,共有13个不同IP地址的根域名服务器,每一个地点的根域名服务器还可以由多台机器组成。其相应的域名是a.rootservers.net,… ,m.rootservers.net。根域名服务器的作用是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
(2)顶级域名服务器(TLD服务器):负责管理在该顶级域名服务器注册的所有二级域名(如com、gov、edu、net、org等)。当收到DNS查询请求时,就给出相应的应答,可能是最后的结果,可能是下一步找的域名服务器的IP地址。
(3)权限域名服务器:负责一个区的域名服务器
(4)本地域名服务器(local name server):当一个主机发出DNS请求时,这个查询请求报文就发送给本地域名服务器。
主机向本地域名服务器的查询一般都是采用 递归查询(recursive query),所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,替该主机继续查询。因此,递归查询返回的查询结果或者是查询到的IP地址,或者是无法查询得到报错。
本地域名服务器向根域名服务器的查询通常是采用 迭代查询(iterative query)。迭代查询的特点是:当根域名服务器收到本地域名发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该向哪一个域名服务器查询。然年让本地域名服务器进行后续的查询(不会代替查询)。根域名服务器通常是吧自己知道的顶级域名服务器告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器也会要么给出所要查询的IP地址,要么高速本地域名服务器下一步应该向哪一个权限域名服务器查询。本地域名服务器就这样进行迭代查询。,最后把结果返回给发起查询的主机
关于客户端:
/etc/resolv.conf | dns指向文件 |
---|---|
host www.baidu.com | 地址解析命令 |
dig www.baidu.com | 地址详细解析信息命令 |
A记录 | ip地址叫做域名的Address记录 |
SOA | 授权起始主机 |
关于服务端
bind | 安装包 |
---|---|
named | 服务名称 |
/etc/named.conf | 主配置文件 |
var/named | 数据目录 |
端口 | 53 |
关于报错信息
1. | no servers could be reached | 服务无法访问(服务开启?火墙?网络?端口?) |
---|---|---|
2. | 服务启动失败 | 配置文件写错 journalctl -xe查询错误 |
3. | dig 查询状态 NOERROR | 表示查询成功 |
4. | dig 查询状态 REFUSED | 表示服务拒绝访问 |
5. | dig 查询状态 RVFAIL | 表示查询记录失败,(dns服务器无法到达上级,拒绝缓存) |
6. | dig 查询状态 NXDOMAIN | 表示此域名A记录在dns中不存在 |
2.dns服务的安装与启用
2.1 DNS的安装
dnf install bind.x86_64 -y
2.2 DNS的启用
systemctl enable --now named
开启服务
firewall-cmd --permanent --add-service=dns
火墙中添加服务
firewall-cmd --reload
vim /etc/named.conf
编辑配置文件开启53端口
11 | listen-on port 53 { any; }; | 在本地所有网络接口上开启53端口 |
---|---|---|
19 | allow-query { any; }; | 允许查询A记录的客户端列表 |
34 | dnssec-validation no; | 禁用dns检测使dns能够缓存外部信息到本地 |
systemctl restart named
测试:
3.高速缓存dns
为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及何处获得域名映射信息的记录。
vim /etc/named.conf
编辑配置文件设置高速缓存
20 forwarders { 114.114.114.114; };
systemctl restart named
4.dns的正向解析
1.设定自己的域名管理——vim /etc/named.rfc1912.zone
zone "reddns.com" IN {
type master;
file "reddns.com.zone";
allow-update { none; };
};
2.复制A记录文件模板及权限——cd /var/named/ cp -p named.localhost reddns.com.zone
3.编辑域名A记录文件——vim /var/named/reddns.com.zone
$TTL 1D
@ IN SOA dns.reddns.com. root.reddns.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.reddns.com.
dns A 192.168.0.60
www CNAME reddns.a.reddns.com.##规范域名
reddns.a A 192.168.0.101 ##正向解析记录
reddns.a A 192.168.0.102
reddns.com. MX 1 192.168.0.20. #邮件解析记录
systemctl restart named
测试:
dig www.reddns.com
#查询正向解析
dig -t mx reddns.com
#邮件解析记录查询
正向解析
规范域名
邮件解析记录
5.dns的反向解析
arpa:用于反向域名解析,又称反向域名,将IP地址解析为域名。
1.在主配置文件中设置反向解析—— vim /etc/named.rfc1912.zones
zone "0.168.192.in-addr.arpa" IN {
type master;
file "192.168.0.ptr";
allow-update { none; };
};
cd
2.复制反向解析记录文件模板及权限——cp -p /var/named/named.loopback /var/named/192.168.0.ptr
3.编辑域名A记录文件——vim /var/named/192.168.0.ptr
$TTL 1D
@ IN SOA dns.reddns.com. root.reddns.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.reddns.com.
dns A 192.168.0.20
11 PTR www.reddns.com.
12 PTR bbs.reddns.com.
13 PTR news.reddns.com.
systemctl restart named
测试: dig -x 192.168.0.11
6.dns的双向解析
dns的双向解析: 分别在2个网段的主机中作同样域名的地址解析,会得到不同的A记录。
实验环境:
1台含有2个网段的服务端
ip1: 192.168.0.60
ip2:172.25.254.60
ifconfig ens160:0 172.25.254.60 netmask 255.255.255.0
客户端2台 192.168.0网段 172.25.254网段 ##
客户端1:
ip1: 192.168.0.50
ip2:172.25.254.50
ifconfig ens160 172.25.254.50 netmask 255.255.255.0
客户端1:
ip: 192.168.0.50
在192.168.0网段的客户主机中 vim /etc/resolv.conf nameserver 192.168.0.20
在172.25.254网段的客户主机中 vim /etc/resolv.conf nameserver 172.25.254.20
配置方式: 复制内网A记录文件模板到外网
cp -p /var/named/reddns.com.zone /var/named/reddns.com.inter
vim /var/named/reddns.com.inter
$TTL 1D
@ IN SOA dns.reddns.com. root.reddns.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.reddns.com.
dns A 172.25.254.60
www CNAME reddns.a.reddns.com.
reddns.a A 172.25.254.101
reddns.a A 172.25.254.102
reddns.com. MX 1 172.25.254.20.
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.inters
vim /etc/named.rfc1912.inters
25 zone "reddns.com" IN {
26 type master;
27 file "reddns.com.inter";
28 allow-update { none; };
29 };
vim /etc/named.conf
设置访问允许范围
60 view localnet {
61 match-clients { 192.168.0.0/24; };
62 zone "." IN {
63 type hint;
64 file "named.ca";
65 };
66
67 include "/etc/named.rfc1912.zones";
68 include "/etc/named.root.key";
69
70 };
71
72 view internet {
73 match-clients { any; };
74 zone "." IN {
75 type hint;
76 file "named.ca";
77 };
78
79 include "/etc/named.rfc1912.inters";
80 include "/etc/named.root.key";
81
82 };
systemctl restart named
测试: 分别在2个网段的主机中作同样域名的地址解析 得到的A记录不同
7.dns集群DNS
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中 的一个是主域名服务器(master name server),其他的是辅助域名服务器(secondary name server)。当主域名服务器出现故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行,这样就保证了数据的一致性。
辅助DNS中的设置
dnf install bind.x86_64 -y
systemctl enable --now named
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
vim /etc/named.conf
systemctl restart named
vim /etc/named.rfc1912.zone
25 zone "reddns.com" IN {
26 type slave;
27 masters { 192.168.0.60; };
28 file "slaves/reddns.com.zone";
29 };
systemctl restart named
主DNS中的设置
vim /etc/named.rfc1912.zones
25 zone "reddns.com" IN {
26 type master;
27 file "reddns.com.zone";
28 allow-update { none; };
29 also-notify { 192.168.0.50; };
30 };
vim /var/named/reddns.com.zone
$TTL 1D
@ IN SOA dns.reddns.com. root.reddns.com (
2020031802 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.reddns.com.
dns A 192.168.0.60
www CNAME reddns.a.reddns.com.
reddns.a A 192.168.0.101
reddns.a A 192.168.0.102
reddns.com. MX 1 192.168.0.60.
systemctl restart named
8.dns的更新
8.1 dns基于ip地址的更新
在dns中设定:
vim /etc/named.rfc1912.zones
25 zone "reddns.com" IN {
26 type master;
27 file "reddns.com.zone";
28 allow-update { 192.168.0.200; };
29 also-notify { 192.168.0.50; };
30 };
systemctl restart named
测试:
8.2 dns基于key更新的方式
1.生成钥匙——dnssec-keygen -a HMAC-SHA256 -b 128 -n HOST reddns
2.把钥匙添加到配置文件中
cp -p /etc/rndc.key /etc/reddns.key
vim /etc/reddns.key
key "reddns" {
algorithm hmac-sha256;
secret "qqhl4psx/lchR+rR42gVlA==";
};
vim /etc/named.conf
45 include "/etc/wesots.key";
vim /etc/named.rfc1912.zones
25 zone "reddns.com" IN {
26 type master;
27 file "reddns.com.zone";
28 allow-update { key reddns; };
29 also-notify { 192.168.0.50; };
30 };
systemctl restart named
测试:
nsupdate -k /mnt/Kreddns.+163+46285.private
nsupdate -k /mnt/Kreddns.+163+46285.private
> server 192.168.0.60
> update add hello.reddns.com 86400 A 192.168.0.113
> send
> update del hello.reddns.com
> send
> quit
9.ddns(dhcp+dns)
在DNS主机中设置动态域名解析
9.1 在服务端配置DDNS:
(1)在dns服务端安装DHCP:dnf install dhcp-server.x86_64 -y
(2)复制dhcp主配置文件模板:
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
(3)在DNS服务器的主机server中配置dhcp,编辑dhcp主配置文件:
vim /etc/dhcp/dhcpd.conf
注意:
9.2 在客户端配置dncp方式获得IP
9.3 测试:更改服务端dhcp范围