文章目录
前言
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
一:DNS服务基础
DNS服务软件BIND(Berkeley Internet Name Domain,伯克利因特网域名)
服务:可通俗理解为主配置文件+运行脚本
1.1:DNS系统的作用及类型
1.1.1:DNS系统的作用
DNS系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名与IP地址的对应关系,以便为客户程序提供正向或者反向的地址查询服务,及正向解析和反向解析
正向解析:根据主机名称(域名,如www.baidu.com)查找对应的IP地址
反向解析:(一般维护的时候使用)根据IP地址查找对应的主机域名
DNS系统的分布式数据结构
分析www.sina.com.cn
部分 解释
www 主机位
sina 二级域名
com.cn 顶级域名
. 根域名
1.1.2:DNS系统的类型
实际上,每一台DNS服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和IP地址的对应关系,这些特定的DNS域或IP地址段称为“zone”(区域)
根据地址解析的方向不同,DNS区域相应地分为正向区域(包含域名到IP地址的解析记录,)和反向区域(包含IP地址到域名的解析记录)
根据所管理的区域数据的来源不同,DNS系统可以分为不同的类型。
在同一台DNS服务器中,相对于不同的区域来说,也拥有不同的身份。
1.2常见的DNS服务器几种类型
1.2.1缓存域名服务器
只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。
构建缓存域名服务器时,必须设置根域或者指定其他DNS服务器作为解析来源
主域名服务器
维护某一个特定DNS区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器,官方服务器。
构建主域名服务器时,需要自行建立所负责区域的地址数据文件
从域名服务器
与主域名服务器提供完全相同的DNS解析服务,通常用于DNS服务器的热备份。
构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库
二 . BIND 的安装和控制
2.1 BIND 的安装
BIND 不是唯一能够提供域名服务的 DNS 服务程序,但它却是应用最为广泛的,BIND 可以运行在大多数 Linux/UNIX 主机中。其官方站点位于 https://www.isc.org/。
1.安装 BIND 软件
在 CentOS 系统中, 系统光盘自带了 BIND 服务的安装文件, 主要包括以下几个软件包。
bind-9.9.4-37.el7.x86_64.rpm。
bind-utils-9.9.4-37.el7.x86_64.rpm。
bind-libs-9.9.4-37.el7.x86_64.rpm。
bind-chroot-9.9.4-37.el7.x86_64.rpm。各软件包的主要作用如下。
bind:提供了域名服务的主要程序及相关文件。
bind-utils:提供了对 DNS 服务器的测试工具程序,如 nslookup 等。
bind-libs:提供了 bind、bind-utils 需要使用的库函数。
bind-chroot:为 BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为 BIND 服务的根目录),以提高安全性。
默认已安装 bind-utils 和 bind-libs,因此只需要安装 bind 和 bind-chroot 即可。
[root@localhost Server]# rpm -qa | grep "^bind" //查询是否已安装与BIND 相关的软件包
bind-utils-9.9.4-37.el7.x86_64 bind-license-9.9.4-37.el7.noarch bind-libs-lite-9.9.4-37.el7.x86_64 bind-9.9.4-37.el7.x86_64
bind-libs-9.9.4-37.el7.x86_64 bind-chroot-9.9.4-37.el7.x86_64
2.2.BIND 服务控制
BIND 软件包安装完毕以后,会自动增加一个名为 named 的系统服务,通过 systemctl 工具可以控制 DNS 域名服务的运行。例如,执行以下操作可以查询 named 服务的运行状态。
[root@localhost ~]# systemctl status named
●named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: inactive (dead)
2.3BIND 服务的配置文件
使用 BIND 软件构建域名服务时,主要涉及两种类型的配置文件:主配置文件和区域数据文件。其中,主配置文件用于设置 named 服务的全局选项、注册区域及访问控制等各种运行参数;区域数据文件用于存放某个 DNS 区域的地址解析记录(正向记录或反向记录)。
1.主配置文件
主配置文件 named.conf 通常位于/etc/目录下,在 named.conf 文件中,主要包括全局配置、区域配置两个部分,每一条配置记录的行尾以分号“;”表示结束,以“#”号或“//”开始的部分表示注释文字(大段注释可以使用“/* …… */”的格式)。
1)全局配置部分
全局配置参数包括在形如“options { };”的大括号中,如可以设置监听的地址和端口、区域数据文件存放的目录、允许哪些客户机查询等。
options {
listen-on port 53 { 173.16.16.1; }; //监听地址和端口
directory "/var/named"; //区域数据文件的默认存放位置allow-query { 192.168.1.0/24; 173.16.16.0/24;}; //允许使用本DNS 服务的网段
};
上述配置内容中,除了 directory 配置项通常会保留以外,其他的配置项都可以省略。
若不指定 listen-on 配置项,则 named 默认在所有接口的 UDP 53 端口监听服务;若不指定
allow-query 配置项,则默认会响应所有客户机的查询请求。
2)区域配置部分
区域配置参数使用“zone …… { };”的配置格式,一台 DNS 服务器可以为多个区域提供解析,因此在 named.conf 文件中也可以有多个 zone 配置段。区域类型按照解析方向可分为正向区域、反向区域。
zone "dfzr.com" IN { //正向"dfzr.com"区域type master; //类型为主区域
file "dfzr.com.zone"; //区域数据文件为dfzr.com.zone allow-transfer { 173.16.16.2; }; //允许下载的从服务器地址
};
zone "16.16.173.in-addr.arpa" IN { //反向"173.16.16.0/24"区域type master;
file "173.16.16.arpa"; //区域数据文件为 173.16.16.arpa
};
在上述配置内容中,有几个地方需要注意:
每个 zone 区域都是可选的(包括根域、回环域、反向域),具体根据实际需要而定,zone 配置部分的“IN”关键字也可以省略。
反向区域的名称由倒序的网络地址和“.in-addr.arpa” 组合而成。例如, 对于
192.168.1.0/24 网段,其反向区域名称表示为“1.168.192.in-addr.arpa”。
file 配置项用于指定实际的区域数据文件,文件名称由管理员自行设置。
区域配置中的部分参数(如 allow-transfer)也可以放在全局配置中。
修改完主配置文件以后,可以执行“named-checkconf”命令对 named.conf 文件进行语法检查。如果文件中没有语法错误,该命令将不给出任何提示;反之,则会给出相应的提 示信息,然后根据出错提示修正文件中的错误即可。带“-z”选项的“named-checkconf”命令还可以尝试加载主配置文件中对应的区域数据库文件,并检查该文件是否存在问题。例 如,当出现“…file not found”的错误时,表示找不到对应的文件。
[root@localhost ~]# named-checkconf -z /etc/named.conf
zone dfzr.com/IN: loading from master file dfzr.com.zone failed: file not found zone dfzr.com/IN: not loaded due to errors.
_default/dfzr.com/IN: file not found
…… //省略部分内容
关于 named.conf 文件中各种配置项的详细说明,可以执行“man named.conf”命令查看手册页,也可参考配置样本文件/usr/share/doc/bind-9.9.4/sample/etc/named.conf。
2.区域数据配置文件
区域数据配置文件通常位于/var/named/目录下,每个区域数据文件对应一个 DNS 解析区域,文件名及内容由该域的管理员自行设置。
根域“.”的区域数据文件比较特殊。Internet 中所有的 DNS 服务器都使用同一份根区域数据文件,其中列出了所有根服务器的域名和 IP 地址。根区域数据文件可以从国际互联网络信息中心(InterNIC)的官方网站地址 http://www.internic.net/下载。
在区域数据文件中,主要包括 TTL(Time To Live,生存时间)配置项、SOA(Start Of Authority,授权信息开始)记录、地址解析记录。文件中的注释信息以“;”(分号)开始。
1)TTL 配置及 SOA 记录部分
第一行的 TTL 配置用于设置默认生存周期,即缓存解析结果的有效时间。SOA 记录部分用于设置区域名称、管理邮箱,以及为从域名服务指定更新参数。
$TTL 86400 //有效解析记录的生存周期
@ IN SOA dfzr.com. admin.dfzr.com.( //SOA 标记、域名、管理邮箱
2011030501 //更新序列号,可以是10 位以内的整数
3H //刷新时间,重新下载地址数据的间隔
15M //重试延时,下载失败后的重试间隔
1W //失效时间,超过该时间仍无法下载则放弃
1D //无效解析记录的生存周期
)
上述配置内容中,时间单位默认为秒(s),也可以使用 M(分)、H(时)、W(周)、D
( 天) 等单位。文件中的“@” 符号表示当前的 DNS 区域名, 相当于“dfzr.com.” 或“admin.dfzr.com.”,表示域管理员的电子邮箱地址(由于“@”符号已有其他含义,因此将电 子邮件地址中的“@”用“.”代替)。SOA 记录中的更新序列号用来同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
2)地址解析记录部分
地址解析记录用来设置 DNS 区域内的域名、IP 地址映射关系,包括正向解析记录和反向解析记录。反向解析记录只能用在反向区域数据文件中。
@ IN NS ns1.dfzr.com.
IN MX 10 mail.dfzr.com.
ns1 IN A 58.119.74.203
www IN A 173.16.16.1
mail IN A 173.16.16.4
ftp IN CNAME www
上述配置内容中,用到以下四种常见的地址解析记录。
NS(Name Server,域名服务器):记录当前区域的 DNS 服务器的主机地址。
MX(Mail Exchange,邮件交换):记录当前区域的邮件服务器的主机地址,数字 10 表示(当有多个 MX 记录时)选择邮件服务器的优先级,数字越大,优先级越低。
A(Address,地址):记录正向解析条目。例如,“www IN A 173.16.16.1”表示域名 www.dfzr.com 对应的 IP 地址是 173.16.16.1。
CNAME(Canonical Name,别名):记录某一个正向解析条目的其他名称。例如, “ftp IN CNAME www”表示域名 ftp.dfzr.com 是 www.dfzr.com 的别名。
其中,NS、MX 记录行首的“@”符号可以省略(默认继承 SOA 记录行首的@信息),但是必须保留一个空格或 Tab 制表符。
在反向区域数据文件中,不会用到 A 记录,而是使用 PTR 指针(Point)记录。例如, 对于反向区域 16.16.173.in-addr.arpa,添加的反向解析记录可以是以下形式。
1 IN PTR www.dfzr.com.
4 IN PTR mail.dfzr.com.
使用 PTR 记录时,第一列只需要指明对应 IP 地址的“主机地址”部分即可,如“1”或“4” 等,系统在查找地址记录时会自动将当前反向域的网络地址作为前缀。例如,上述文件中的 “4 IN PTR mail.dfzr.com.”表示 IP 地址为 173.16.16.4 的主机的域名是 mail.dfzr.com.。
在区域数据配置文件中,凡是不以点号“.”结尾的主机地址,系统在查找地址记录时都会
自动将当前的域名作为后缀。例如,若当前的 DNS 域为“dfzr.com”,则在文件中的主机地址“www”相当于“www.dfzr.com.”。因此,当使用完整的 FQDN(Fully Qualified Domain Name,完全合格域名/全称域名)地址时,务必记得地址末尾的点号“.”不能省略。
修改完区域数据文件以后,可以执行“named-checkzone”命令对该文件进行语法检查。依次指定区域名称、数据文件名作为参数。如果文件中没有语法错误,系统将给出“OK”的提示信息。例如,若要检查 DNS 区域 dfzr.com 的区域数据文件 dfzr.com.zone,可以执行以下操作。
[root@localhost ~]# cd /var/named/
[root@localhost named]# named-checkzone dfzr.com dfzr.com.zone
zone dfzr.com/IN: loaded serial 2011030501 OK
当一台服务器需要同时承载某个 DNS 区域内的许多个不同的域名(如 IDC 的虚拟主机服务器、提供个人主页空间的网站服务器等)时,可以在区域数据文件的最后一行添加泛域 名解析记录,即使用“*”以匹配任意主机名。
* IN A 173.16.16.173
2.4使用 BIND 构建域名服务器
在前面的章节中学习了 DNS 服务器的相关基础知识、BIND 软件包的安装,以及 DNS 服务器的配置文件组成、配置格式等。下面分别讲解构建缓存域名服务器、主域名服务器、 从域名服务器的基本过程。
2.4.1构建缓存域名服务器
缓存域名服务器通常架设在公司的局域网内,主要目的是提高域名解析的速度,减少对 互联网访问的出口流量。例如,在一个小型企业的内部网络(图 3.1)中,可单独建立一台
(或集成在网关主机中)缓存域名服务器,为各部门的员工计算机提供 DNS 解析服务。
缓存域名服务器的应用环境
参考上述网络结构,本小节案例使用的基本环境和要求如下所述。
缓存域名服务器的 IP 地址为 192.168.1.5,并能够正常访问互联网。
缓存域名服务器代为处理客户端的 DNS 解析请求,并缓存查询结果。
局域网内的各 PC 将首选 DNS 服务器地址设为 192.168.1.5。下面讲解使用 BIND 构建此缓存域名服务器的基本步骤。
1.建立主配置文件 named.conf
若使用范本文件创建 named.conf,应注意修改或删除默认的监听设置、查询控制,以便能够为局域网段的客户机提供服务。另外,logging、view 配置部分一般用不到,可以先注释以避免其干扰。
[root@localhost ~]# vi /etc/named.conf
options {
listen-on port 53 { 192.168.1.5; }; 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";
query-source port 53;
allow-query { 192.168.1.0/24; }; recursion yes;
};
zone "." IN { //正向"."根区域
type hint; //类型为根区域
file "named.ca"; //区域数据文件为named.ca
};
上述配置内容中,dump-file、statistics-file 等配置项用于指定缓存数据库文件、状态统计文件的位置。添加了“zone ‘.’ IN { };”部分的根区域设置,尽管缓存服务器并没有自主控制的区域数据,但可以向根服务器进行迭代查询,并将最终获得的解析结果反馈给客户。
有时候为了提高解析效率,也可以不向根区域查询,而是将来自客户端的查询请求转发给国内电信运营商的 DNS 服务器(如北京的 202.106.0.20、202.106.148.1),缓存服务器收到返回的查询结果后再传递给客户端。只要去掉“zone ‘.’ IN {……};”的设置,并在全局配置中正确设置 forwarders 参数即可实现该功能,具体操作如下:
[root@localhost ~]# vi /etc/named.conf
options {
…… //省略部分内容
forwarders { 202.106.0.20; 202.106.148.1; };
};
2.确认根域的区域数据文件 named.ca
根区域的区域数据文件默认位于文件/var/named/named.ca 中,该文件记录了 Internet
中 13 台根域服务器的域名和 IP 地址等相关信息。
3.启动 named 服务
执行“systemctl start named”命令,启动 named 服务,并通过 netstat 命令确认 named 服务的端口监听状态。若服务启动失败或发现没有正常监听 UDP 53 端口,可以根据错误提示信息(或者/var/log/messages 文件中的日志记录)排除错误,然后重启服务即可。
[root@localhost ~]# systemctl start named
[root@localhost ~]# netstat -anpu | grep named
udp 0 0 192.168.1.5:53 0.0.0.0:* 11687/named
udp 0 0 0.0.0.0:53 0.0.0.0:* 11687/named
4.验证缓存域名服务器
在局域网内的客户机中,将首选 DNS 服务器的地址设为 192.168.1.5,生效后,执行“nslookup www.google.com”命令对其进行解析,验证其是否能够获得该域名对应的 IP 地址信息。
三.正向解析实验
[root@shanan ~]# vi /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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
[root@shanan ~]# vi /etc/named.rfc1912.zones
19 zone "hello.com" IN {
20 type master;
21 file "hello.com.zone";
22 allow-update { none; };
23 };
[root@shanan named]# vi hello.com.zone
[root@shanan named]# echo "nameserver 192.168.100.48" > /etc/resolv.conf
[root@shanan named]# netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.100.48:53 0.0.0.0:* LISTEN 9844/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 9844/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8516/sshd
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 9844/named
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 8807/master
tcp 0 52 192.168.100.48:22 192.168.100.1:58252 ESTABLISHED 9720/sshd: root@pts
tcp6 0 0 ::1:53 :::* LISTEN 9844/named
tcp6 0 0 :::22 :::* LISTEN 8516/sshd
tcp6 0 0 ::1:953 :::* LISTEN 9844/named
tcp6 0 0 ::1:25 :::* LISTEN 8807/master
开始解析测试
[root@shanan named]# host www.hello.com
www.hello.com has address 192.168.66.66
[root@shanan named]# host mail.hello.com
mail.hello.com has address 192.168.88.88
[root@shanan named]# host smtp.hello.com
smtp.hello.com is an alias for mail.hello.com.
mail.hello.com has address 192.168.88.88
[root@shanan named]# host abc.hello.com
abc.hello.com has address 6.6.6.6
四. 反向解析测试实验
[root@shanan named]# vi /etc/named.rfc1912.zones
[root@shanan named]# vi hello.com.zone
反向解析测试
[root@shanan named]# systemctl restart named
[root@shanan named]# host 192.168.66.66
66.66.168.192.in-addr.arpa domain name pointer www.hello.com.
五 .主从复制实验
[root@ shanan slaves]# vi hello.com.zone
[root@ shanan slaves]# pwd
/var/named/slaves
[root@ shanan slaves]# rm -rf * 清空从服务器数据配置
[root@ shanan slaves]#
[root@ shanan slaves]# systemctl restart named 重新启动bind
[root@ shanan slaves]# host www.hello.com 重新解析
www.hello.com has address 192.168.66.66 解析成功
root@shanan named]# systemctl restart named 重启bind服务
[root@shanan named]# host ftp.hello.com 解析
ftp.hello.com has address 192.168.77.77 解析成功
下面在从服务器测试
[root@ shanan slaves]# rm -rf *
[root@ shanan slaves]# systemctl restart named
[root@ shanan slaves]# ls
hello.com.zone
[root@ shanan slaves]# host ftp.hello.com
ftp.hello.com has address 192.168.77.77 解析成功
cat /dev/null > /var/named/slaves/hello.com.zone 清空文件内容
systemctl reload named 重新加载 bind 服务
[root@shanan named]# systemctl restart named
[root@shanan named]# host aaa.hello.com
aaa.hello.com has address 6.6.6.6
六 .分离解析实验
Vi/etc/sysctl.conf 修改主服务器,开启路由功能
[root@shanan named]# cd /var/named
[root@shanan named]# ls
chroot data dyndb-ldap named.ca named.localhost slaves
chroot_sdb dynamic hello.com.zone named.empty named.loopback
[root@shanan named]# cp -p named.localhost hello.com.wan 创建配置数据文件
[root@shanan named]# cp -p named.localhost hello.com.lan 创建配置数据文件
[root@shanan named]# ls
chroot data dyndb-ldap hello.com.wan named.ca named.localhost slaves
chroot_sdb dynamic hello.com.lan hello.com.zone named.empty named.loopback
[root@shanan named]# vi hello.com.wan
[root@shanan named]# vi hello.com.lan