您现在的位置是:首页 >技术杂谈 >第十一章 使用Bind提供域名解析服务网站首页技术杂谈
第十一章 使用Bind提供域名解析服务
第十一章 使用Bind提供域名解析服务
一、DNS域名解析服务
1、DNS简介
为了降低用户访问网络资源的门槛,DNS(Domain Name System)域名系统技术应运而生。这是一项用于管理和解析域名与IP地址对应关系的技术,简单来说,就是能够接受用户输入的域名或IP地址,然后自动查找与之匹配(或者说具有映射关系)的IP地址或域名,即将域名解析为IP地址(正向解析),或将IP地址解析为域名(反向解析)。这样一来,只需要在浏览器中输入域名就能打开想要访问的网站了。DNS域名解析技术的正向解析也是最常使用的一种工作模式。
DNS域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。所谓递归查询,是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。而迭代查询则是指,DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
2、服务器类型
主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。
从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防止主服务器宕机等清况。
缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
3、13台根DNS服务器的具体信息
13台根域服务器并非真的是指只有13台服务器,没有那台服务器能独立承受住如此大的请求量。实际上用于根域名的服务器总共有504台,它们从A到M进行了排序,共用13个IP地址以此进行负载均衡,抵抗分布式拒绝服务攻击(DDoS)的影响。
名称 | 管理单位 | 地理位置 | IP地址 |
---|---|---|---|
A | INTERNIC.NET | 美国-弗吉尼亚州 | 198.41.0.4 |
B | 美国信息科学研究所 | 美国-加利福尼亚州 | 128.9.0.107 |
C | PSINet公司 | 美国-弗吉尼亚州 | 192.33.4.12 |
D | 马里兰大学 | 美国-马里兰州 | 128.8.10.90 |
E | 美国航空航天管理局 | 美国-加利福尼亚州 | 192.203.230.10 |
F | 因特网软件联盟 | 美国-加利福尼亚州 | 192.5.5.241 |
G | 美国国防部网络信息中心 | 美国-弗吉尼亚州 | 192.112.36.4 |
H | 美国陆军研究所 | 美国-马里兰州 | 128.63.0.53 |
I | Autonomica公司 | 瑞典-斯德哥尔摩 | 192.36.148.17 |
J | VeriSign公司 | 美国-弗吉尼亚州 | 192.58.128.30 |
K | RIPE NCC | 英国-伦敦 | 193.0.14.129 |
L | IANA | 美国-弗吉尼亚州 | 199.7.83.42 |
M | WIDE Project | 日本-东京 | 202.12.27.33 |
二、安装Bind服务程序
1、Bind简介
BIND (Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
2、Bind安装
[root@centos ~]# yum install bind-chroot
CentOS-8.5.2111 - Base - mirrors.ali 31 kB/s | 3.9 kB 00:00
CentOS-8.5.2111 - Extras - mirrors.a 8.8 kB/s | 1.5 kB 00:00
CentOS-8.5.2111 - AppStream - mirror 45 kB/s | 4.3 kB 00:00
依赖关系解决。
=====================================================================
软件包 架构 版本 仓库 大小
=====================================================================
安装:
bind-chroot x86_64 32:9.11.26-6.el8 AppStream 104 k
安装依赖关系:
bind x86_64 32:9.11.26-6.el8 AppStream 2.1 M
事务概要
=====================================================================
安装 2 软件包
总下载:2.2 M
安装大小:4.5 M
确定吗?[y/N]: y
下载软件包:
(1/2): bind-chroot-9.11.26-6.el8.x86 249 kB/s | 104 kB 00:00
(2/2): bind-9.11.26-6.el8.x86_64.rpm 2.3 MB/s | 2.1 MB 00:00
---------------------------------------------------------------------
总计 2.4 MB/s | 2.2 MB 00:00
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
运行脚本: bind-32:9.11.26-6.el8.x86_64 1/2
安装 : bind-32:9.11.26-6.el8.x86_64 1/2
运行脚本: bind-32:9.11.26-6.el8.x86_64 1/2
安装 : bind-chroot-32:9.11.26-6.el8.x86_64 2/2
运行脚本: bind-chroot-32:9.11.26-6.el8.x86_64 2/2
验证 : bind-32:9.11.26-6.el8.x86_64 1/2
验证 : bind-chroot-32:9.11.26-6.el8.x86_64 2/2
已安装:
bind-32:9.11.26-6.el8.x86_64 bind-chroot-32:9.11.26-6.el8.x86_64
完毕!
3、关键配置文件
主配置文件(/etc/named.conf):只有59行,而且在去除注释信息信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
数据配置文件目录(/var/named):该目录用来保存域名和IP地址真是对应关系的数据配置文件。
4、修改主配置文件
//复制为备份文件
[root@centos ~]# cp /etc/named.conf /etc/named.conf.bak
//删除注释重定向源文件
[root@centos ~]# grep -v "//" /etc/named.conf.bak > /etc/named.conf
//将127.0.0.1和localhost改为any
[root@centos ~]# vim /etc/named.conf
1 options {
2 listen-on port 53 { any; };
3 listen-on-v6 port 53 { ::1; };
4 directory "/var/named";
5 dump-file "/var/named/data/cache_dump.db";
6 statistics-file "/var/named/data/named_stats.txt";
7 memstatistics-file "/var/named/data/named_mem_stats.txt";
8 secroots-file "/var/named/data/named.secroots";
9 recursing-file "/var/named/data/named.recursing";
10 allow-query { any; };
5、正向解析实验
(1)、编辑区域配置文件
//可以将文件中原有信息全部删除也可以在配置文件底下添加
//复制为备份文件
[root@centos ~]# cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
//删除源文件
[root@centos ~]# rm -rf /etc/named.rfc1912.zones
//创建并编辑新的区域配置文件
[root@centos ~]# vim /etc/named.rfc1912.zones
zone "aaa.com" IN {
type master;
file "aaa.com.zone";
allow-update {none;};
};
(2)、编辑数据配置文件
//复制正向解析的模板文件并重命名
[root@centos ~]# cp -a /var/named/named.localhost /var/named/aaa.com.zone
//编辑数据配置文件
[root@centos ~]# vim /var/named/aaa.com.zone
$TTL 1D //生成周期为1天
@ IN SOA aaa.com. root.aaa.com. (
//授权信息开始 //DNS区域的地址 //域名管理员的邮箱(不要用@符号)
0 ; serial //更新序列号
1D ; refresh //更新时间
1H ; retry //重试延时
1W ; expire //失效时间
3H ) ; minimum //无效解析记录的缓存时间
NS ns.aaa.com. //域名服务器记录
ns IN A 192.168.10.10 //地址记录(ns.aaa.com)
www IN A 192.168.10.10 //地址记录(www.aaa.com)
//重启服务并设置开机自启动
[root@centos ~]# systemctl start named && systemctl enable named
(3)、域名解析记录类型
记录类型 | 作用 |
---|---|
A | 将域名指向一个IPv4地址 |
CNAME | 将域名指向另一个域名 |
AAAA | 将域名指向一个IPv6地址 |
NS | 将子域名指向其他DNS服务器解析 |
MX | 将域名指向邮件服务器地址 |
SRV | 记录提供特定的服务的服务器 |
TXT | 文本内容一般为512字节,常作为反垃圾邮件的SPF记录 |
CAA | CA证书颁发机构授权校验 |
显性URL | 将域名重定向到另一个地址 |
隐性URL | 与显性URL类型,但是会隐藏真实目标地址 |
(4)、检验解析结果
//DNS地址改为本机IP地址
[root@centos ~]# nmtui
//重连网卡
[root@centos ~]# nmcli connection up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
//检验解析结果
[root@centos ~]# nslookup www.aaa.com
Server: 192.168.10.10
Address: 192.168.100.10#53
Name: www.aaa.com
Address: 192.168.10.10
[root@centos ~]# nslookup ns.aaa.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: ns.aaa.com
Address: 192.168.10.10
6、反向解析实验
(1)、编辑区域配置文件
[root@centos ~]# vim /etc/named.rfc1912.zones
zone "10.168.192.in-addr.apra" IN {
type master;
file "192.168.10.arpa";
allow-update {none;};
};
(2)、编辑数据配置文件
//复制一份反向解析模板文件
[root@centos ~]# cp -a /var/named/named.loopback /var/named/192.168.10.arpa
//编辑数据配置文件
[root@centos ~]# vim /var/named/192.168.10.arpa
$TTL 1D
@ IN SOA aaa.com. root.aaa.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.aaa.com.
ns A 192.168.10.10
10 PTR ns.aaa.com. //PTR为指针记录,仅用于反向解析中。
10 PTR www.aaa.com.
//重启服务
[root@centos ~]# systemctl restart named
(3)、检验解析结果
[root@centos ~]# nslookup 192.168.10.10
10.10.168.192.in-addr.arpa name = www.aaa.com
三、部署从服务器
1、编辑区域配置文件
//在主服务器的区域配置文件中允许该从服务器的更新请求
[root@centos ~]# vim /etc/named.rfc1912.zones
zone "aaa.com" IN {
type master;
file "aaa.com.zone";
allow-update {192.168.10.20;};
};
zone "10.168.192.in-addr.apra" IN {
type master;
file "192.168.100.arpa";
allow-update {192.168.10.20;};
};
//重启服务
[root@centos ~]# systemctl restart named
2、配置防火墙
[root@centos ~]# iptables -F
[root@centos ~]# firewall-cmd --zone=public --add-service=dns --permanent
success
[root@centos ~]# firewall-cmd --reload
success
3、从服务器上安装bind-chroot并配置文件
//安装bind-chroot
[root@centos ~]# yum install bind-chroot
//编辑文件
//将127.0.0.1和localhost改为any
[root@centos ~]# vim /etc/named.conf
1 options {
2 listen-on port 53 { any; };
3 listen-on-v6 port 53 { ::1; };
4 directory "/var/named";
5 dump-file "/var/named/data/cache_dump.db";
6 statistics-file "/var/named/data/named_stats.txt";
7 memstatistics-file "/var/named/data/named_mem_stats.txt";
8 secroots-file "/var/named/data/named.secroots";
9 recursing-file "/var/named/data/named.recursing";
10 allow-query { any; };
4、编辑区域文件
//在从服务器的区域配置文件中允许该从服务器的更新请求
[root@centos ~]# vim /etc/named.rfc1912.zones
type slave;
masters { 192.168.10.10; };
file "slaves/aaa.com.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.10; };
file "slaves/192.168.10.arpa";
};
//重启服务
[root@centos ~]# systemctl restart named
5、检验解析结果
//DNS地址改为本机IP地址
[root@centos ~]# nmtui
//重连网卡
[root@centos ~]# nmcli connection up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
//检验解析结果
[root@centos ~]# nslookup www.aaa.com
Server: 192.168.10.20
Address: 192.168.10.20#53
Name: www.aaa.com
Address: 192.168.10.10
[root@centos ~]# nslookup 192.168.10.10
10.10.168.192.in-addr.arpa name = www.aaa.com
四、安全的加密传输
1、删除从服务器中slaves文件夹下所有文件
[root@centos ~]# rm -rf /var/named/slaves/*
2、在主服务器中生成密钥
(1)、dnssec-keygen命令
dnssec-keygen命令用于生成安全的DNS服务密钥。
命令格式:dnssec-keygen [参数]
(2)、dnssec-keygen命令的常用参数
参数 | 作用 |
---|---|
-a | 指定加密算法 |
-b | 密钥长度 |
-n | 密钥类型 |
(3)、生成密钥
//生成一个主机名称为master-slave的128位HMAC-MD5算法的密钥文件
[root@centos ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
Kmaster-slave.+157+03622
//查看私钥文件
[root@centos ~]# cat Kmaster-slave.+157+03622.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: t3rFQFQ0T5EBDtMvK6/oGg==
Bits: AAA=
Created: 20230512043136
Publish: 20230512043136
Activate: 20230512043136
3、在创建密钥验证文件
//创建密钥验证文件
[root@centos ~]# vim /var/named/chroot/etc/transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "t3rFQFQ0T5EBDtMvK6/oGg==";
};
//修改文件所属组
[root@centos ~]# chown root:named /var/named/chroot/etc/transfer.key
//修改文件权限
[root@centos ~]# chmod 640 /var/named/chroot/etc/transfer.key
//把该文件做一个硬链接到/etc目录
[root@centos ~]# ln /var/named/chroot/etc/transfer.key /etc/transfer.key
4、编辑主服务器的主配置文件
//编辑主配置文件
[root@centos ~]# 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; };
allow-transfer { key master-slave; };
//重启服务
[root@centos ~]# systemctl restart named
5、清空同步的数据配置文件
//清空同步的数据配置文件
[root@centos ~]# rm -rf /var/named/slaves/*
//重启服务
[root@centos ~]# systemctl restart named
6、配置从服务器
//创建密钥验证文件
[root@centos ~]# vim /var/named/chroot/etc/transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "t3rFQFQ0T5EBDtMvK6/oGg==";
};
//修改文件所属组
[root@centos ~]# chown root:named /var/named/chroot/etc/transfer.key
//修改文件权限
[root@centos ~]# chmod 640 /var/named/chroot/etc/transfer.key
//把该文件做一个硬链接到/etc目录
[root@centos ~]# ln /var/named/chroot/etc/transfer.key /etc/transfer.key
7、开机并加载从服务器的密钥验证功能
//编辑主配置文件
[root@centos ~]# 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.
//
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; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
server 192.168.10.10 {
keys { master-slave; };
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
//重启服务
[root@centos ~]# systemctl restart named
8、检验解析结果
//从服务器检验解析结果
[root@centos ~]# nslookup www.aaa.com
Server: 192.168.10.20
Address: 192.168.10.20#53
Name: www.aaa.com
Address: 192.168.10.10
[root@centos ~]# nslookup 192.168.10.10
10.10.168.192.in-addr.arpa name = www.aaa.com
五、部署缓存服务器
1、缓存服务器简介
DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器。简单来说,缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存在主机本地,从而提升下次解析的效率。DNS缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛。而且,缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关,因此当前仅需了解即可。
2、配置系统双网卡
主机名称 | 操作系统 | IP地址 |
---|---|---|
缓存服务器 | Centos | 网卡(外网):ens192—根据物理设备的网络参数进行配置 网卡(内网):ens160—192.168.10.10 |
客户端 | Centos | 192.168.10.20 |
3、编辑主配置文件
//客户端编辑著配置文件,添加缓存转发参数
[root@centos ~]# 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 { 8.8.8.8; };
//重启服务
[root@centos ~]# systemctl restart named
4、配置防火墙
//如果系统是最初始状态
[root@centos ~]# iptables -F
[root@centos ~]# iptables-save
[root@centos ~]# firewall-cmd --zone=public --add-service=dns --permanent
success
[root@centos ~]# firewall-cmd --reload
success
5、设置客户端主机的DNS服务器地址
//重启网卡
[root@centos ~]# nmcli connection up ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
6、检验解析结果
[root@centos ~]# nslookup www.linuxprobe.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Non-authoritative answer:
Name: www.linuxprobe.com
Address: 39.98.160.175
六、分离解析技术
1、设备环境
主机名称 | 操作系统 | IP地址 |
---|---|---|
DNS服务器 | Centos | 中国网络:122.71.115.10 美国网络:106.185.25.10 |
北京用户 | Windows10 | 122.71.115.1 |
海外用户 | Windows10 | 106.185.25.1 |
2、拓扑图
3、编辑主配置文件
//删除根域信息
zone "." IN {
type hint;
file "named.ca";
};
4、编辑区域配置文件
[root@centos ~]# vim /etc/named.rfc1912.zones
acl "china" { 122.71.115.0/24; };
acl "USA" { 106.185.25.0/24; };
view "china"{
match-clients { "china"; };
zone "linuxprobe.com" {
type master;
file "linuxprobe.com.china";
};
};
view "USA"{
match-clients { "USA"; };
zone "linuxprobe.com" {
type master;
file "linuxprobe.com.china";
};
};
5、编辑数据配置文件
//复制正向解析的模板文件并重命名
[root@centos ~]# cp -a /var/named/named.localhost /var/named/china
[root@centos ~]# cp -a /var/named/named.localhost /var/named/USA
//编辑数据配置文件
[root@centos ~]# vim /var/named/china
$TTL 1D
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
//授权信息开始 //DNS区域的地址 //域名管理员的邮箱(不要用@符号)
0 ; serial //更新序列号
1D ; refresh //更新时间
1H ; retry //重试延时
1W ; expire //失效时间
3H ) ; minimum //无效解析记录的缓存时间
NS ns.linuxprobe.com. //域名服务器记录
ns IN A 122.71.115.10 //地址记录(ns.linuxprobe.com)
www IN A 122.71.115.15 //地址记录(www.linuxprobe.com)
//编辑数据配置文件
[root@centos ~]# vim /var/named/USA
$TTL 1D
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
//授权信息开始 //DNS区域的地址 //域名管理员的邮箱(不要用@符号)
0 ; serial //更新序列号
1D ; refresh //更新时间
1H ; retry //重试延时
1W ; expire //失效时间
3H ) ; minimum //无效解析记录的缓存时间
NS ns.linuxprobe.com. //域名服务器记录
ns IN A 106.185.25.10 //地址记录(ns.linuxprobe.com)
www IN A 106.185.25.15 //地址记录(www.linuxprobe.com)
//重启服务
[root@centos ~]# systemctl restart named
6、检验解析结果