域名系统(英文:Domain Name System,DNS)是因特网的一项服务,它作为将域名和IP地址相互映射的
一个分布式数据库,能够使人更方便的访问互联网。BIND是开源软件,它允许人们在Internet上发布域名
系统(DNS)信息,并为用户解决DNS查询。BIND全称是“Berkeley Internet name Domain”,因为该软件
起源于上世纪80年代初的加州大学伯克利分校(University of California at Berkeley)。
BIND是目前Internet上使用最广泛的DNS软件,它提供了一个健壮且稳定的平台,在此基础上,组织可以构
建分布式计算系统,并且知道这些系统完全符合发布的DNS标准。BIND实现了DNS协议。DNS协议是核心互联
网标准的一部分。它们指定了一个计算机根据其名称找到另一台计算机的过程。BIND软件发行版包含询问和
回答名称服务问题所需的所有软件。
BIND可以配置为主或从,以服务于每个区域的DNS请求,我们首先需要配置一台主DNS服务器,主服务器将作
为从服务器的源。当BIND配置为从时,它使用区域传输方法从主服务器获取区域数据的副本。
安装规划
我们将搭建两个名为primary和secondary的服务器,其中primary将被配置为kclouder域的主服务器。
secondary服务器将作为一个从DNS服务器。系统采用CentOS 7.5
Domain Name: kclouder.local
DNS servers:
NS1: primary.kclouder.local
IP: 192.168.17.5
NS2: secondary.kclouder.local
IP: 192.168.17.6
www.kclouder.local
192.168.17.100
mail.kclouder.local
192.168.17.99
配置主DNS
1,安装 BIND
yum -y install bind bind-utils
2,配置 BIND
编辑配置文件/etc/named.conf,注释掉下面一行,使BIND能够侦听所有ip地址。
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
添加允许访问DNS的地址段
allow-query { localhost;192.168.17.0/24; };
配置将所有区域由主DNS传输到从DNS(192.168.17.6)
allow-transfer { localhost;192.168.17.6; };
3,创建区域(Zones)– 正向查询
vi /etc/named.conf
zone “kclouder.local” IN {
type master;
file “fwd.kclouder.local.db”;
allow-update { none; };
};
解释:
kclouder.local – 本地域名
type master – 主DNS
fwd.kclouder.local.db – 正向查询文件
allow-update – 主DNS不需要设置传输,所以设置为none
4,创建区域(Zones)– 反向查询
vi /etc/named.conf
zone “17.168.192.in-addr.arpa” IN {
type master;
file “17.168.192.db”;
allow-update { none; };
};
解释:
17.168.192.in-addr.arpa – 反向查询名称
type master – 主DNS
12.168.192.db – 反向查询文件
allow-update – 主DNS不需要设置传输,所以设置为none
5,创建区域文件
默认情况下,区域查询文件放在/var/named目录下。在/var/named目录下创建一个名为
fwd.kclouder.local.db的文件用于进行正向查找。所有域名都应该以点(.)结尾。
名词解释:
A -A记录
NS -名称服务器
MX -交换邮件
CNAME -规范名称
执行以下操作:
vi /var/named/fwd.kclouder.local.db
$TTL 86400
@ IN SOA primary.kclouder.local. root.kclouder.local (
2014112511 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
;Name Server Information
@ IN NS primary.kclouder.local.
;Secondary Name server
@ IN NS secondary.kclouder.local.
;IP address of Name Server
primary IN A 192.168.17.5
;IP address of secondary server
secondary IN A 192.168.17.6
;Mail exchanger
kclouder.local. IN MX 10 mail.kclouder.local.
;A - Record HostName To Ip Address
www IN A 192.168.17.100
mail IN A 192.168.17.99
;CNAME record
ftp IN CNAME www.kclouder.local
6,在/var/named目录下创建一个名为17.168.192.db的反向区域文件。创建一个指向上述正向区域条
目的反向指针。
名词解释:
PTR – Pointer 指针
SOA – Start of Authority 起始授权机构
执行以下操作:
vi /var/named/17.168.192.db
$TTL 86400
@ IN SOA primary.kclouder.local. root.kclouder.local (
2014112511 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
;Name Server Information
@ IN NS primary.kclouder.local.
;Reverse lookup for Name Server
5 IN PTR primary.kclouder.local.
;PTR Record IP address to HostName
100 IN PTR www.kclouder.local.
99 IN PTR mail.kclouder.local.
7,重启BIND服务并设置自动启动
systemctl restart named.service
systemctl enable named.service
配置从DNS
1,安装 BIND
yum -y install bind bind-utils
2,配置 BIND
编辑配置文件/etc/named.conf,注释掉下面一行,使BIND能够侦听所有ip地址。
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
添加允许访问DNS的地址段
allow-query { localhost;192.168.17.0/24; };
3,创建区域(Zones)
vi /etc/named.conf
zone “kclouder.local” IN {
type slave;
masters { 192.168.17.6; };
file “slaves/fwd.kclouder.local.db”;
};
解释:
kclouder.local – 本地域名
type slave – 从DNS
fwd.kclouder.local.db – 查询文件
4,重启BIND服务并设置自动启动
systemctl restart named.service
systemctl enable named.service
从DNS自动更新
当主DNS服务器上的区域发生更改时,必须在所有从DNS服务器上进行更新。我们通过配置主DNS服务器
named.conf文件来实现当主DNS服务器上的区域发生更改时通知从DNS服务器进行区域更新。
在主DNS上编辑named.conf,在正向查询区域下添加如下两行:
notify yes;
also-notify { 192.168.17.6; };
安全加密传输
BIND服务程序支持TSIG( RFC 2845)加密机制,TSIG 主要是利用了密码编码的方式来保护区域信息的
传输( Zone Transfer),即 TSIG 加密机制保证了 DNS 服务器之间传输域名区域信息的安全性。
1,在主DNS服务器上安装chroot
yum install -y bind-chroot
2,使用下述命令生成一个主机名称为 master-slave 的 128 位 HMAC-MD5 算法的密钥文件。在执行该命
令后默认会在当前目录中生成公钥和私钥文件,我们需要把私钥文件中 Key 参数后面的值记录下来,一会儿
要将其写入传输配置文件中
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
3,查看生成的KEY
cat Kmaster-slave.+157+23290.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: C52JJ0UXSgQ1FHAW3SavKw==
Bits: AAA=
Created: 20181007144131
Publish: 20181007144131
Activate: 20181007144131
4,创建密钥验证文件
cd /var/named/chroot/etc/
vi transfer.key
key “master-slave” {
algorithm hmac-md5;
secret “C52JJ0UXSgQ1FHAW3SavKw==”;
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key
5,开启并加载 Bind 服务的密钥验证功能
在配置文件中添加红色部份:
vi /etc/named.conf
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
include “/etc/transfer.key”;
options {
#listen-on port 53 { 127.0.0.1; };
#listen-on-v6 port 53 { ::1; };
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
allow-query { localhost;192.168.17.0/24; };
allow-transfer { key master-slave; };
6,重启BIND服务
systemctl restart named
7,配置从DNS服务器,使其支持密钥验证
cd /var/named/chroot/etc
vi transfer.key
key “master-slave” {
algorithm hmac-md5;
secret “1XEEL3tG5DNLOw+1WHfE3Q==”;
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key
8,开启并加载从DNS服务器的密钥验证功能
在配置文件中添加红色部份:
vi /etc/named.conf
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
include “/etc/transfer.key”;
options {
#listen-on port 53 { 127.0.0.1; };
#listen-on-v6 port 53 { ::1; };
………………省略部分输出信息………………
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
server 192.168.10.10
{
keys { master-slave; };
};
logging {
channel default\_debug {
file "data/named.run";
验证DNS解析服务
1,在一台客户端上将DNS配置为:
192.168.17.5
2,使用dig命令验证正向查询
确认主DNS域名正向解析服务正常
dig mail.kclouder.local
确认从DNS域名正向解析服务正常
dig @192.168.17.6 mail.kclouder.local
3,使用dig命令验证反向查询
确认主DNS域名反向解析服务正常
dig -x 192.168.17.99
确认从DNS域名反向解析服务正常
dig -x @192.168.17.6 192.168.17.99
4,使用nslookup进行验证