部署域名解析服务器
- DNS简介
- bind服务器程序
- 编辑bind主配置文件
- 编辑bind区域配置文件
- 部署DNS主服务器
- 正向解析
- 编辑区域配置文件
- 编辑数据配置文件
- 反向解析
- 编辑区域配置文件
- 编辑数据配置文件
- 部署DNS从服务器
- 设置主服务器区域配置文件
- 部署DNS缓存服务器
- 添加缓存转发参数
- DNS安全加密传输
- 主服务器配置
- 主服务器生成密钥
- 主服务器中创建密钥验证文件
- 主服务器开启并加载密钥验证功能
- 从服务器配置
- 配置从服务器支持密钥认证
- 开启并加载从服务器的密钥认证功能
- 重启DNS服务器
DNS简介
DNS是一项用于管理和解析域名与IP地址对应关系的技术。
DNS域名解析服务分为:
- 域名解析为IP地址(正向解析)
- IP地址解析为域名(反向解析)
DNS域名解析服务采用类似目录树的层次结构来记录域名与IP地址之间的关系,从而形成一个分布式的数据库系统。
域名后缀一般分为国际域名和国内域名,严格来说域名后缀都又严格使用范围。
DNS服务器类型:
- 主服务器: 在特定区域内具有唯一性,负责
维护
该区域内的域名与IP地址之间的对应关系 - 从服务器:
从主服务器中获得域名与IP地址的对应关系并进行维护
,以防止主服务器宕机等情况 - 缓存服务器: 通过向他域名解析服务器铲鲟获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询的效率
DNS域名解析服务查询方式:
- 递归查询: DNS服务器接收到用户域名解析请求时,必须得由该服务器向用户给出准确的查询结果,如果本地服务器查询不到则询问其他DNS服务器,再由本服务器对用户给出结果。(
直接查询域名整体,适合在查询域名较少的范围内使用效率更高
) - 迭代查询: DNS服务器接收到用户查询请求之后,不直接返回查询结果,而是从后往前根据域名字段向对应的上一级域名服务器转发请求,通过逐步缩小查询范围来获得查询结果(有点像二分查找算法的思想)
迭代查询示例: 查询www.baidu.com的IP地址
- 本地主机向本机设置的DNS服务器发送查询请求,例如设置的 8.8.8.8 或者 114.114.114.114
- 8.8.8.8 DNS服务器接收到www.baidu.com查询信息后,转发该查询信息到根域DNS服务器
- 根域服务器根据接收到的查询信息,告知 8.8.8.8 DNS服务器向
.com
域服务器查询,并给出.com
域DNS服务器IP地址 - 8.8.8.8 DNS服务器再向
.com
域服务器发送查询请求 -
.com
域DNS服务器接收到查询请求后,告知 8.8.8.8 DNS服务器应向baidu
域DNS服务器进行查询,并给出baidu
域DNS服务器IP地址 - 8.8.8.8 DNS服务器向
baidu
域DNS服务器发送查询请求 -
baidu
域DNS服务器接收到查询请求后,告知 8.8.8.8 DNS服务器应向www
域DNS服务器进行查询,并给出www
域服务器IP地址 - 8.8.8.8 服务器向
www
域DNS服务器进行查询 -
www
域DNS服务器获取查询结果,返回给8.8.8.8 DNS服务器 - 8.8.8.8 DNS服务器向本地主机返回
www.baidu.com
的IP地址
以上只是DNS的迭代查询的自我理解,实际上针对这类经常查询的域名来说,8.8.8.8 DNS域名服务器都是直接通过 8.8.8.8 DNS服务器中的缓存服务器来返回查询结果的。
总结: DNS服务器的迭代查询是通过目录树结构顺序来查找的,类似于二分查找算法
bind服务器程序
BIND(Berkeley Internet Name Domain)是使用范围最广,最可靠的且高效的域名解析服务程序。
注意: 再部署安装时加上chroot(牢笼机制)
扩展包,以限制bind服务程序的操作权限,保障服务器安全
bind程序配置文件
- 主配置文件(/etc/named.conf): 用来定义bind服务程序运行参数
- 区域配置文件(/etc/named.rfc1912.zones ): 保存域名和IP地址的
对应关系所在位置
- 数据配置文件目录: 实际保存域名和IP地址对应关系的数据配置文件
编辑bind主配置文件
[root@MyCentOS ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { any; }; <<<<<服务器上所有IP地址都可以提供域名解析服务
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; }; <<<<<<<<所有人都可向本机发送查询请求
编辑bind区域配置文件
在区域配置文件中,定义了域名于IP地址解析规则保存的文件位置以及服务类型等内容,但不包含具体域名IP对应关系信息。
服务类型:
- hint(根区域)
- master(主区域) ----------> 指主服务器
- slave(辅助区域) ------------>指从服务器
#正向DNS解析
zone "localhost.localdomain" IN {
type master; <<<<<主服务器类型
file "named.localhost"; <<<域名与IP地址对应关系保存的文件
allow-update { none; }; <<<<允许哪些客户端动态更新解析信息
};
#反向DNS解析
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
在编辑配置文件时,可以使用named-checkconf命令和named-checkzone命令,分别检查著配置文件和数据配置文件中的语法或参数错误
部署DNS主服务器
正向解析
根据域名查找对应IP地址
编辑区域配置文件
先将其他配置信息全部注释
#用户编辑的DNS配置
#正向解析
zone "chrisgoudan.com" IN {
type master ;
file "chrisgoudan.com.zone" ;
allow-update{ none; };
};
编辑数据配置文件
在/var/named
目录下有一份名为named.localhost
的数据配置模板文件。
复制该文件并重命名为区域配置文件中file
参数中的名称。
在复制时,使用-a
参数保留原始文件的所有者、所属组、权限属性等信息,一边让bind服务程序顺利读取文件内容。
[root@MyCentOS ~]# cd /var/named
[root@MyCentOS named]# ll
总用量 16
drwxr-x---. 7 root named 61 8月 17 20:20 chroot
drwxrwx---. 2 named named 6 7月 7 22:14 data
drwxrwx---. 2 named named 6 7月 7 22:14 dynamic
-rw-r-----. 1 root named 2253 7月 7 22:14 named.ca
-rw-r-----. 1 root named 152 7月 7 22:14 named.empty
-rw-r-----. 1 root named 152 7月 7 22:14 named.localhost
-rw-r-----. 1 root named 168 7月 7 22:14 named.loopback
drwxrwx---. 2 named named 6 7月 7 22:14 slaves
[root@MyCentOS named]# cp -a named.localhost chrisgoudan.com.zone
[root@MyCentOS named]# ll
总用量 20
-rw-r-----. 1 root named 152 7月 7 22:14 chrisgoudan.com.zone
drwxr-x---. 7 root named 61 8月 17 20:20 chroot
drwxrwx---. 2 named named 6 7月 7 22:14 data
drwxrwx---. 2 named named 6 7月 7 22:14 dynamic
-rw-r-----. 1 root named 2253 7月 7 22:14 named.ca
-rw-r-----. 1 root named 152 7月 7 22:14 named.empty
-rw-r-----. 1 root named 152 7月 7 22:14 named.localhost
-rw-r-----. 1 root named 168 7月 7 22:14 named.loopback
drwxrwx---. 2 named named 6 7月 7 22:14 slaves
编辑数据配置文件
$TTL 1D <<<<生存周期为一天
@ IN SOA chrisgoudan.com. rname.invalid. (
#授权信息开始 #DNS区域的地址 #域名管理员邮箱
更新序列号>>>>>> 0 ; serial
更新时间>>>> 1D ; refresh
重试延时>>>>>>> 1H ; retry
失效时间>>>>>>> 1W ; expire
无效解析记录的缓存时间 >>>>>>>>>>>>>> 3H ) ; minimum
NS dns.chrisgoudan.com. #域名服务器记录,注意最后还有个.号
dns IN A 192.168.127.200
www IN A 192.168.127.200
bbs IN A 192.168.127.100
tech IN A 123.123.123.123
在编辑数据配置文件之前,首先要将服务器的DNS设置为本机DNS服务器的地址。
需要修改的有以下几点
-
[root@MyCentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
将网卡配置文件中的DNS改为本机设置的DNS服务器 -
[root@MyCentOS ~]# vim /etc/resolv.conf
将配置文件中的servername改为本机设置的DNS服务器IP - 使用
nmcli
命令,修改DNS地址 - 重新挂载网卡
nmcli n on ens33
- 重启网络管理
[root@MyCentOS ~]# systemctl restart NetworkManager
- 重启网络
[root@MyCentOS ~]# systemctl restart network-online.target
最后重启DNS服务器如下第一条命令,使用nslookup
命令检测DNS服务器是否部署成功。
[root@MyCentOS ~]# systemctl restart named
[root@MyCentOS ~]# nslookup
> www.chrisgoudan.com
Server: 192.168.127.200
Address: 192.168.127.200#53
Name: www.chrisgoudan.com
Address: 192.168.127.200
> bbs.chrisgoudan.com
Server: 192.168.127.200
Address: 192.168.127.200#53
Name: bbs.chrisgoudan.com
Address: 192.168.127.100
> tech.chrisgoudan.com
Server: 192.168.127.200
Address: 192.168.127.200#53
Name: tech.chrisgoudan.com
Address: 123.123.123.123
>
反向解析
反向解析是将用户提交的IP地址解析为对应的域名信息。
反向解析作用:
- 对某个IP上绑定的域名整体屏蔽,例如针对垃圾邮件
- 判断在该IP上有多少网站正在运行
编辑区域配置文件
定义反向解析zone时应当将IP地址反写,如下所示
[root@MyCentOS ~]# vim /etc/named.rfc1912.zones
#正向解析
zone "chrisgoudan.com" IN {
type master;
file "chrisgoudan.com.zone";
allow-update{ none; };
};
#反向解析
zone "127.168.192.in-addr.arpa" IN { <<<<<IP地址反写
type master;
file "127.168.192.arpa"; <<<数据配置文件名称
};
编辑数据配置文件
[root@MyCentOS ~]# cd /var/named
[root@MyCentOS named]# cat named.loopback > 127.168.192.arpa
[root@MyCentOS named]# vim 127.168.192.arpa
$TTL 1D
@ IN SOA chrisgoudan.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.chrisgoudan.com.
dns A 192.168.127.200
200 PTR www.chrisgoudan.com.
100 PTR bbs.chrisgoudan.com.
重启DNS服务器systemctl restart named
,并使用nslookup查看DNS反向解析
[root@MyCentOS named]# nslookup
> 192.168.127.200
200.127.168.192.in-addr.arpa name = www.chrisgoudan.com.
> 192.168.127.100
100.127.168.192.in-addr.arpa name = bbs.chrisgoudan.com.
部署DNS从服务器
从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录和负载均衡的作用,提高用户查询效率。
部署从服务器需要使用另一条linux系统,不能再同一台linux系统上同时设置DNS主服务器,和DNS从服务器。因为在区域配置文件中主服务器配置和从服务器配置会发生冲突。
设置主服务器区域配置文件
在主服务器区域配置文件中,允许从服务器从主服务器中获得更新请求。
#用户编辑的DNS配置
#DNS主服务器
#正向解析
zone "chrisgoudan.com" IN {
type master;
file "chrisgoudan.com.zone";
allow-update{ 192.168.127.201; };
};
#反向解析
zone "127.168.192.in-addr.arpa" IN {
type master;
file "192.168.127.arpa";
allow-update{ 192.168.127.201; };
};
在从服务器的区域配置文件中设置以下信息,包括正向解析和反向解析
#DNS从服务器
#正向解析
zone "chrisgoudan.com" IN {
type slave; <<<设置为从服务器
masters { 192.168.127.200; }; <<<<设置DNS主服务器
file "slaves/chrisgoudan.com.zone" ; <<<设置从服务器数据文件存放位置
};
#反向解析
zone "127.168.192.in-addr.arpa" IN{
type slave ;
masters { 192.168.127.200; };
file "slaves/192.168.127.arpa";
};
最后重启named
服务器程序即部署完成DNS从服务器。
部署DNS缓存服务器
DNS缓存服务器就是把用户经常使用的域名和IP地址对应关系解析记录保存在主机本地,从而提高下次解析的效率。
同样在部署DNS缓存服务器中也需要使用在另一台linux服务器上进行设置。在DNS缓存服务器中需要使用两块网卡每个网卡使用一个IP地址。其中一个网卡给外网提供DNS查询服务,其中一个网卡给内网提供DNS查询服务。如果部署DNS缓存服务器只是给内部局域网使用,则使用一个网卡给内网提供服务即可。
添加缓存转发参数
在bind服务程序的主配置文件中添加缓存转发参数。
格式: forwarders {上级DNS服务器地址;};
上级DNS服务器地址是指获取数据配置文件的服务器。例如,如果在本地设置了DNS主服务器(DNS从服务器),则将上级服务器设置为本地DNS主服务器(从服务器)。如果没有设置本地DNS服务器,则将上级服务区设置为地区内的DNS服务器,比如如果在北京则设置为设置为北京区域内离自己最近的DNS服务器,区域公共DNS服务器可在网上查找到。
[root@MyCentOS ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
// forwarders{ 上一级DNS服务器IP地址 ;};
重启DNS服务,将本机DNS地址修改为缓存服务器地址即可使用本地的DNS缓存服务。
DNS安全加密传输
bind服务程序为DNS服务器之间传输域名信息提供了TSIG加密机制来保证其安全性。
主服务器配置
主服务器生成密钥
dnssec-keygen 命令
格式: dnssec-keygen [参数]
-----------------------------------------------dnssec-keygen常用参数--------------------------------------------------------
参数 | 作用 |
-a | 指定加密算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等 |
-b | 密钥长度(HMAC-MD5的密钥长度在1~512位之间) |
-n | 密钥类型(HOST表示与主机相关) |
执行该命令后会在当下目录生成一个公钥和一个私钥文件,记录下私钥文件中key
参数后的值下一步需要使用。
主服务器中创建密钥验证文件
- 进入bind服务程序用于保存配置文件的目录
/var/named/chroot/etc/
,把刚刚生成的密钥名称,加密算法和私钥加密字符串按照下面格式写入到tansfer.key
传输配置文件中。 - 将文件的所属组修改成
named
,并将文件权限设置为600 - 将该文件做成一个硬链接到/etc目录中
[root@MyCentOS ~]# vim /etc/named.conf
[root@MyCentOS ~]# cd /var/named/chroot/etc/
[root@MyCentOS etc]# vim tansfer.key
key "master-slave"{
algorithm hmac-md5 ;
secret "之前记录的key参数值";
};
[root@MyCentOS etc]# chown root:named tansfer.key <<<<修改文件所属组
[root@MyCentOS etc]# chmod 600 tansfer.key <<<修改文件权限
[root@MyCentOS etc]# ln tansfer.key /etc/tansfer.key <<<<生成硬链接文件
主服务器开启并加载密钥验证功能
- 在主服务器主配置文件中加载密钥验证文件
- 设置只允许带有master-slave密钥认证的DNS服务器同步数据配置文件
[root@MyCentOS ~]# vim /etc/named.conf
#加载密钥文件
// include "/etc/transfer.key"; 《《《①
options {
listen-on port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
#只允许带密钥认证文件的DNS服务器更新
# allow-transfer{key master-slave;}; <<<<<<<<<<<<<<<②
从服务器配置
配置从服务器支持密钥认证
- 在bind从服务器配置文件目录中创建密钥认证文件
- 设置文件权限600
- 硬链接到/etc目录中
密钥认证文件中的key参数就是主服务器中生成的参数
步骤与主服务器配置一样
开启并加载从服务器的密钥认证功能
- 在从服务器配置文件中加载密钥认证文件
include "/etc/transfer.key" ;
- 在从服务器配置文件中靠后位置添加主服务器IP地址和密钥名称
server 主服务器IP地址{
keys {master-slave;};
};
重启DNS服务器
重启DNS服务器程序即可完成数据同步