使用BING提供域名解析服务
DNS域名解析服务
DNS 域名解析 服务是用于解析域名与ip地址对应关系的服务,功能上可以实现正向解析和反向解析。
正向解析:将域名解析为ip地址 反向解析:将ip地址解析为域名
DNS 从工作形式上分为 主服务器,从服务器,缓存服务器
主服务器 :在特定区域内具有唯一性,负责维护该区域内的域名与ip对应关系 从服务器 : 从主服务器中获得域名与ip对应关系并维护,以防主服务器宕机等情况 缓存服务器 : 通过向其他域名解析服务器查询获得域名与ip的对应关系,提高重复查询的效率
查询时分为递归查询和迭代查询
递归查询 :用于客户机向dns服务器查询 迭代查询 :用于dns服务器向其他dns服务器查询
在linux下BIND 是主流的域名服务程序,安全可靠,快捷高效。还支持chroot 监牢安全机制,chroot机制会限制bind服务程序仅能对自身配置文件进行操作。从而保证整个服务器的安全。
安装bind服务程序
yum -y install bind-chroot
在bind服务程序中有下面三个比较关键的配置文件
主配置文件:/etc/named.conf
## 文件内的参数用来定义bind服务程序的运行。
区域配置文件: /etc/name.rfc1912.zones
## 用来保存域名和IP地址对关系的所在位置。定义了域名和IP地址解析规则保存的文件位置以及服务类型等,而没有包括具体的域名和IP地址对应关系等信息。服务类型有三种,分别为 hint(根区域) master(主区域) slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。
数据配置文件目录: /etc/named
## 该目录用来保存域名和IP地址真实对应关系的数据配置文件
修改配置文件/etc/name.conf 内容
listen-on port 53 { any; }; ## 改为any的话允许监听任何ip地址
allow-query{ any; }; ## 改为any,代表允许任何主机查询
正向解析实验
第一步:在配置文件/etc/named.rfc1912.zones下添加以下内容
zone "hjk56.com" IN {
type master; ## 服务类型 分为hint(根区域) master(主区域)slave(辅助区域)
file "hjk56.com.zone"; ## 域名与ip地址解析规则保存的文件位置
allow-update { none; }; ## 允许那些客户机动态更新解析信息
};
第二步:编辑数据配置文件。
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls -al named.localhost
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
[root@localhost named]# cp -a named.localhost hjk56.com.zone
## -a 参数 保留原始文件的所有者、所有组、权限属性等信息
[root@localhost named]# vim hjk.com.zone
$TTL 1D ## 生存周期为1天
@ IN SOA hjk56.com. root.hjk56.com. (
## 授权信息开始 ## DNS区域的地址 ## 域名管理员的邮箱
0 ; serial ## 更新序列号
1D ; refresh ## 更新时间
1H ; retry ## 重试延时
1W ; expire ## 失效时间
3H ) ; minimum ## 无效解析记录的缓存时间
NS ns.hjk56.com. ## 域名服务器记录
ns IN A 192.168.100.10 ## 地址记录 ns.hjk56.com
IN MX 10 mail.hjk56.com. ## 邮箱交换记录
mail IN A 192.168.100.10 ## 地址记录 mail.hjk56.com
www IN A 192.168.100.10 ## 地址记录 www.hjk56.com
bbs IN A 192.168.100.20 ## 地址记录 bbs.hjk56.com
tech IN A 192.168.200.10 ## 地址记录 tech.hjk56.com
第三步:重启服务
systemctl restart named
第四步:验证正向解析结果
[root@localhost named]# nslookup
> www.hjk56.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.hjk56.com
Address: 192.168.100.10
> mail.hjk56.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: mail.hjk56.com
Address: 192.168.100.10
> bbs.hjk56.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: bbs.hjk56.com
Address: 192.168.100.20
> tech.hjk56.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: tech.hjk56.com
Address: 192.168.200.10
>
反向解析实验
第一步:在配置文件/etc/named.rfc1912.zones下添加以下内容
zone "100.168.192.in-addr.arpa" IN {
## 表示198.168.100.0/24 网段的反向解析区域 ip 必须反写 ,后面要跟in-addr.arpa
type master;
file "192.168.100.arpa";
};
第二步:编辑数据配置文件。
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls -al named.loopback
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
[root@localhost named]# cp -a named.loopback 192.168.100.arpa
## -a 参数 保留原始文件的所有者、所有组、权限属性等信息
[root@localhost named]# vim 192.168.100.arpa
$TTL 1D
@ IN SOA hjk56.com. root.hjk56.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.hjk56.com.
ns A 192.168.100.10
10 PTR ns.hjk56.com. ## PTR 为指针记录,仅用于反向解析
10 PTR www.hjk56.com.
20 PTR bbs.hjk56.com.
20 PTR mail.hjk56.com.
第三步:重启服务
systemctl restart named
第四步:反向解析验证
[root@localhost named]# nslookup
> 192.168.100.10
10.100.168.192.in-addr.arpa name = ns.hjk56.com.
10.100.168.192.in-addr.arpa name = www.hjk56.com.
> 192.168.100.20
20.100.168.192.in-addr.arpa name = mail.hjk56.com.
20.100.168.192.in-addr.arpa name = bbs.hjk56.com.
>
部署从服务器
主服务器IP:192.168.100.10
从服务器IP:192.168.100.77
第一步:在主服务器/etc/named.rfc1912.zones区域配置文件中允许从服务器的更新请求,即修改allow-udpdate{允许更新区域信息的主机地址;;};。
zone "hjk56.com" IN {
type master;
file "hjk56.com.zone";
allow-update { 192.168.100.77; };
};
zone "100.168.192.in-addr.arpa" IN {
type master;
file "192.168.100.arpa";
allow-update { 192.168.100.77; };
};
[root@localhost named]# systemctl restart named
第二步:在从服务器/etc/named.rfc1912.zones文件中添加以下内容
zone "hjk56.com" IN {
type slave; ## 设置服务类型为 从slave
masters { 192.168.100.10; }; ## 设置主的IP为主服务器IP地址
file "slaves/hjk56.com.zone"; ## 定义的是同步数据配置文件后要保存的位置
};
zone "100.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.100.10; };
file "slaves/192.168.100.arpa";
};
[root@localhost named]# systemctl restart named
第三步:验证解析结果,在从服务器上操作
[root@localhost named]# ls slaves/
192.168.100.arpa hjk56.com.zone
[root@localhost named]# nslookup
> 192.168.100.10
10.100.168.192.in-addr.arpa name = www.hjk56.com.
10.100.168.192.in-addr.arpa name = ns.hjk56.com.
> www.hjk56.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.hjk56.com
Address: 192.168.100.10
>
安全的加密传输
互联网中的绝大多数DNS服务器(超过95%)都是基于BIND域名解析服务搭建的,而bind服务程序为了提供安全的解析服务,已经对TSIG(RFC 2845)加密机制提供了支持。TSIG主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即TSIG加密机制保证了DNS服务器之间传输域名区域信息的安全性。
第一步:在主服务器中生成密钥。dnssec-keygen命令用于生成安全的DNS服务密钥,其格式为“dnssec-keygen [参数]”。
[root@localhost /]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
Kmaster-slave.+157+47790
## -a 指定加密算法,包括RSAMD(RSA)、RSASHA1、DSA、NSEC3RSSASHA1、NSEC3DSA等
## -b 密钥长度(HMAC-MD5的密钥长度在1~512位之间)
## -n 密钥的类型(HOST表示与主机相关)
[root@localhost /]# ls -la Kmaster-slave.+157+47790.*
-rw-------. 1 root root 56 6月 12 15:32 Kmaster-slave.+157+47790.key ## 公钥
-rw-------. 1 root root 165 6月 12 15:32 Kmaster-slave.+157+47790.private ## 私钥
[root@localhost /]# cat Kmaster-slave.+157+47790.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: 8L4iAs4RyXe15AMG/gBT2w==
Bits: AAA=
Created: 20220612133235
Publish: 20220612133235
Activate: 20220612133235
第二步:在主服务器中创建密钥验证文件。进入bind服务程序用于保存配置文件的目录,把刚刚生成的密钥名称、加密算法和私钥加密字符串按照下面格式写入到tansfer.key传输配置文件中。为了安全起见,我们需要将文件的所属组修改成named,并将文件权限设置得要小一点,然后把该文件做一个硬链接到/etc目录中。
[root@localhost named]# cd chroot/etc/
[root@localhost etc]# vim transfer.key
key "master-slave"{ #密钥名称
algorithm hmac-md5; #加密算法
secret "8L4iAs4RyXe15AMG/gBT2w=="; #私钥加密字符串
};
[root@localhost etc]# chown root:named transfer.key
[root@localhost etc]# chmod 640 transfer.key
[root@localhost etc]# ln transfer.key /etc/transfer.key
第三步:开启并加载Bind服务的密钥验证功能。首先需要在主服务器的主配置文件中加载密钥验证文件,然后进行设置,使得只允许带有master-slave密钥认证的DNS服务器同步数据配置文件。
在/etc/named.conf 内添加:
include "/etc/transfer.key" #密钥验证文件必须在/etc目录
allow-transfer { key master-slave; }; #只允许拥有该密钥验证文件的人进行同步
重启主服务器的named
systemctl restart named
第四步:配置从服务器,使其支持密钥验证。配置DNS从服务器和主服务器的方法大致相同,都需要在bind服务程序的配置文件目录中创建密钥认证文件,并设置相应的权限,然后把该文件做一个硬链接到/etc目录中。
[root@localhost named]# cd chroot/etc/
[root@localhost etc]# vim transfer.key
key "master-slave"{ #密钥名称
algorithm hmac-md5; #加密算法
secret "8L4iAs4RyXe15AMG/gBT2w=="; #私钥加密字符串
};
[root@localhost etc]# chown root:named transfer.key
[root@localhost etc]# chmod 640 transfer.key
[root@localhost etc]# ln transfer.key /etc/transfer.key
第五步:开启并加载从服务器的密钥验证功能。这一步的操作步骤也同样是在主配置文件中加载密钥认证文件,然后按照指定格式写上主服务器的IP地址和密钥名称。注意,密钥名称等参数位置不要太靠前,大约在第43行比较合适,否则bind服务程序会因为没有加载完预设参数而报错:
在/etc/named.conf内添加
include "/etc/transfer.key"
server 192.168.100.10 # 指明主服务器的IP地址和密钥名称
{
keys { master-server; };
}
第六步:DNS从服务器同步域名区域数据。现在,两台服务器的bind服务程序都已经配置妥当,并匹配到了相同的密钥认证文件。接下来在从服务器上重启bind服务程序,可以发现又能顺利地同步到数据配置文件了。
[root@localhost named]# systemctl restart named
[root@localhost named]# ls slaves/
192.168.100.arpa hjk56.com.zone
部署缓存服务器
DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器。简单来说,缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存在主机本地,从而提升下次解析的效率。DNS缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛。而且,缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关,因此当前仅需了解即可。
此实验很简单,配置不会有错,但为什么客户机不能解析dns,很大原因可能出在上级DNS服务器不允许同步DNS信息。上级DNS服务器地址指的是获取数据配置文件的服务器。
缓存服务器准备两张网卡,一张桥接(能上外网),一张仅主机模式(只能主机间通信),客户机只有一张仅主机模式网卡。只要客户机能解析外网的DNS,就说明一定是由缓存服务器提供域名解析服务的。
缓存服务器需要做的:配置bind服务程序的主配置文件,添加缓存转发参数,重启bind服务。
在/etc/named.conf 下添加
forwarders { 8.8.8.8; }; ## 上级DNS服务器地址最好ping测试下,ping通再用
客户机需要做的:修改网卡参数,把DNS地址改为缓存服务器的IP,重启网卡。