红帽7 DNS服务
DNS 域名解析服务
这是一项用于管理和解析域名与 IP 地址对应关系的技术,简单来说,就是能够接受用户输入的域名或 IP 地址,然后自动查找与之匹配(或者说具有映射关系)的 IP 地址或域名,即将域名解析为 IP 地址(正向解析),或将 IP 地址解析为域名(反向解析)。这样一来,我们只需要在浏览器中输入域名就能打开想要访问的网站了。DNS 域名解析技术的正向解析也是我们最常使用的一种工作模式。
最常见的域名后缀有.com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。DNS 技术作为互联网基础设施中重要的一环,为了为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器
主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。
从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况。
缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
简单来说,主服务器是用于管理域名和 IP 地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。DNS 域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。所谓递归查询,是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。而迭代查询则是指,DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。
最高级、最权威的根 DNS 服务器总共有 13 台,分布在世界各地,其管理单位、具体的地理位置,以及 IP 地址如表所示
名称 | 管理单位 | 地理位置 | 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.2.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 服务程序
BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。
[root@localhost Desktop]# yum install bind-chroot Loaded plugins: langpacks, product-id, subscription-manager ………………省略部分输出信息……………… Installing: bind-chroot x86_64 32:9.9.4-14.el7 rhel 81 k Installing for dependencies: bind x86_64 32:9.9.4-14.el7 rhel 1.8 M Transaction Summary =============================================================================== Install 1 Package (+1 Dependent package) Total download size: 1.8 M Installed size: 4.3 M Is this ok [y/d/N]: y Downloading packages: ------------------------------------------------------------------------------- Total 28 MB/s | 1.8 MB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 32:bind-9.9.4-14.el7.x86_64 1/2 Installing : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2 Verifying : 32:bind-9.9.4-14.el7.x86_64 1/2 Verifying : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2 Installed: bind-chroot.x86_64 32:9.9.4-14.el7 Dependency Installed: bind.x86_64 32:9.9.4-14.el7 Complete!
在 bind 服务程序中有下面这三个比较关键的文件
➢ 主配置文件(/etc/named.conf):只有 58 行,而且在去除注释信息和空行之后,实际有效的参数仅有 30 行左右,这些参数用来定义 bind 服务程序的运行。
➢ 区域配置文件(/etc/named.rfc1912.zones):用来保存域名和 IP 地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应 IP 地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
➢ 数据配置文件目录(/var/named):该目录用来保存域名和 IP 地址真实对应关系的数据配置文
在 Linux 系统中,bind 服务程序的名称为 named。首先需要在/etc 目录中找到该服务程序的主配置文件,然后把第 11 行和第 17 行的地址均修改为 any,分别表示服务器上的所有 IP地址均可提供 DNS 域名解析服务,以及允许所有人对本服务器发送 DNS 查询请求。
[root@localhost Desktop]# vim /etc/named.conf ...........省略.............. 8 // 9 10 options { 11 listen-on port 53 { any; }; 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 allow-query { any; }; 18 19 /* 20 - If you are building an AUTHORITATIVE DNS server, do NOT enable re cursion. 21 - If you are building a RECURSIVE (caching) DNS server, you need to enable ............省略..............
bind 服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和 IP地址对应关系的所在位置。在这个文件中,定义了域名与 IP 地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP 地址对应关系等信息。服务类型有三种,分别为 hint(根区域)、master(主区域)、slave(辅助区域),其中常用的 master 和 slave 指的就是主服务器和从服务器。将域名解析为 IP 地址的正向解析参数和将 IP 地址解析为域名的反向解析参数分别如图
正向解析
在 DNS 域名解析服务中,正向解析是指根据域名(主机名)查找到对应的 IP 地址。也就是说,当用户输入了一个域名后,bind 服务程序会自动进行查找,并将匹配到的 IP 地址返
给用户。这也是最常用的 DNS 工作模式。
第一步:编辑区域配置文件。该文件中默认已经有了一些无关紧要的解析参数,旨在让用户有一个参考。我们可以将下面的参数添加到区域配置文件的最下面,当然,也可以将该
文件中的原有信息全部清空,而只保留自己的域名解析信息。
[root@localhost Desktop]# vim /etc/named.rfc1912.zones zone "test.com" IN { type master; file "test.com.zone"; allow-update {none;}; };
第二步:编辑数据配置文件。我们可以从/var/named 目录中复制一份正向解析的模板文件(named.localhost),然后把域名和 IP 地址的对应数据填写数据配置文件中并保存。在复制时记得加上-a 参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让 bind服务程序顺利读取文件内容
[root@localhost Desktop]# cd /var/named/ [root@localhost named]# ls -al named.localhost -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost [root@localhost named]# cp -a named.localhost test.com.zone
[root@localhost named]# systemctl restart named
[root@localhost named]# vim test.com.zone
$TTL 1D
@ IN SOA test.com. root.test.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.test.com.
ns IN A 192.168.10.10
www IN A 192.168.10.10
$TTL 1D | #生存周期为1天 | ||||
@ | IN SOA | test.com. | root.test.com. | ( | |
#授权信息开始: | #DNS区域的地址 | #域名管理员的邮箱(不要用@符号) | |||
0;serial | #更新序列号 | ||||
1D;refresh | #更新时间 | ||||
1H;retry | #重试延时 | ||||
1W;expire | #失效时间 | ||||
3H;)minimum | #无效解析记录的缓存时间 | ||||
NS | ns.test.com. | #域名服务器记录 | |||
ns | IN A | 192.168.10.10 | #地址记录(ns.test.com.) | ||
IN MX 10 | mail.test.com. | #邮箱交换记录 | |||
IN A | 192.168.10.10 | #地址记录(mail.test.com.) | |||
www | IN A | 192.168.10.10 | #地址记录(www.test.com.) | ||
bbs | IN A | 192.168.10.20 | #地址记录(bbs.test.com.) |
第三步:检验解析结果。为了检验解析结果,一定要先把 Linux 系统网卡中的 DNS 地址参数修改成本机 IP 地址,这样就可以使用由本机提供的 DNS 查询服务了。nslookup 命令用于检测能否从 DNS 服务器中查询到域名与 IP 地址的解析记录,进而更准确地检验 DNS 服务器是否已经能够为用户提供服务
[root@localhost named]# systemctl restart network [root@localhost named]# nslookup > www.test.com Server: 192.168.10.10 Address: 192.168.10.10#53 Name: www.test.com Address: 192.168.10.10
反向解析
在 DNS 域名解析服务中,反向解析的作用是将用户提交的 IP 地址解析为对应的域名信息
第一步:编辑区域配置文件。反向解析是把 IP 地址解析成域名格式,因此在定义 zone(区域)时应该要把 IP 地址反写,比如原来是 192.168.10.0,反写后应该就是 10.168.192,而且只需写出 IP 地址的网络位即可。
[root@localhost named]# vim /etc/named.rfc1912.zones zone "test.com" IN { type master; file "test.com.zone"; allow-update {none;}; }; zone "10.168.192.in-addr.arpa" IN{ type master; file "192.168.10.arpa"; };
第二步:编辑数据配置文件。首先从/var/named 目录中复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件中。其中,IP 地址仅需要写主机位。
$TTL 1D | ||||
@ | IN SOA | test.com. | root.test.com. | ( |
0;serial | ||||
1D;refresh | ||||
1H;retry | ||||
1W;expire | ||||
3H);minimum | ||||
NS | ns.test.com. | |||
ns | A | 192.168.10.10 | ||
10 | PTR | ns.test.com. | #PTR为指针记录,仅用于反向解析中。 | |
10 | PTR | mail.test.com. | ||
10 | PTR | www.test.com. | ||
20 | PTR | bbs.test.com. |
[root@localhost named]# cp -a named.loopback 192.168.10.arpa
[root@localhost named]# vim 192.168.10.arpa
$TTL 1D
@ IN SOA test.com. root.test.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.test.com.
ns IN A 192.168.10.10
10 PTR www.test.com.
[root@localhost named]# systemctl restart named
第三步:检验解析结果。由于上面已经把系统网卡中的 DNS 地址参数修改成了本机 IP 地址,因此可以直接使用 nslookup 命令来检验解析结果。
[root@localhost named]# nslookup > 192.168.10.10 Server: 192.168.10.10 Address: 192.168.10.10#53 10.10.168.192.in-addr.arpa name = www.test.com.
部署从服务器
在 DNS 域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率
主服务器与从服务器分别使用的操作系统与 IP 地址信息
主机名称 | 操作系统 | IP地址 |
主服务器 | RHEL 7 | 192.168.10.10 |
从服务器 | RHEL 7 | 192.168.10.20 |
第一步:在主服务器的区域配置文件中允许该从服务器的更新请求,即修改 allow-update {允许更新区域信息的主机地址;};参数,然后重启主服务器的 DNS 服务程序。
[root@localhost Desktop]# vim /etc/named.rfc1912.zones
zone "test.com" IN { type master; file "test.com.zone"; allow-update { 192.168.10.20; }; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.arpa"; allow-update { 192.168.10.20; }; };
[root@localhost Desktop]# systemctl restart named
第二步:在从服务器中填写主服务器的 IP 地址与要抓取的区域信息,然后重启服务。注意此时的服务类型应该是 slave(从),而不再是 master(主)。masters 参数后面应该为主服务器的 IP 地址,而且 file 参数后面定义的是同步数据配置文件后要保存到的位置,稍后可以在该目录内看到同步的文件。(主配置文件的11和17行同上配置)
[root@localhost Desktop]# vim /etc/named.rfc1912.zones
zone "test.com" IN {
type slave;
master { 192.168.10.10; };
file "slaves/test.com.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.10; };
file "slaves/192.168.10.arpa";
};
第三步:检验解析结果。当从服务器的 DNS 服务程序在重启后,一般就已经自动从主服务器上同步了数据配置文件,而且该文件默认会放置在区域配置文件中所定义的目录位置中。随后修改从服务器的网络参数,把 DNS 地址参数修改成 192.168.10.20,这样即可使用从服务器自身提供的 DNS 域名解析服务。最后就可以使用 nslookup 命令顺利看到解析结果了
[root@localhost slaves]# ls
192.168.10.arpa test.com.zo
[root@localhost slaves]# nslookup
> www.test.com
Server: 192.168.10.20
Address: 192.168.10.20#53
Name: www.test.com
Address: 192.168.10.10