您的位置:首页 > 运维架构 > Linux

DNS服务器的搭建

2015-06-12 13:27 495 查看
域名

域名是用一串用点分开的字符串来表示的internet上的某一台或者一组计算机的名称,由于ipv4,ipv6地址很难记忆,我们在访问互联网时,一般用域名加主机名来进行访问,例如:www.google.com,这个后面省略了点(.),完整的格式应该是www.google.com.,走后面的点表示根域,.com为一级域,.google为二级域,www表示这个域中的某一台主机。我们在使用互联网时,要使用ip地址才能访问某一台主机,DNS服务器就为我们提供这个解析服务,将域名解析成ip(正向解析),也可将ip解析为域名(反向解析)。

注意:域名解析通常有两种方式,一种是/etc/hosts文件中的IP地址和域名的直接映射;一种是通过dns服务器来解析,同一个域名默认是先读取hosts文件来解析,如其中无此记录,再转向dns服务器请求解析,两种解析方式的优先级别在/etc/nsswitch.conf中定义:
#hosts:     db files nisplus nis dns
hosts:      files dns                   #file指/etc/hosts


DNS
DNS(Domain Name System)的应用程序位bind,监听在TCP/UDP的53号端口,下面就介绍dns的安装配置:
[root@baby-virt-4 ~]# yum install bind

主配置文件:
/etc/named.conf #主配置文件,里面include了下面2个文件
/etc/named.rfc1912.zones #一般除根之外的区域文件定义都在这里完成
/etc/named.root.key

/etc/rc.d/init.d/named #服务启动脚本,在源码安装时,这个文件没有,需要自己手动编写

/etc/rndc.conf #域名服务远程控制工具的配置文件
/etc/rndc.key #域名服务远程控制工具的密钥控制文件

/usr/sbin/named #主程序
/usr/sbin/named-checkconf #检查/etc/named.conf配置文件的工具
/usr/sbin/named-checkzone #检查区域配置文件的工具

/usr/sbin/rndc #域名服务远程控制工具主程序
/usr/sbin/rndc-confgen #域名服务远程控制工具的密钥生成工具

主配置文件 /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.
//

options {
//listen-on port 53 { 127.0.0.1; };      #指定监听的ip,注释后监听所有ip(ipv4)
//listen-on-v6 port 53 { ::1; };         #ipv6
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";
//allow-query     { localhost; };        #是否允许查询
//recursion yes;    #是否允许递归查询,这个可以在配置了view之后在具体的view中指定

//dnssec-enable yes;
//dnssec-validation yes;
//dnssec-lookaside auto;

/* Path to ISC DLV key */
//bindkeys-file "/etc/named.iscdlv.key";

//managed-keys-directory "/var/named/dynamic";
};

logging {                                     #定义日志存放位置
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

include "/etc/named.rfc1912.zones";
//include "/etc/named.root.key";
配置完成后启动named服务service named start,当前服务器不负责任何域名的解析,是一台DNS缓存服务器。下面介绍区域文件的配置,如果需要反向解析,还需要配置反向区域文件,这些区域文件都需要放置在/etc/named.conf中directory参数指定的目录下(默认是/var/named/目录下)。

DNS服务器中域名与IP地址相互转换的映射信息以文本形式存储在区域文件中,每一个区域文件对应一个域名的解析,当然如果需要反解,还需要一个对应的反向区域文件。
先在/etc/named.rfc1912.zones中定义区域:
zone "xiaoxiao.com" IN {                   #引号中的是区域名称
type master;                       #指定服务器类型
file "xiaoxiao.com.zone";          #指定解析库文件,默认在/var/named目录下
allow-update { none; };            #是否允许更新
};

zone "0.168.192.in-addr.arpa" IN {   #反向区域定义
type master;
file "0.168.192.zone";
allow-update { none; };
};
#type {master|slave|hint|forward};
#master     主DNS服务器
#slave        从DNS服务器
#hint          提示域,所有非本机所负责的区域,都直接转发至这里,用于定义根区域
#forward    转发器


DNS服务器中域名与ip地址的映射信息以文本文件的形式存在于区域文件中,每一行为一个对应关系,称为一个资源记录(RR Resource recorde),资源记录定义格式:
[name] [ttl] IN type value

name #根据资源类型的不同,取值也不同,取值包括:FQDN(全称域名),当前区域名称(简写为@),也
#可不写(与上一条资源记录的name值相同),根域为"."。
ttl #指定缓存时长,可以不写。可以直接在首行指定$TTL 1800,下面不写,就默认这个值。
IN #固定格式。
value #这个字段的取值也资源记录类型有关
type #资源记录类型
type有下面几个值:
SOA #这个区域的信息汇总,每个区域文件必须包含一个SOA记录,并且必须是第一条记录,这条记
#录中指明了这个区域的主DNS服务器及系统管理员邮箱等。
NS #用于标识负责解析本区域的DNS服务器,如果主从服务器有多个,每一个都需要标明。
MX #用于标识邮件服务器。
A #A记录,主机名至IP地址的映射,正向解析。
AAAA #ipv6主机名至IP地址的映射。
CNAME #别名记录,用于定义A记录的别名。
PTR #IP地址至主机名的记录,反向解析。

这里有2点需要注意:
1、对区域文件改动之后,serial number都需要加1,serial number变动之后,本机的DNS程序会通知从DNS服务器过来同步对应的区域文件。在这个文件中定义了多少条NS记录,程序就回根据这些记录通知指定的DNS从服务器,若没有定义,则不会通知
2、在反向解析文件中,没有mx(邮件服务器)记录,SOA和NS记录跟正向解析文件中的一致,其中的A级记录都转为PTR记录,CNAME(别名)无需反解

SOA记录:

@       IN      SOA     ns.xiaoxiao.com.        baby.xiaoxiao.com. (
10011         ;#serial number,版本号,这个文件改动之后版本号加1。
1H              ;refresh time,同步时间间隔。
10M           ;retry time,重试时间间隔。
7D              ;expire time ,超时时间。
10M           ;negative answer ttl,否定回答缓存时长。
)
#name:@表示当前区域名称,就是在/etc/named.rfc1912.zones中定义的zone名称。
#value:主DNS服务器的FQDN和系统管理员的邮箱地址,由于@表示区域名称,所以这里的@用"."表示。
NS记录:
@                       IN      NS      ns.xiaoxiao.com.
@                       IN      NS      2ns.xiaoxiao.com.
#name:@表示当前区域名称
#value:对应DNS服务器的FQDN,每一个NS记录都得有一个A记录(对于正向解析文件而言)。
#还有FQDN最后面的那个点".",千万不能忘了写。下面的也一样。
MX记录:

@                       IN      MX      10      mail.xiaoxiao.com.
#name:@当前区域名称
#value:FQDN,对于MX记录,在value前还需要定义一个优先级(0-99)
#这个优先级数字越小,优先级越高,越被优先使用
#每一个MX记录都得有一个A记录(对于正向解析文件而言)。
A记录:
ns.xiaoxiao.com.          IN      A       192.168.0.165
2ns.xiaoxiao.com.        IN      A       192.168.0.206
mail.xiaoxiao.com.       IN      A       192.168.0.240
www.xiaoxiao.com.      IN      A       192.168.0.241
web.xiaoxiao.com.       IN      A       192.168.0.242
#name:FQDN
#value:对应IP地址
#ns.xiaoxiao.com.          IN      A       192.168.0.165
#2ns.xiaoxiao.com.        IN      A       192.168.0.206
#mail.xiaoxiao.com.       IN      A       192.168.0.240
#这3条就是对应上面DNS和MX记录的A记录。
cname记录:

ttt.xiaoxiao.com        IN      CNAME
#name:别名
#value:FQDN
#需要有对应的A记录
PDR记录:
165     IN      PTR     ns.xiaoxiao.com.
206     IN      PTR     2ns.xiaoxiao.com.
241     IN      PTR     www.xiaoxiao.com.
242     IN      PTR     web.xiaoxiao.com.
#name全为简写,后面会自动补上.(点)和区域名称
完成配置之后最好用bind软件包提供的这两个工具检查一下:
1)named-checkconf #检查配置信息语法错误(/etc/named.conf),或用service named configtest(这个除了检查/etc/named.conf配置文件,也可以检查各区域文件,但是centOS7好像没有),执行命令之后若没有返回结果,则说明配置正确。
2)named-checkzone #检查区域文件是否配置正确。
例如:named-checkzone “localhost” /var/named/named.localhost
#localhost指区域名,/var/named/named.localhost对应的域的解析库文件。输入指令之后若返回OK,则表示配置正确。

最后修改一下区域解析文件的属组和权限:
[root@baby-CentOS named]# chmod 640 xiaoxiao.com.zone 0.168.192.zone
[root@baby-CentOS named]# chown :named xiaoxiao.com.zone 0.168.192.zone



然后即可启动服务service named start。

客户端测试工具
下面介绍几款客户端的测试工具,在DNS服务器或客户端网络出现故障时,常常使用这些工具来排除故障。
1)host
格式:host -t RRType NAME [SERVER]
-t RRType #指定资源记录类型
NAME #需要解析的主机名或IP地址
SERVER #指定用于解析的DNS服务器
[root@baby-virt-3 ~]# host -t A www.xiaoxiao.com 192.168.0.165
Using domain server:
Name: 192.168.0.165
Address: 192.168.0.165#53
Aliases:

www.xiaoxiao.com has address 192.168.0.5
得到解析结果192.168.0.5!

2)nslookup (交互式DNS查询客户端查询命令)
用法:
nslookup
>service x.x.x.x
>set type{A|NS|MX}
>name
[root@baby-virt-3 ~]# nslookup
> server 192.168.0.165
Default server: 192.168.0.165
Address: 192.168.0.165#53
> set type=A
> www.xiaoxiao.com
Server:		192.168.0.165
Address:	192.168.0.165#53

Name:	www.xiaoxiao.com
Address: 192.168.0.5


3)dig
格式:dig -t type name @server
-t type #指定资源记录类型
NAME #需要解析的主机名或IP地址
@SERVER #指定用于解析的DNS服务器
+trace #开启dns查询跟踪
+notrace #关闭dns查询跟踪
+recurse #开启dns递归查询
+norecurse #关闭dns递归查询
类型可使用:AXFR,AXFR:完全区域传送(测试完全区域传送是否能够正常运行),
例如: dig -t AXFR 小小.com @192.168.0.165
dig -x ip @servier #通过-x来指定反解解析(注意:不是-t PTR)
可用上述介绍的几款工具对自己搭建的DNS服务器进行测试!!!

再介绍一款DNS的控制工具:rndc,rndc是一款远程控制工具,但是全程控制的话不安全,一般仅在本地只用。
rndc命令[name server control utility](可以通过rndc-confgen生成rndc的主配置文件):
reload [zone] #重新载入某个区域文件,用于区域文件的更新
reconfig #重读配置文件
flush #flushes the server's cache 用于缓存过期清理
status #查看服务器状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息