BIND 是最广泛使用的开源DNS服务器
该服务通过服务端的53端口提供
主配置文件是 /etc/named.conf
/var/named 目录包含名称服务器所使用的其他数据文件
搭建DNS服务器:
1.下载bind软件:
yum -y install bind
2.修改主配置文件:
vim /etc/named.conf
3.启动服务:
systemctl start named
4.设置防火墙,允许客户端访问DNS服务:
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-all
正向解析:通过域名查找对应的ip地址
$TTL 1D 这个A记录最多保存1天(A记录,ipv4地址,AAAA记录,ipv6地址)
@=域名(即@表示这个域名) SOA dns.wstos.com. root.westos.com.
(授权起始)
NS nameserver dns.westos.com.
dns A 172.25.254.100
下面还可以存放已知的其他的域名-ip对应关系
配置正向解析:
1.设置服务器的域名解析服务器ip为本机
vim /etc/resolv.conf
2.修改保存指向域名—ip地址对应关系的数据文件的配置文件,增添要维护的域名
vim /etc/named.rfc1912.zones
3.修改指向域名—ip地址对应关系的数据文件
cd /var/named
cp -p named.localhost hello.com.zone 必须加上-p参数,将文件权限也复制
下图为例:
客户端设置了DNS域名解析服务器为我所配置DNS服务器的虚拟机ip地址,访问服务端结果如下:
反向解析:通过ip地址查找对应的域名
PTR 反向解析
反向解析记录,名字也要反着写,在解析记录文件中会对不加点的自动在前面补全172.25.254
就像前面的正向解析在后面补全名字中的 .westos.com
1.修改保存指向ip地址—域名对应关系的数据文件的配置文件,增添要维护的域名的反向解析记录文件信息
vim /etc/named.rfc1912.zones
2.修改指向ip地址—域名对应关系的数据文件(保存反向解析记录文件)
cd /var/named
cp -p named.localhost hello.com.ptr 必须加上-p参数,将文件权限也复制
双向解析:外网用户查询到的是外网地址,内网用户查询到的是内网地址
1.在/var/named目录下,复制一份dns解析记录文件,用于保存内网查询的dns解析数据
cd /var/named
cp -p hello.com.zone hello.com.localnet
vim hello.com.localnet
2.在/var/目录下,复制一份指向本地内网dns解析记录文件的配置文件
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.local
vim /etc/named.rfc1912.local
3.编辑更改主配置文件/etc/named.conf使DNS服务器对于不同的ip地址访问,给出不同的(相应的)dns解析结果
vim /etc/named.conf
为了分担主DNS服务器的访问压力,我们可以使用辅助DNS服务器的方式
主DNS配置:
就以上面的DNS服务器作为主DNS,将其主配置文件中的双向解析部分注释,恢复原配置。
辅助DNS配置:
下载bind,并配置参数
yum install -y bind
vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
编辑子配置文件/etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
zone "hello.com" IN {
#设置其与主DNS共同维护的域的参数,以与主DNS同步
type slave;
masters { 172.25.254.160; };
file "slaves/hello.com.zone"; #该文件为同步主DNS中数据得到,但不是文本文件,是数据文件。
allow-update { none; };
}
systemctl restart named #与主DNS服务器数据通步
在防火墙中允许dns服务
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
数据的更新:
辅助DNS将原数据文件删除,再次重启服务,与主DNS同步
(此时还无法令辅助DNS自动地去同步更新后的主DNS,下面将讲的是令其自动地随着主DNS的更新而去更新本机的DNS数据记录)
下图为例:
主DNS配置及测试结果:
辅助DNS配置及测试结果:
辅助DNS自动同步主DNS:
更改主DNS的子配置文件/etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
zone "hello.com" IN {
type master;
file "hello.com.zone";
allow-update { none; };
also-notify { 172.25.254.200; }; #在原配置上添加该参数:其中的ip地址为辅助DNS服务器的
}; #该参数会在主DNS中的hello.com的dns记录文件更新时,通知辅助DNS来更新
systemctl restart named
主DNS增加参数: also-notify
注意:
每次跟改DNS解析记录文件后必须更改serial的数值,才能让辅助DNS服务器自动更新(否则,虽然辅助服务器被通知更新了,但是由于serial值不变,不会自动更新)
这个数值最大10位,一般会让这个数有代表意义;
如:2019080401,代表当前文件为2019年08月04日第一次更新
下图为例:
更改主DNS配置后,为了测试,更改其DNS解析数据记录文件hello.com.zone,测试辅助DNS是否自动同步更新了。
原hello.com.zone文件中的www.hello.com的ip地址由172.25.254.160更改为1.1.1.1;serial参数由0更改为1
(不过该参数似乎只能由小往大改变才生效,且似乎必须大于该值的曾经修改过的最大值)
在上面的主DNS的配置文件基础上进行配置
vim /etc/named.rfc1912.zones
zone "hello.com" IN {
type master;
file "hello.com.zone";
allow-update { 172.25.254.161; }; #允许谁来更新本机的DNS数据记录
#将原配置中该参数的none更改为允许远程为主DNS更新数据的主机的IP地址
also-notify { 172.25.254.200; };
};
chmod 770 /var/named 使得named服务进程可以有权限在该目录下写入文件
systemctl restart named
更新后,可以查到所更新的DNS记录。但是配置文件不会改变;再次重启服务,才会改变配置文件,将其更新;因此,要提前做好备份。
#客户端远程更新操作
添加DNS解析记录
[root@localhost slaves]# nsupdate
> server 172.25.254.160 #要更新的DNS服务器ip地址
> update add www.hello.com 86400 A 2.2.2.2 #添加的DNS解析记录
> send #更新动作
> quit
删除DNS解析记录
[root@localhost slaves]# nsupdate
> server 172.25.254.160
> update delete www.hello.com
> send
> quit
下图为例:
图一,二为主DNS的配置设置
图三为,主DNS与辅助DNS共同维护的域hello.com的DNS解析记录数据文件的备份。
由于单纯地使用ip地址的方式指定由谁(哪一台主机)来远程更新DNS服务器的方式还是不太安全。因此,我们可以使用下面的这种方式来进行远程更新的主机的指定与验证。
通过使用KEY密钥的方式对DNS服务器进行加密,从而指定了:
谁能远程更新DNS服务器数据: 持有相应的密钥的主机
验证远程更新DNS服务器权限的方式: 密钥
具体操作:
1.生成密钥
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hello
加密方式 加密位数 密钥名
(应该不是必须和dns数据记录文件在同一个目录下才行)
2.在服务端生成自己的加密密钥(锁头)
cp -p /etc/rndc.key /etc/hello.key
vim /etc/hello.key
vim /etc/named.conf(编辑配置文件,使得服务能读取我们生成的key:/etc/westos.key)
3.更改远程更新DNS的认证方式,由ip—>Key密钥
vim /etc/named.rfc1912.zones
4.重启服务named
systemctl restart named
5.将之前生成的两个密钥都发送给待更新的客户端(要更新DNS的主机)
scp Khello.* [email protected]:/mnt
下图为例:
最后一图中可见,必须使用密钥才能更新,且必须写对路径
由于在企业内部的主机一般都是动态地从DHCP服务器上获取ip地址的,但是主机的域名却不会改变。因此就造成了,会存在着相同域名的主机,ip却是变化的这种现象。
而我们访问域名,当然是想访问提供该服务的主机,而不是想访问dns解析记录中的固定的ip地址。所以说,我们将使用下面的方式,使得DNS服务器的域名解析记录,随着相应的主机的ip地址的改变而改变。
1.先在主dns服务器上搭建dhcp服务器
(1)搭建dhcp服务器:
yum -y install dhcp
cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf 设定dhcp服务参数
编辑配置文件内容
systemctl restart dhcpd
firewall-cmd --list-all
firewall-cmd --permanent --add-service=dhcp
firewall-cmd --reload
(2)在原dhcp配置的基础之上,添加参数:ddns-update-style interim;添加拥有相应的更新dns服务的权限的key:
key DHCP_UPDATER {
并指定分配ip后去更新的dns服务器的ip地址:
firewall-cmd --permanent --add-service=dhcp 永久添加防火墙的服务端口dhcp
firewall-cmd --reload
2.给dhcp的配置文件加上密钥,使得服务端的dhcp服务每分配出去ip,可以有权限自动更改dns服务的数据
这一实验,在上面的给dns加密的基础之上进行