DNS(Domain Name Server,域名服务系统)
DNS服务实现IP地址和域名之间的解析服务,属于应用层协议,C/S架构。主要软件名bind 进程名named,DNS既可以基于TCP协议也可以基于UDP协议,端口号为53端口。
区域只是逻辑概念,区域的负责做域名解析的服务器为名称/DNS服务器NS。根区域,全球13台DNS根域名称服务器
查询方式:
递归查询:一次请求,即获得最终答案
迭代查询:需要通过层层迭代,多次查询才能获得最终答案
DNS名称服务的类型
DNS权威服务器:负责某个特定的区域
DNS缓存服务器 :不负责任何区域,但是可以帮助客户机实现递归查询(找根),一般只负责运营商某个地区的DNS客户机的解析
DNS转发器 :不负责任何区域,也不负责递归,只能做查询转发
注意:若客户机直接指向DNS权威服务器,解析DNS权威服务器本区域内的结果,获得的答案为权威应答(直接通过区域解析库获得的答案为权威答案)
非权威答案:通过递归查询得到的答案,一般缓存DNS服务器获取的答案为非权威答案
DNS解析优先级
/etc/hosts 本地DNS缓存 缓存DNS服务器 权威DNS服务器
一、资源记录(RR)
SOA:一个区域解析库的授权记录,第一条必须是
A记录:FQDN ----> IP
AAAA:FQDN ----> IPV6
PTR:IP ----> FQDN
NS:规定当前区域内名称服务器,必须对应一条A记录
CNAME:别名记录
例如: web.xiaok.com.N CNAME wwwweb.baidu.com
MX:邮件交换器 任何一个MX记录后面的服务器名字,都有一个A记录
例如:xiaok.com IN MX 10 mx1.xxh
二、命令dig
格式:dig [-t type] name [@server]
dig -t A www.xxhf.com @172.20.10.4 #查询此子域名A记录
三、详细实验过程
1. 实验一、缓存DNS服务器搭建
yum -y install bind
#/etc/named.conf # bind主配置文件
#/etc/named.rfc1912.zones #第一辅助配置文件
cp -p /etc/named.conf{,.bak} #备份主配置文件
vim /etc/named.conf #然后编写主配置文件
named-checkconf #检查语法
systemctl restart named #重启服务
在win10进行验证,设置win10的ip网关、dns
打开终端进行验证 nslookup www.baidu.com
2. 实验二、主DNS服务器搭建和管理
先买一个没有注册的域名,在安装了服务的基础上实现以下配置
需要在主配置文件内增加域(zone)相关配置;编辑/etc/named.rfc1912.zones(被主配置文件include)区域
vim /etc/named.rfc1912.zones
named-checkconf #检查语法
写区域解析库 配置区域配置文件
cp -p /var/named/named.localhost xxhf123.com.zone #注意权限的问题
vim xxhf123.com.zone #内容如下
named-checkzone “xxhf.com” xxhf.com.zone
rndc reload //重启状态
在客户端进行验证
3. 实验三、搭建从DNS服务器实现主从复制
注意事项
1.主从为一台独立的名称服务器
2.主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3.从服务器只需要定义区域,而无需提供解析库文件,解析库文件通过TCP的53号端口完全从Master同步过来,同步到/var/named/slaves目录中,它是一个二进制数据流文件(data) 同步有两种:全量传送(基于AXFR)、增量传送(要求必须识别序列号或者将序列号重载)
4.主从服务器时间应该同步,可通过ntp(低版本)进行;做一主多从时要保证时间一致(chrony时间服务器)
5.bind程序的版本应该保持一致(或者从服务器版本高于主服务器)
//查看版本
6.如果主DNS服务器的区域解析库内容发生修改,需修改其序列号(一般往后+1)!
7.可以通过/var/log/message查看主从DNS同步相关数据信息
实验环境
node-1:主DNS 192.168.10.100/24
node-2:从DNS 192.168.10.110/24
实验步骤
搭建缓存dns
[root@node-1 ~]# yum -y install bind
[root@node-1 ~]# cp -p /etc/named.conf{,.bak}
[root@node-1 ~]# vim /etc/named.conf
10 options {
11 // listen-on port 53 { 127.0.0.1; };
12 listen-on-v6 port 53 { none; };
13 directory "/var/named";
14 // dump-file "/var/named/data/cache_dump.db";
15 // statistics-file "/var/named/data/named_stats.txt";
16 // memstatistics-file "/var/named/data/named_mem_stats.txt";
17 // secroots-file "/var/named/data/named.secroots";
18 // recursing-file "/var/named/data/named.recursing";
19 // allow-query { localhost; };
31 recursion yes;
32
33 dnssec-validation no;
[root@node-1 ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
[root@node-1 ~]# ss -unl
[root@node-1 ~]# dig -t A www.baidu.com @127.0.0.1
搭建主dns
[root@node-1 ~]# vim /etc/named.rfc1912.zones
17 zone "xxhf123.com" IN {
18 type master;
19 file "xxhf123.com.zone";
20 };
[root@node-1 ~]# named-checkconf
[root@node-1 ~]# cd /var/named/ #所以区域解析库所在的路径
[root@node-1 named]# cp -p named.localhost xxhf123.com.zone
[root@node-1 named]# vim xxhf123.com.zone
$TTL 1D
@ IN SOA @ mx1.xxhf123.com. (
2021031501 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
NS mx1
ns1 A 192.168.10.100
mx1 A 192.168.10.130
www A 192.168.10.110
[root@node-1 named]# named-checkzone "xxhf123.com.zone" xxhf123.com.zone
zone xxhf123.com.zone/IN: loaded serial 2021031501
OK
[root@node-1 named]# rndc reload
server reload successful
[root@node-1 named]# systemctl restart named
[root@node-1 named]# dig -t A www.xxhf123.com @192.168.10.100
搭建从dns
[root@node-2 ~]# yum -y install bind
[root@node-2 ~]# vim /etc/named.conf
10 options {
11 // listen-on port 53 { 127.0.0.1; };
12 listen-on-v6 port 53 { none; };
13 directory "/var/named";
14 // dump-file "/var/named/data/cache_dump.db";
15 // statistics-file "/var/named/data/named_stats.txt";
16 // memstatistics-file "/var/named/data/named_mem_stats.txt";
17 // secroots-file "/var/named/data/named.secroots";
18 // recursing-file "/var/named/data/named.recursing";
19 // allow-query { localhost; };
31 recursion no;
32
33 dnssec-validation no;
[root@node-2 ~]# named-checkconf
[root@node-2 ~]# vim /etc/named.rfc1912.zones
17 zone "xxhf123.com" IN {
18 type slave;
19 masters { 192.168.10.100; };
20 file "slaves/xxhf123.com.zone";
21 };
[root@node-2 ~]# named-checkconf
[root@node-2 ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
node1 测试
[root@node-1 named]# dig -t A www.xxhf123.com @192.168.10.110
; <<>> DiG 9.16.23-RH <<>> -t A www.xxhf123.com @192.168.10.110
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17543
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 47fc9dafc90792900100000065e2efcebd0ffe1b29bd6124 (good)
;; QUESTION SECTION:
;www.xxhf123.com. IN A
;; ANSWER SECTION:
www.xxhf123.com. 86400 IN A 192.168.10.110
;; Query time: 2 msec
;; SERVER: 192.168.10.110#53(192.168.10.110)
;; WHEN: Sat Mar 02 17:22:22 CST 2024
;; MSG SIZE rcvd: 88
4. 实验四、DNS转发器
实验步骤
两种转发器
first:非本区域内的解析先尝试自己解析,不成功情况下再迭代
only :非本区域内的解析直接做迭代
[root@node-2 ~]# vim /etc/named.conf
20 forward only; //定义转发器
21 forwarders { 223.6.6.6; }; //非权威应答让223.6.6.6帮忙递归查询
32 recursion yes;
[root@node-2 ~]# named-checkconf
[root@node-2 ~]# rndc reload
[root@node-2 ~]# dig -t A www.youku.com @127.0.0.1
5. 实验五、子域授权
实验环境
node-1:主DNS 192.168.10.100/24
node-3:子DNS 192.168.10.120/24
实验步骤
规定区域ops.xxhf123.com,node-3做子域服务器
[root@node-3 ~]# yum -y install bind
[root@node-3 ~]# vim /etc/named.conf
10 options {
11 // listen-on port 53 { 127.0.0.1; };
12 listen-on-v6 port 53 { none; };
13 directory "/var/named";
14 // dump-file "/var/named/data/cache_dump.db";
15 // statistics-file "/var/named/data/named_stats.txt";
16 // memstatistics-file "/var/named/data/named_mem_stats.txt";
17 // secroots-file "/var/named/data/named.secroots";
18 // recursing-file "/var/named/data/named.recursing";
19 // allow-query { localhost; };
31 recursion yes;
32 dnssec-validation no;
[root@node-3 ~]# vim /etc/named.rfc1912.zones
zone "ops.xxhf123.com" IN {
type master;
file "ops.xxhf123.com.zone";
}
[root@node-3 ~]# cp -p /var/named/named.localhost /var/named/ops.xxhf123.com.zone
[root@node-3 ~]# cd /var/named/
[root@node-3 named]# vim ops.xxhf123.com.zone
[root@node-3 named]#named-checkzone "ops.xxhf123.com.zone" ops.xxhf123.com.zone
和主DNS建立串联关系,在主DNS的配置文件写一条记录授权
[root@node-1 named]# vim xxhf123.com.zone
[root@node-1 named]#named-checkzone "xxhf123.com.zone" xxhf123.com.zone
[root@node-1 ~]#systemctl restart named
[root@node-3 ~]#systemctl restart named
[root@node-3 ~]#dig -t A www.ops.xxhf123.com @127.0.0.1
6. 实验六、解析父域
实验环境
node-1:主DNS 192.168.10.100/24
node-3:子DNS 192.168.10.120/24
实验步骤
node-3无法解析www.xxhf123.com
//默认情况下只能父域解析子域,子域无法解析父域,若想解析只能找根
编辑配置文件,在子域定义一个转发器
[root@node-3 ~]# vim /etc/named.rfc1912.zones
zone "xxhf123.com`" IN {
type forward;
forward only;
forwarders { 192.168.10.100; };
};
[root@node-3 ~]#rndc reload
[root@node-3 ~]#dig -t A www.xxhf123.com @127.0.0.1
7. 实验七、DNS访问控制
allow-query {}:允许查询的主机(白名单)
//允许谁指向我
[root@node-1 ~]# vim /etc/named.conf
[root@node-1 ~]#systemctl restart named
2、allow-transfer {}:允许区域传送的主机(白名单)
将配置文件/etc/named.conf改回来
[root@node-1 ~]# vim /etc/named.rfc1912.zones
[root@node-1 ~]# named-checkconf
[root@node-1 ~]# vim /var/named/xxhf123.com.zone
[root@node-1 named]#named-checkzone "xxhf123.com.zone" xxhf123.com.zone
[root@node-1 ~]# systemctl restart named
node-2验证
再修改辅助配置文件
[root@node-1 ~]# vim /etc/named.rfc1912.zones
[root@node-1 ~]# vim /var/named/xxhf123.com.zone
[root@node-1 ~]# rndc reload
[root@node-1 ~]# systemctl restart named
allow-recursion {}:允许递归的主机
必须要定义在named.conf里面,其他的定义在/etc/named.rfc1912.zones或者/etc/named.conf里面都可,如果都定义,优先级以小范围说了算
编辑配置文件,只允许给自己同网段的人做递归
[root@node-1 ~]# vim /etc/named.conf
node-2添加一块网卡(仅主机)
添加网卡ip,开启路由转发功能
node-1 添加路由条目,测试路由功能
Win10改为仅主机模式,静态ip 网关为双网卡主机的vm1网卡所在ip
[root@node-1 ~]# systemctl restart named
主DNS定义ACL
[root@node-1 ~]# vim /etc/named.conf
测试
4、allow-update {}:允许更新的主机,通常为none
8. 实验八、DNS访问控制——bind vinw视图
实验环境
node-1:服务器
node-2:内网测试机
win10:外网测试
实验步骤
[root@node-1 ~]# vim /etc/named.conf
[root@node-1 ~]# vim /etc/named.rfc1912.zone