Linux CentOS 8(DNS的配置与管理)
目录
- 一、DNS相关知识
- 1.1 DNS简介
- 1.2 DNS的解析原理
- 1.3 DNS解析
- 二、DNS服务器部署
- 2.1 不使用chroot模式启动DNS
- 2.2 使用chroot模式DNS
- 三、DNS配置文件详解
- 3.1 主配文件详解
- 3.2 区域数据库文件详解
- 四、项目实施
- 4.1 主DNS
- 4.2 辅助DNS(DNS服务器冗余)
- 4.3 转发DNS
- 4.4 智能DNS
一、DNS相关知识
1.1 DNS简介
DNS
DNS域名系统(英文:Domain Name System)是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS协议运行在UDP协议之上,使用端口号53。
域名
域名是一个网站的逻辑地址,比如www.baidu.com,相比IP地址更加方便人类记忆,所以被广泛使用。
域名管理机构
Internet 域名与地址管理机构(ICANN)是为承担域名系统管理,IP地址分配,协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构.现由IANA和其他实体与美国政府约定进行管理。域名分国际域名和国内域名两种,对于国际域名而言,其命名规则是:域名可以由(a-z、A-Z大小写等价)26个英文字母、数字(0-9)以及连接符“-”组成,但是域名的首位必须是字母或数字。对于域名的长度也有一定的限制:国际通用顶级域名长度不得超过26个字符,中国国家顶级域名长度不得超过20个字符。
1.2 DNS的解析原理
目前,因特网的命名方法是层次树状结构的方法。采用这种命名方法,任何一个连接在因特网上的主机或设备,都有一个某一层次结构的名字,即域名(domain name)。域是名字空间中一个可被管理的划分。域可以继续按层次划分为子域,如二级域、三级域等等,如图1所示。
1.3 DNS解析
递归解析
主机向本地域名服务器的解析,一般都是采用递归解析。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
迭代解析
本地域名服务器向根域名服务器的查询,通常是采用迭代解析。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。
域名的解析也分为正向解析和反向解析。正向解析为:将域名解析为IP;反向解析为:将IP解析为域名。
二、DNS服务器部署
DNS服务是由bind
程序提供的,所以要实现DNS服务就需要安装bind
程序包。
[root@localhost ~]# yum install bind bind-chroot -y
DNS主程序包
bind-chroot
是DNS的安全包,可以改变默认DNS根目录,将DNS运行在监牢模式。bind-chroot
是 bind 的一个功能,使 bind 可以在一个chroot
的模式下运行。也就是说,bind 运行时的/
(根)目录,并不是系统真正的/
(根)目录,只是系统中的一个子目录而已。这样做的目的是为了提高安全性。因为在 chroot 的模式下,bind 可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中。bind 的默认启动方式就是 chroot 方式。Bind Chroot DNS 服务器的默认“监牢”为 /var/named/chroot
。
DNS的守护进程叫做named
,DNS是以named
用户身份来运行,named
用户在安装包的时候会在系统中自动创建。
注:CentOS8 安装了 bind-chroot
之后,若要使用 named-chroot.service
,则需要关闭 named.service
。两者只能运行一个。
2.1 不使用chroot模式启动DNS
[root@localhost ~]# systemctl enable --now named \\启动服务并设置开机自启
[root@localhost ~]# lsof -i :53 \\启动验证
2.2 使用chroot模式DNS
[root@localhost ~]# cp -r /var/named/data /var/named/chroot/var/named/ \\复制对应的文件到chroot根目录
[root@localhost ~]# cp -r /var/named/dynamic /var/named/chroot/var/named/
[root@localhost ~]# cp -p /var/named/named.* /var/named/chroot/var/named/
[root@localhost named]# chown -R named.named *
[root@localhost ~]# systemctl enable --now named-chroot.service \\启动服务并设置开机自启1
三、DNS配置文件详解
默认情况下,如果不安装bind-chroot
这个包,配置文件的路径如下:
配置文件:/etc/named.conf
区域数据库文件:/var/named/
安装了bind-chroot
这个用于改变默认DNS配置文件的路径的包,所以相对应的配置文件的路径也发生了变化。
变化如下:
配置文件:/var/named/chroot/etc/named.conf
区域数据库文件:/var/named/chroot/var/named/
3.1 主配文件详解
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options
{
listen-on port 53 { 127.0.0.1; }; \\ IPv4监听端口为53,只允许本机连接
listen-on-v6 port 53 { ::1; }; \\ IPv6监听端口为53,只允许本机连接
directory "/var/named"; \\定义工作目录
dump-file "data/cache_dump.db"; \\ CACHE文件路径,指定服务器在收到rndc dump命令时,转储数据到文件的路径。默认cache_dump.db
statistics-file "data/named_stats.txt"; \\静态文件路径,指定服务器在收到rndc stats命令时,追加统计数据的文件路径。默认named_stats.txt
memstatistics-file "data/named_mem_stats.txt"; \\内存静态文件路径,服务器在退出时,将内存统计写到文件的路径。默认named_mem_stats.txt
secroots-file "data/named.secroots"; \\在收到rndc secroots指令后,服务器转储安全根的目的文件的路径名。默认named.secroots
recursing-file "data/named.recursing"; \\指定服务器在通过rndc recursing命令指定转储当前递归请求到的文件路径。默认named.recursing
allow-query { localhost; }; \\指定哪些主机可以查询,可以是any/none
allow-query-cache { localhost; }; \\指定允许哪些主机可以对缓存的访问
recursion yes; \\开启递归
dnssec-enable yes; \\开启DNSSEC在权威或者递归服务器之间信任服务
dnssec-validation yes; \\开启DNSSEC验证在递归服务器
managed-keys-directory "/var/named/dynamic"; \\指定目录,其中保存着跟踪被管理DNSSEC密钥文件。默认为工作目录。
pid-file "/run/named/named.pid"; \\ PID文件路径
session-keyfile "/run/named/session.key"; \\ session-keyfile文件路径
};
Logging \\开启DNS日志记录
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { \\定义一个根域
type hint; \\域类型为hint(根域),还有master(主要域)/slave(辅助域)/forward(转发域)等类型
file "/var/named/named.ca"; \\区域数据库文件路径
};
};
include "/etc/named.rfc1912.zones"; \\包含两个子配置文件
include "/etc/named.root.key";
3.2 区域数据库文件详解
正向解析
[root@localhost ~]# vim /var/named/named.localhost
$TTL 1D \\缓存时间
@ IN SOA @ rname.invalid. (
\\解析的域名 类型 授权域 授权域名服务器 管理员邮箱
0 ; serial \\序列号,每次更新该文件系列号都应该变大
1D ; refresh \\刷新时间, 从域名服务器多长时间查询一个主服务器
1H ; retry \\重试时间,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试
1W ; expire \\过期时间,从服务器在向主服务更新失败后多长时间后清除对应的记录
3H ) ; minimum \\缓存服务器不能与主服务联系上后多长时间清除相应的记录
NS @ \\ NS 名称服务器,表示这个主机为域名服务器
A 127.0.0.1 \\主机头 A记录 IP
AAAA ::1 \\解析为IPV6地址
反向解析
[root@localhost ~]# vim /var/named/named.loopback
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
PTR localhost \\ IP PTR(反向指针) 主机名
四、项目实施
4.1 主DNS
实验要求:
对jan16.com
域名做解析,解析要求如下:
www
解析为A
记录 IP地址为 1.1.1.1
,并设置反向解析
news
做别名解析CNAME
解析为 www
DNS服务器配置:
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
zone "jan16.com" IN {
type master;
file "jan16.com.zone";
};
zone "1.1.1.in-addr.arpa" IN {
type master;
file "1.1.1.zone";
allow-update { none; };
};
[root@localhost named]# cp -p named.localhost jan16.com.zone \\保留源文件的权限和属主的属性复制
[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# vim jan16.com.zone
$TTL 1D
jan16.com. IN SOA ns1.jan16.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.jan16.com.
A 127.0.0.1
AAAA ::1
ns1 A 192.168.159.138 \\此为DNS的IP地址,做正向解析
www A 1.1.1.1
news CNAME www
[root@localhost named]# cp -p named.loopback 1.1.1.zone
[root@localhost named]# vim 1.1.1.zone
$TTL 1D
1.1.1.in-addr.arpa. IN SOA ns1.jan16.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.jan16.com.
1 PTR www.jan16.com.
客户端验证:
host
采用非交互式解析,
nslookup
可以采用交互或非交互式解析
dig
显示详细的解析流程,在dig
解析中,后面跟上+trace
来显示详细解析流程
[root@localhost named]# vim /etc/resolv.conf
nameserver 192.168.159.138
[root@localhost named]# nslookup www.jan16.com
Server: 192.168.159.138
Address: 192.168.159.138#53
Name: www.jan16.com
Address: 1.1.1.1
[root@localhost named]# nslookup 1.1.1.1
1.1.1.1.in-addr.arpa name = www.jan16.com.
4.2 辅助DNS(DNS服务器冗余)
DNS服务器在网络中为全世界的服务器提供了域名解析服务,扮演着至关重要的角色。网络中的某台DNS一旦宕机,就会造成部分域名无法解析,用户无法顺利访问到对应的服务器。但是我们学习的过程中也发现了,我们的DNS部署在单台服务器上,如果出现单点故障,我们可以通过部署多台相同解析的DNS来解决单点故障,即辅助DNS。这样就算一台DNS服务器出现问题,也不会影响解析服务。
辅助DNS是从主DNS拉取区域数据库文件的,当主DNS解析的域名对应的区域数据库文件发生变化,辅助就会去找主DNS拉取新的区域数据库文件,保证和主的解析一致,而且是自动的不需要人为干预的,确保了主从DNS的区域数据库文件的一致性。
实验要求:
实现辅助DNS的搭建
DNS服务器配置:
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
zone "jan16.com" IN {
type slave; \\类型写slave 代表辅助
file "jan16.com.zone";
masters { 192.168.159.138; }; \\设置主DNS IP地址,向该IP的主机去同步数据
};
zone "1.1.1.in-addr.arpa" IN {
type slave;
file "1.1.1.zone";
masters { 192.168.159.138; };
};
[root@localhost ~]# systemctl restart named-chroot
[root@localhost ~]# ll /var/named/chroot/var/named/ \\可以看到复制过来的区域数据库配置文件
total 24
-rw-r--r--. 1 named named 232 Jun 15 09:31 1.1.1.zone
drwxr-x---. 2 named named 23 Jun 15 08:47 data
drwxr-x---. 2 named named 60 Jun 15 09:31 dynamic
-rw-r--r--. 1 named named 376 Jun 15 09:31 jan16.com.zone
-rw-r-----. 1 named named 2253 Jun 15 08:44 named.ca
-rw-r-----. 1 named named 152 May 27 16:49 named.empty
-rw-r-----. 1 named named 152 May 27 16:49 named.localhost
-rw-r-----. 1 named named 168 May 27 16:49 named.loopback
drwxr-x---. 2 root root 6 Jun 15 09:25 slaves
客户端验证:
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.159.144
[root@localhost ~]# nslookup www.jan16.com
Server: 192.168.159.144
Address: 192.168.159.144#53
Name: www.jan16.com
Address: 1.1.1.1
[root@localhost ~]# nslookup 1.1.1.1
1.1.1.1.in-addr.arpa name = www.jan16.com.
4.3 转发DNS
在DNS客户端提交解析申请到转发DNS服务器的时候,该服务器会将请求转发至配置文件中指定的非根DNS服务器进行解析,然后将解析的结果发至客户端并缓存到本地,因此,转发DNS服务器在这种意义上也算一种缓存服务器。并且转发DNS服务器可以选择完全转发或条件转发两种转发方式:
完全转发:所有客户机请求都直接扔给指定的非根DNS服务器进行解析。
条件转发:将某个域的解析申请转发至指定的非根DNS服务器进行解析。
实验要求:
实现DNS完全转发的搭建
DNS服务器配置:
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
forward only; \\递归转发
forwarders { 192.168.159.138; }; \\转发到的DNS服务器IP
};
[root@localhost ~]# systemctl restart named-chroot
客户端验证:
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.159.144
[root@localhost ~]# nslookup www.jan16.com
Server: 192.168.159.144
Address: 192.168.159.144#53
Name: www.jan16.com
Address: 1.1.1.1
[root@localhost ~]# nslookup 1.1.1.1
1.1.1.1.in-addr.arpa name = www.jan16.com.
实验要求:
实现DNS条件转发的搭建
DNS服务器配置:
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
zone "jan16.com" IN { \\需要转发的域
type forward;
forward only;
forwarders { 192.168.159.138; };
};
zone "1.1.1.in-addr.arpa" IN {
type forward;
forward only;
forwarders { 192.168.159.138; };
};
[root@localhost ~]# systemctl restart named-chroot
客户端验证:
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.159.144
[root@localhost ~]# nslookup www.jan16.com
Server: 192.168.159.144
Address: 192.168.159.144#53
Name: www.jan16.com
Address: 1.1.1.1
[root@localhost ~]# nslookup 1.1.1.1
1.1.1.1.in-addr.arpa name = www.jan16.com.
4.4 智能DNS
在我们访问WEB的时候,发现有的网站打开的速度非常快,有的网站打开的非常慢,这是为什么呢?原因就是很多公司为了提升用户的体验,在公司的网站上使用了CDN内容加速服务,使用户可以直接在本地城市的服务器上浏览数据。CDN我们可以暂且理解为本地缓存服务器即可,本章不作扩展。那用户是如何准确找到用户所在城市的本地缓存服务器的呢?原因在于很多CDN公司的DNS服务使用了智能解析功能,可以根据用户的源IP判断是属于哪个城市,然后再把本地的缓存服务器解析给用户,用户便可以在本城市的服务器上获取数据了。
智能解析原理:在DNS中植入全世界的IP库以及IP对应的地域,当用户来请求解析时,DNS会根据其源IP来定位他属于哪个区域,然后去找这个区域的 view 视图查询对应的域名的区域数据库文件做解析。从而使得不同地域的用户解析不同。
实验要求:
对jan16.com
域名做智能解析:
广州的用户解析IP为 1.1.1.1
北京的用户解析IP为 2.2.2.2
其他用户解析为 3.3.3.3
DNS服务器配置:
[root@localhost ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
acl gz { 192.168.159.138; }; \\定义IP库,DNS根据IP库判断源IP属于哪个区域
acl bj { 192.168.159.144; };
view gz { \\根据地域定义视图,将该区域的客户端的解析请求都由该视图中的zone来解析
match-clients { gz; };
zone "jan16.com" IN {
type master;
file "jan16.com.gz.zone";
};
};
view bj {
match-clients { bj; };
zone "jan16.com" IN {
type master;
file "jan16.com.bj.zone";
};
};
view other {
match-clients { any; };
zone "jan16.com" IN {
type master;
file "jan16.com.any.zone";
};
};
/* \\使用view需要把所有zone都放在view中,所以将其他涉及到zone的都注释
Zone “.” IN {
Type hint;
File “named.ca”;
};
*/
#include "/etc/named.rfc1912.zones";
[root@localhost named]# cp -p jan16.com.bj jan16.com.gz.zone
[root@localhost named]# cp -p jan16.com.bj jan16.com.bj.zone
[root@localhost named]# cp -p jan16.com.bj jan16.com.any.zone
[root@localhost named]# vim jan16.com.gz.zone
$TTL 1D
jan16.com. IN SOA ns1.jan16.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.jan16.com.
A 127.0.0.1
AAAA ::1
ns1 A 192.168.159.138
www A 1.1.1.1
news CNAME www
[root@localhost named]# vim jan16.com.bj.zone
$TTL 1D
jan16.com. IN SOA ns1.jan16.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.jan16.com.
A 127.0.0.1
AAAA ::1
ns1 A 192.168.159.138
www A 2.2.2.2
news CNAME www
[root@localhost named]# vim jan16.com.any.zone
$TTL 1D
jan16.com. IN SOA ns1.jan16.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.jan16.com.
A 127.0.0.1
AAAA ::1
ns1 A 192.168.159.138
www A 3.3.3.3
news CNAME www
客户端验证:
在IP为192.168.159.138
的客户机验证:
[root@localhost ~]# nslookup www.jan16.com
Server: 192.168.159.138
Address: 192.168.159.138#53
Name: www.jan16.com
Address: 1.1.1.1
在IP为192.168.159.144
的客户机验证:
[root@localhost ~]# nslookup www.jan16.com
Server: 192.168.159.138
Address: 192.168.159.138#53
Name: www.jan16.com
Address: 2.2.2.2
制作成员: 泽明
排版: 裕新
初审: 杨佳佳
复审: 五廿八