内容简介:
DNS的简述
DNS服务器的安装
DNS常见名词
DNS配置文件详解
配置主要的DNS服务
DNS的简述
网络中为了区别各个主机,必须给每台主机配置一个唯一的IP地址,但这些数字的地址人们比较难以记忆,所以就采用了“域名”的方式来取代这些数字。
当某台主机要与其他主机进行通信时,就可以利用域名通信,域名向DNS服务器进行查询,转换成相应的IP地址进行通信。
早期的DNS服务是有一个文件提供/etc/hosts文件,但是后来随着互联网的开发,这个文件已经不能满足需求,于是由伯克利大学开发了BIND软件,来进行提供更广的DNS服务。
DNS服务器系统由以下四个组成部分:
DBS域名空间
资源记录
DNS服务器
DNs客户端
域分为:
组织域:com、org、net、cc....
国家域:cn、tw,hk,....
反向域:IP-->FQDN
区域的划分:如图1
DNS的查询过程分为两部分进行
名称查询从客户端开始,并传输给本机的DNS客户服务查询进行解析,如果本地不能在本机解析查询,则向本机设定的DNS服务器进行解析。如图2
DNS服务进行域名解析有两种方式:
递归查询:只发送一次请求,而后的查询由DNS服务器完成并返回其结果。
迭代查询:发送一次或者多次查询。DNS服务器返回一个绝对值或参考值,有客户端自己完成查询。如图3
hosts文件
hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件,/etc/hosts
Hosts文件包含了IP地址和主机名之间的映射,还包括主机名的别名。
hosts文件的格式如下:
IP地址 主机名/域名 如图4
DNS服务器的安装
软件包:
bind97:程序主包,提供DNS服务的安装
bind97-libs:提供DNS服务器程序运行的库文件
bind97-utils:DNS工具包
bind97-level:开发包
需要安装bind97,bind97-libs,bind97-utils。安装之前需要卸载系统上之的文件,包括库文件和utils。
rpm -qa bind* //查询已安装的软件包
rpm -e bind-libs bind-utils //卸载软件包
yum install bind97 bind97-libs bind97-utils //安装bind97必须软件包
安装完成后检查所有包是否安装正确:如图5
rpm -qa bind97*
DSN服务的启动和停止
1、启动DNS服务
service named start
2、停止DNS服务
service named stop
3、重启NDS服务
service named restart
4、开启DNS服务的启动选项
chkconfig --list named //查看启动项
chkconfig named on //开启dns启动项
如图6所示
5、重读配置文件,不重启服务而使配置文件生效
service named reload
DNS常见名词:
ZONE:DNS名称,其中包含了存储在DNS服务器上的资源记录。
FQDN:(Fully Qualified Domain Name)主机全名
正向解析:域名到IP地址的解析过程
反向解析:从IP到域名的解析过程
DNS配置文件:
/etc/named.conf:主文件,设置一般的参数,指向该服务器使用的域数据库的存放位置
/var/named/named.ca:根域配置服务文件,指向根域名配置的服务器
/var/named/named.localhost.zone:localhost区的正向解析文件,用于将localhost名字转换为Ip127.0.0.1
/var/named/named.loopback:locahost的反向解析文件,用于将IP127.0.0.1转换为localhost主机名
资源记录类型:
SOA资源记录:起始授权记录(Start of Authority Record),简称SOA记录。SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
格式:区域名(当前) 记录类型 SOA 主域名服务器(FQDN) 管理员邮件地址 (序列号 刷新间隔 重试间隔 过期间隔 TTL)
NS资源记录:名称服务器(NS)资源记录表示该区的授权服务器,它们表示SOA资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个NS记录。
格式:区域名 IN NS 完整主机名(FQDN)
A资源记录:地址(A)资源记录把FQDN映射到IP地址,因而解析器能查询FQDN对应的IP地址。
格式:完整主机名(FQDN) IN A IP地址
PTR资源记录:相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN
格式:IP地址 IN PTR 主机名(FQDN)
CNAME资源记录:规范名字(CNAME)资源记录创建特定FQDN的别名。
格式:别名 IN CNAME 主机名
MX资源记录:邮件交换(MX)资源记录为DNS域名指定邮件交换服务器。
格式:区域名 IN MX 优先级(数字) 邮件服务器名称(FQDN)
主配置文件/etc/named.conf,如图7
named.confi文件的语法格式:
花括号必须成对出现,并且以;结尾
花括号的前后得有空格
花括号内的每段必须也以;结尾
type字段指定区域的类型
master:表示定义的是主域名服务器 。拥有区域数据文件,并对此区域提供管理数据
slave:表示定义的是辅助域名服务器。拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据
hint:表示是互联网中根域名服务器。当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表
forward:一个forward zone是每个域的配置转发的主要部分
下面来我们自己架构一个简单的根DNS,
根区域定义
1、配置named.conf文件
- 新建一个named.conf,修改属组和属主。权限为640
- vim /etc/named.conf
- options {
- directory "/var/named";
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "named.localhost";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.loopback":
- };
- chown root:named /etc/named.conf
- chmod 640 /etc/named.conf
- named-checkconf //检查主配置文件是否有语法错误
- named-checkzone "." /var/named/named.ca //检查区域文件是否有错误
SELinux:selinux控制的机制比较特殊,启动DNS服务器的时候需要把SELinux关掉。
- [root@localhost etc]# getenforce //查看SELinux状态
- Enforcing
- [root@localhost etc]# setenforce 0 //临时的关闭SELinux
- [root@localhost etc]# getenforce
- Permissive
- [root@localhost selinux]# vim /etc/selinux/config //配置文件,可以永久关闭。
启动DNS服务如下所示,图8
netstat -tunlp查看服务的相关端口,如图9
测试:
vim /etc/resolv.conf
nameserver 172.16.7.1
//本机IP做DNS服务器
search localdomain
dig -t A localhost @172.16.7.1 //查找localhost的A记录,如图10
DNS服务器案例一
需求规划:
主机:
master:172.16.7.1
slave:172.16.7.2
测试机:172.16.7.3
master:
ns ns1.chris.cm
www
172.16.7.6
ftp 172.16.7.7
mail 172.16.7.8
chris 172.16.7.9
chrislee cname www
slave:
ns2.chris.com
要求:其能实现正反向解析
master设置:
1、vim /etc/named.conf在下面增加
- zone "chris.com" IN {
- type master;
- file "chris.com.zone"
- };
- zone "7.16.172.in-addr.arpa" IN {
- type master;
- file "172.16.6.zone";
- }
- 如图11所示
- 2、vim /var/named/chris.com.zone //配置chirs.com的正向数据
- $TTL 600
- chris.com. IN SOA ns1.chirs.com. admin.chris.com (
- 2013040401 //序列号
- 1H //刷新间隔
- 5M //重试间隔
- 2D //过期间隔
- 6H) //否定答案的缓存时长
- IN NS ns1.chris.com.
- IN 10 MX mail
- ns1 IN A 172.16.7.1
- www IN A 172.16.7.6
- ftp IN A 172.16.7.7
- mail IN A 172.16.7.8
- chris IN A 172.16.7.9
- chrislee IN CNAME chris
3、vim /var/named/172.16.7.zone 如下图13
4、更改这两个文件的权限和属主属组并测试配置
- [root@localhost named]# chown root:named chris.com.zone
- [root@localhost named]# chown root:named 172.16.7.zone
- [root@localhost named]# chmod 640 chris.com.zone
- [root@localhost named]# chmod 640 172.16.7.zone
- [root@localhost named]# named-checkconf
- [root@localhost named]# named-checkzone "chris.com" /var/named/chris.com.zone
- [root@localhost named]# named-checkzone "chris.com" /var/named/chris.com.zone
- zone chris.com/IN: loaded serial 2013040401
- OK //正常
- [root@localhost named]# named-checkzone "7.16.172.in-addr.arpa" /var/named/172.16.7.zone
- zone 7.16.172.in-addr.arpa/IN: loaded serial 2013040401
- OK //正常
5、测试:如图14、15
slave服务器的设置:
1、先在master服务器上配置named.conf配置文件
- options {
- directory "/var/named";
- # recursion yes|no; //是否为客户端开启递归查询,默认是开启的
- allow-recursion {172.16.7.0/8; }; //开启递归查询,并规定客户端范围
- # allow-transfer {any;}; //全局定义,开启区域传输,并规定传输的客户端,默认是开启给所有主机传输
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "named.localhost";
- allow-transfer {none; }; //不给任何客户端传输其区域
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.loopback";
- allow-transfer {none; }; //不给任何客户端传输其区域
- };
- zone "chris.com" IN {
- type master;
- file "chris.com.zone";
- allow-transfer {172.16.7.2; }; //只给客户端172.16.7.2传输此区域
- };
- zone "7.16.172.in-addr.arpa" IN {
- type master;
- file "172.16.7.zone";
- allow-transfer {172.16.7.2; }; //只给客户端172.16.7.2传输此区域
- };
2、配置数据文件chris.com.zone
- $TTL 600
- chris.com. IN SOA ns1.chirs.com. admin.chris.com (
- 2013040403
- 1H
- 5M
- 2D
- 6H)
- IN NS ns1.chris.com.
- IN NS ns2.chris.com. //配置slave服务器的NS记录和相应的A记录,如果不配置将无法实现增量传输,就是数据号增加的时候客户端无法更新
- IN MX 10 mail
- IN A 172.16.7.2
- ns1 IN A 172.16.7.1
- ns2 IN A 172.16.7.2
- www IN A 172.16.7.6
- ftp IN A 172.16.7.7
- mail IN A 172.16.7.8
- chris IN A 172.16.7.9
- chrislee IN CNAME chris
3、配置172.16.7.zone反向解数据文件
- $TTL 600
- @ IN SOA ns1.chirs.com. admin.chris.com (
- 2013040401
- 1H
- 5M
- 2D
- 6H)
- IN NS ns1.chris.com.
- IN NS ns2.chris.com. ////配置slave服务器的NS记录和相应的PTR记录,如果不配置将无法实现增量传输,就是数据号增加的时候客户端无法更新
- 1 IN PTR ns1.chris.com.
- 2 IN PTR ns2.chris.com
- 6 IN PTR www.chris.com.
- 7 IN PTR ftp.chris.com.
- 8 IN PTR mail.chris.com.
- 9 IN PTR chris.chris.com.
- 9 IN PTR chirs.chris.com.
4、slave只需要配置named.conf
- options {
- directory "/var/named";
- };
- zone "." IN {
- type hint;
- 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 "chris.com" IN {
- type master;
- file "chris.com.zone";
- };
- zone "7.16.172.in-addr.arpa" IN {
- type master;
- file "172.16.7.zone";
解释如图17
5、测试
解析测试
启动测试机7.3,编辑etc/resolv.conf
nameserver 172.16.7.1
search localdomain
dig -t A ftp.chris.com 结果如图18
区域传输测试,如图19
下面把master上的序列号加1,再重启服务,master的日志文件如图20
查看slave服务器上的文件,如图21
OK,此服务器到此已经实现了我们预设的全部功能,架设完毕。
泛域名解析:
只需建立一个A记录 *.ZONE NAME. IN A IP
fg:*.chris.com. IN A 172.168.0.1
rndc:服务本地/远程控制命令
rndc-confgrn > /etc/rndc.conf //生成rdnc配置文件
如图22所示
vim /etc/rndc.conf
:,$-1w >> /etc/named.conf把配置文件追加到named.conf内
vim /etc/named.conf,如图23
rndc的子命令选项,如图24
利用rdns查询信息,如图25
远程主机连接的时候需要把/etc/rndc.conf拷贝到客户端主机上面
scp /etc/rndc.conf 172.16.7.3:/root/
然后修改配置,如图26
由于远程控制开启不安全,所以建议不要开启DNS的远程控制
DNS子域授权
格式:SUB_NAME
IN
NS
NSSERVER_SUB_ZONE_NAME
NSSERVER_SUB_ZONE_NAME
IN
A
IP
fg:ns1.fin.chris.com 172.16.100.1
ns1.market.chris.com 172.16.200.1
只需要在named.cof内增以下配置即可
fin
IN
NS
ns1.fin
ns1.fin IN
A
172.16.100.1
market
IN
NS
ns1.market
ns1.market IN A 172.16.200.1
然后在100.1和200.2上分别建立相应的DNS服务器,只是域为fin.chris.com和market.chris.com。这样就可以完成DNS的子域授权了,以后这两个小域可以分别负责自己域内主机的域名解析了。
解析转发:
- 【forward {only|first}
- forwards {172.16.100.1;}】:所有解析不出来的都转发给父域
- zone内设置只针对某个域的解析不歘来的转发格式:
- zone "ZONE_NAME"
- 【forward first;
- forwards {172.16.100.1;}】:
- 访问控制列表
- acl ACL_NAME {
- 172.16.0.0/16;
- 127.0.0,0/8
- }; //外面单独定义
- allow-query {ACL_NAME;}; //域内调用即可
- 系统内置的两个列表:
- none
- any
智能DNS:视图view
格式
view VIEW_NAME {
};
一旦定义视图,所有的区域都必须定义在视图中。根区域只需要定义在需要递归的视图内。
fg:
需求规划:
172.16.10.0/8网段通过chris.com域解析
剩余的其他网段通过chrislee.com域解析
编辑named.conf
- cal a {
- 172.16.10.0/8;
- 127.0.0.1/8;
- };
- options{
- directory "/var/named"
- };
- view chris {
- match-clients {a; };
- zone "chris.com" IN {
- type master;
- file "chris.com.zone";
- };
- };
- view chrislee {
- match-client {any; };
- zone "chrislee.com" IN {
- type master;
- file "chrislee.com.zone";
- };
- };
下面配置chris.com.zone和chrislee.com.zone数据文件即可实现其分类解析功能