DNS正解区域文件
在DNS中,我们知道有域和区域的概念,域的英文名称是domain,它是一种逻辑概念;而区域英文全称zone,它是一种物理概念。且zone分为正解区域和反解区域
正解区域:提供正向解析的服务,即FQDN-->IP的过程
反解区域:提供反向解析的服务,即IP-->FQDN的过程
不管好似正解区域还是反解区域,都通过了一个配置文件,这个文件中的每一个条目就是一个资源记录(Resource Record,RR)。
资源记录的类型主要有这些,且这些资源记录的格式为:
SOA:起始授权记录(Start Of Authority ),定义数据文件是为哪个区域创建的
格式:
ZONE_NAME TTL IN SOA (主DNS)FQDN ADMINISTRATOR_MAILBOX (
serial number
refresh
retry
expire
nagitive TTL )
说明:TTL是某个解析记录保存在DNS服务器上面的有效时长,可以省略。如果每个资源记录的TTL一样,可以在该文件中的最前面这样声明即可:TTL 600
切记SOA记录必须是文件中的第一个资源记录条目,可以出现在正解和反解区域文件中
这里的邮件地址不能使用@符号,@符号在这里表示为域名。因此邮件地址一般这样写:
admin.xsl.com.
例如:写一个SOA的资源记录条目
xsl.com. 600 IN SOA ns.xsl.com. admin.xsl.com. (
2014082001
1H
5M
1W
1D )
注意:这里的单位可以是分钟(M),小时(H),天(D),周(W),默认单位是秒
NS:Name Server,NS记录表示的是某个域内的DNS服务器,因此它的格式是这样的:
ZONE_NAME TTL IN NS NS_FQDN
NS_FQDN TTL IN A IP
由于NS记录是指定DNS服务器的,因此这里需要指定某个域内的DNS服务器的是谁?这个服务器的ip地址是什么。因此需要两条记录。
这里的A表示的是A记录,格式就是上面的。
例如:在这里写一个NS记录的例子:
xsl.com. TTL IN NS ns1.xsl.com. #这里的域名可以使用@表示
xsl.com. TTL IN NS ns2.xsl.com.
ns1.xsl.com. TTL IN A 1.1.1.1 #其实这里的主机名也可以省略,即写ns1
ns2.xsl.com. TTL IN A 2.2.2.2
A:Address,A记录是定义某个主机(FQDN)到ipv4的过程,格式在上面已经说过,这里不再写了。
不过要说明的时,A记录只能出现在正解区域文件中。
AAAA:这个也是A记录,不过定义的是FQDN到ipv6的过程
MX:Mail eXchanger,这是邮件资源记录。由于邮件服务器可能有多个,因此我们使用优先级pri来判断优先选择使用哪个邮件服务器。优先级pri范围是0-99,数字越小越优先
邮件资源记录条目一般定义在正解区域文件中
邮件资源记录的格式和NS资源记录的格式大致相同:
ZONE_NAME TTL IN MX PRI FQDN
FQDN TTL IN A IP
例如:在这里写个MX资源记录的例子:
xsl.com. 600 IN MX 10 mail.xsl.com.
mail.xsl.com. 600 IN A 3.3.3.3
CNAME:Canonical NAME,一般之出现在正解区域文件中
格式是:
FQDN(new) TTL IN CNAME FQDN(old)
例如:mail.xsl.com.这个主机的别名为ml.xsl.com.
ml.xsl.com 600 IN CNAME mail.xsl.com(这个是真名)
PTR:domain name pointer ,这是一个反向解析的资源记录,只能出现在反解区域文件中。
格式是:IP.in-addr.arpa TTL IN PTR FQDN
例如:192.168.20.10的域名为www.xsl.com.,可以这么写:
10.20.168.192.in-addr.arpa 600 IN PTR www.xsl.com.
例如:以192.168.20.10的主机名是www.xsl.com.为了建立DNS反解区域文件
.20.168.192.in-addr.arpa 600 IN SOA ns1.xsl.com. admin.xsl.com. (
2014082101
1H
10M
1D
1D )
10.20.168.192.in-addr.arpa 600 IN PTR www.xsl.com.
刚刚说个区域分为正解和反解区域。这只不过是从查询角度来说的,如果从传输数据的角度来划分,那么区域类型可以这么划分:
主区域:Master,定义主服务器的区域
从区域:Slave,定义从服务器的区域
提示区域:hint,定义根域DNS服务器的区域
转发区域:forword,定义转发到某个DNS服务器的区域
其中这些区域包含正解区域或者反解区域。懂了吗?
在这里手动演示建立一个DNS服务器
1、环境需求:作者使用的是RHEL5.8的系统
2、软件需求:由于目前使用DNS的软件大多使用的bind这个软件,因此,在这里我们也使用bind这个软
件来搭建一个DNS服务器。目前bind软件最新的是bind97,而系统默认就安装了bind这个软件,所以
我们再此先卸载系统默认安装的软件。在安装其他的软件。
卸载之前的软件:rpm -e bind-libs
rpm -e bind-utils
安装新版的bind软件:yum install bind97-libs
yum install bind97
yum install bind97-utils
3、安装完成了上述3个软件后,系统默认会生成DNS的配置文件(/etc/named/named.conf)
在这里,我们不使用默认的配置文件,直接手动生成。
重命名DNS配置文件:mv /etc/named.conf /etc/named.conf.old
手动生成DNS配置文件:vim /etc/named.conf
options {
directory "/var/named" ; #定义所以区域的数据文件
allow-recursion { 192.168.108.0/24; } #定义可以进行递归查询的网段主机
##option这里可以定义多个工作属性,且全局生效
};
zone "." IN {
type hint ; #指定根服务器的类型,其他DNS服务器只要解析不了的,都会将请求发给根
file "named.ca" ; #指定根服务器的数据文件,这里的数据文件都是使用相对路径
};
zone "localhost" IN {
type master ;
file "named.localhost" ;
};
zone "0.0.127.in-addr.arpa" IN {
type master ;
file "named.loopback" ;
};
zone "xsl.com" IN {
type master ;
file "xsl.com.zone" ;
};
zone "108.168.192.in-addr.arpa" IN {
type master ;
file "108.168.192.in-addr.arpa.zone" ;
};
说明:这里的每一个zone表示的就是一个区域,其中以.in-addr.arpa结尾的表示是反向区域。其中type指定的是区域类型,file表示的是这个区域的数据文件,该数据文件以相对路径来表示。
4、修改DNS的配置文件属主和属组
chown root:named /etc/named.conf
5、手动生成每个区域的数据文件
在这里我不在手动生成本地区域的正解数据文件和反解数据文件。这里只手动生成xsl.com这个区域的正解数据文件。
vim /var/named/xsl.com.zone
$TTL 600
@ IN SOA ns1.xsl.com. admin.xsl.com. (
2014082301
1H
5M
1D
1D )
IN NS ns1.xsl.com.
ns1.xsl.com. IN A 192.168.108.251
www IN A 10.100.10.1
www IN A 10.100.10.2
www IN A 192.168.108.15
ftp IN A 192.168.1.1
ftp IN A 192.168.108.252
mail IN CNAME ftp
6、修改xsl.com.zone这个文件的属主和属组
chown root:named /var/named/xsl.com.zone
不过,在建立完成了DNS服务器之后,要确保SElinux处于关闭状态
使用getenforce可以查看SElinux处在的状态
setenforce 0:关闭SElinux
setenforce 1:开启SElinux
不过在命令行修改的,可以立即生效,但是不会永久生效。要想永久生效,可以修改SELinux的配置文件/etc/selinux/config
修改完成之后,在使用service named restart重启该服务即可
为了验证在创建配置文件和数据文件的准确性,我们可以使用这些命令来检查配置文件和数据文件的语法是否正确:
named-checkconf:如果没有什么其实表示DNS的配置文件的语法是正确的
named-checkzone "区域" 该区域的数据文件 :检查某个区域的数据文件的语法是否正确。
这两个命令是检查语法是否正确的,语法正确不代表这些文件一定是正确的。逻辑错误是检查不出来的。
接下介绍一些关于DNS的命令
dig -t {A|NS|MX} @server_ip
{A|NS|MX}:可以来查看相关资源记录的信息
@server_ip:表示由指定的DNS服务器来负责解析
dig +trace [-t] [-A|-MX|-NS] 主机名 [@server_ip]:跟踪整个解析过程
dig +recurse 主机名 :允许该主机使用递归查询
+norecurse :不允许某主机使用递归查询
nslook 主机名:也可以用来解析主机名,在windows下也可以使用
nslook交互式命令:
nslook回车
server ip #使用指定DNS服务器来负责解析
主机名 #要解析的主机名
host 主机名:也可以用来解析某个主机名
本文出自 “linux学习之路” 博客,谢绝转载!