分类: 系统运维
2016-10-26 17:43:14
DNS简介
DNS域名结构介绍
顶级域名
DNS工作原理
工作模式和端口
资源记录
安装bind(详细)
实战:配置一个正反向解析
实战:配置DNS转发
实战:配置DNS主从
实战:子域授权
实战:配置智能DNS
根域架构拓扑图
DNS服务可以为用户提供域名和IP地址之间的自动转换,通过DNS用户只需要输入机器的域名即可访问相关的服务,无需使用那些难以记忆的IP地址
DNS域名又称DNS命名空间,它是以层次树状结构进行管理的,其顶层是根域,根域在整个DNS命名空间是唯一的,而根域下可以分为多个子域,每个子域又可以有多个子域
一个完整的域名是由顶级域以及各子域的名称所组成,各部分之间用圆点,“.”来分割,其中最后一个点是顶级域,最后一个“.”左边部分称为二级域名,二级域左边称为三级域名,以此类推
www.sina.com.cn
cn是一级域名,com是二级域名,sina是三级域名
域名 | 代表含义 | 域名 | 代表含义 |
.com | 表示商业机构 | .cn | 中国 |
.net | 表示网络服务机构 | .hk | 中国香港 |
.org | 表示非营利性组织 | .tw | 中国台湾 |
.gov | 表示政府机构 | .us | 美国 |
.edu | 表示教育机构 | .jp | 日本 |
.mil | 表示军事机构 |
|
|
随着计算机网络的快速发展,网络中的计算机数量也是随之快速增长,以前依靠hosts文件来实现主机名和IP地址之间的通信已经无法满足现状,DNS的出现提供了一个完整的解决方案
DNS服务采用C/S方式,域名和IP地址的维护工作全部在DNS服务端进行,用户无需再在本地手动维护hosts文件
下面是通过DNS解析域名的工作过程
1、当需要DNS解析的时候,系统会向本地DNS服务器发出DNS解析请求,由本地DNS服务器进行域名和IP地址的解析工作 2、本地DNS服务器收到用户请求后,则会在自身的DNS数据库中进行查找匹配域名和IP对应的记录,如果找到则把结果返回给客户端,如果查不到,则把请求转发给根DNS服务器 3、根DNS服务器查到域名对应的顶级域,再由顶级域查找二级域,由二级域查找三级域,以此类推,直到找打需要解析的域名和IP地址,并把结果返回给本地DNS服务器 4、最终由本地DNS服务器把结果返回给客户端 5、如果经过查找依然无法查找到,则有本地DNS服务器返回给客户端解析错误信息
案例:访问的dns解析过程
1、客户端需要解析com,客户端向本地DNS服务器发送解析请求 2、本地DNS发现无法解析,转发给根域服务器, 3、根域服务器根据请求域名对应的顶级的com,返回com的服务器地址, 4、本地DNS服务器向com域dns服务器发出解析请求 5、com域服务器返回qq.com域服务器的地址 6、以此类推,本地DNS服务器向qq.com域dns服务器发出解析请求,直到在qq.com域dns服务器上面找到com所对应的IP地址 7、qq.com把查找到的域名对应IP地址信息返回给本地DNS服务器 8、最终再由本地DNS服务器把结果返回给客户端计算机
端口:TCP/53,UDP/53 //用户客户端查询,递归查询 TCP/953,UDP/953 //DNS主从同步 工作模式:C/S模式
1、SOA:起始授权记录,Start of Authority Record
每个区的开始处都包含,SOA定义了域的全局参数,进行整个域的管理,一个区有且仅有一个SOA记录
2、NS:Name Server 域名服务记录
指定该域名由那个DNS服务器来解析,每个区在区根处至少包含一条NS记录
3、A:address记录,吧FQDN映射到IP地址,因为有此记录,所以DNS服务器能够解析FQDN域名对应的IP地址
4、PTR:反A记录,指针PRT记录把IP映射到FQDN,用于反向查询,通过IP地址,找到域名
5、CNAME:别名记录,记录创建特定FQDN的别名,用户可以使用CNAME记录来隐藏网络用户的实现细节
6、MX:邮件交换记录,为DNS指定邮件交换服务器
Bind是一款开放的源代码DNS服务器软件,是目前使用最广泛的DNS服务器软件
[root@localhost ~]# yum install -y bind bind-utils用脚本在每台服务器上面安装Bind软件,并且初始化主配置文件
#!/bin/bash ##安装Bind服务 if [ ! -e /etc/init.d/named ];then rpm -e --nodeps bind-utils &>/dev/null
rpm -e --nodeps bind-libs &>/dev/null
rpm -e --nodeps bind &>/dev/null
rpm -e --nodeps bind-chroot &>/dev/null
yum -y install bind bind-utils &>/dev/null && echo "Bind已安装成功,请稍等,初始化Bind主配置文件。。。" else echo -------------------------------------------------
echo "此台服务器Bind已安装,请退出........." sleep 1 fi ##初始化Bind配置文件 cd /etc/
sed -i -e 's/localhost;/any;/g' -e '/port/s/127.0.0.1/any/g' named.conf echo -------------------------------------------------
sleep 2 echo "初始化Bind配置文件已完成........."
/etc/named.conf #bind主配置文件
/etc/named.rfc1912.zones #定义zone的文件
/etc/rc.d/init.d/named #bind脚本文件
/etc/rndc.conf #rndc配置文件
/usr/sbin/named-checkconf #检测/etc/named.conf文件语法
/usr/sbin/named-checkzone #检测zone和对应zone文件的语法
/usr/sbin/rndc #远程dns管理工具
/usr/sbin/rndc-confgen #生成rndc密钥
/var/named/named.ca #根解析库
/var/named/named.localhost #本地主机解析库
/var/named/slaves #从文件夹
bind的主要配置文件包括named.conf和相应的区域文件,bind中各种配置都是更改这个文件来完成的,修改完成后重启生效
named.conf是bind的主要配置文件,里面存储了大量的bind自身的设置信息,bind启动时候会去检测该文件,读取文件的内容,如果文件不存在,或者里面语法错误,会导致启动失败
named.conf配置文件是有配置语句和注释组成,每条配置语句以分好“;”作为结束符,多条配置语句组成一个语句块;注释使用两个//作为注释符
named.conf配置文件所支持的所有配置语句
acl 定义一个主机匹配列表,用户访问控制权限
controls 定义rndc工具与bind服务进程的通信 include 把其他文件的内容包含进来
key 定义加密秘钥
logging 定义系统日志信息
lwres 把named配置为轻量级解析器
masters 定义主域列表
options 设置全局选项
server 定义服务器属性
trusted-keys定义信任的dnssec秘钥
view 定义视图
zone 定义区域
1、核心配置文件的修改
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; //修改成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";
allow-query { any; }; //修改成any,谁都可以查询 recursion yes;
2、正向解析配置zone文件指定
[root@localhost ~]# vim /etc/named.rfc1912.zones // 添加正向,反向解析zone指定 zone "qq.com" IN { //域名 type master; //type类型,master(主) file "qq.com.zone"; //区域文件保存位置.zone文件位置,用实例来说明买个字段的意思 allow-update { none; }; //是否允许动态更新(DNS和DHCP结合是使用) };
zone "252.1.10.in-addr.arpa" IN {
type master;
file "252.1.10.rev";
allow-update { none; };
};
3、建立zone文件记录文件
[root@localhost named]# cat qq.com.zone $TTL 600 @ IN SOA qq.com. root.qq.com. ( //@代表区域名,这里就是代表xuegod.cn,可以改写为xuegod.cn //IN Internet Name //SOA 权威结构,后面的dns.就是其实授权记录,有且仅有一条SOA //主机名,DNS名称 //代表DNS管理员的邮箱地址,有什么问题通知谁,@用.代替@有其他含义 20160321; //序列号,手工改,同步用 1H; //1天更新,多长时间请求更新 5M; //一天联系上,过5个小时再试 1W; //1周时间过期,一直联系不上时 10M ) //最短的有效期,10小时,不需要更新 IN NS qq.com. //最好和上面同步,如果要写完整,可以写qq.com.后面的.一定要带上 IN A 127.0.0.1 //主机头,这里填写主机头,注意要对我们上面的NS记录做一条主机记录 IN MX 10 mail1
mail1 IN A 10.1.252.96 www IN A 10.1.252.96 cname IN CNAME www
* IN A 10.1.252.96 [root@localhost named]# cat 252.1.10.rev $ttl 1D
@ IN SOA qq.com. root.qq.com. (
20160321;
1H;
5M;
1W;
10M )
IN NS qq.com. 96 IN PTR com. //PTR指针,反向解析记录
4、重启DNS服务
[root@localhost named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
5、在客户端设置DNS服务器后测试
[root@localhost named]# nslookup > com
Server: 10.1.252.97 Address: 10.1.252.97#53 Name: com
Address: 10.1.252.96 > 10.1.252.96 Server: 10.1.252.97 Address: 10.1.252.97#53 96.252.1.10.in-addr.arpa name = com.
>
(1)当本地DNS服务器(也是转发器)收到查询时,它会尝试使用它主持和缓存的主要和辅助区域解析该查询;
(2)如果不能使用本地数据解析查询,此时它作为客户端,会将查询转发给外网DNS服务器;
(3)本地DNS(转发器)收到客户端的请求后会等待一段很短的时间,等待来自外网DNS的应答;
(4)对于外网DNS来说,它接收到的查询请求是递归查询,此时,它自己需要向外层层迭代找到最终答案返回给转发器(此时转发器作为DNS客户端)
(5)转发器将外网DNS返回的查询结果送到客户端(非权威答案),完成解析过程。
注:转发的前提——接收转发请求的服务器(这里是外网DNS)必须能够为请求者(这里是本地DNS,也是转发器)做递归查询;
(1)无条件转发:转发所有针对非本机负责解析的区域的请求;
在主配置文件/etc/named.conf的全局选项中添加如下内容:
options {
forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 };
(2)条件转发:仅转发对特定区域的请求(即转发域);
在区域置文件/etc/named.rfc1912.zone中定义转发域:
zone "区域名称" IN {
type forward; #区域的类型为转发 forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 };
我们按照上图当用户访问oa.qq.com,crm.qq.com在本地进行查询,当需要解析com就转发的外网
[root@localhost ]# yum install -y bind bind-utils [root@localhost ]# vim /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";
allow-query { any; }; #修改 recursion yes;
idnssec-enable no; //改成no不检查来源头部 dnssec-validation no; dnssec-lookaside auto; forward first; #only,仅仅转发,first,先查找再转发,实验效果,仅仅转发 forwarders { 192.168.211.128; };
……
上面我们已经讲过,一个域内的DNS服务器一般都需要两个,我们这里就进行主从配置和区域传送
从服务器配置文件
[root@localhost ]# vim /etc/named.conf options {
listen-on port 53 { any; }; #修改监控地址 listen-on-v6 port 53 { any; }; #修改监控地址 ● ● ● ● ● ●
allow-query { any; }; #允许所有来查询 recursion yes;
● ● ● ● ● ●
#dnssec-enable no; //改成no不检查来源头部 #dnssec-validation no; #dnssec-lookaside auto; ● ● ● ● ● ●
时间同步主从都做
[root@localhost ~]# ntpdate 0.rhel.pool.ntp.org [root@localhost ~]# ntpdate 0.rhel.pool.ntp.org
主配置
root@localhost ~]# vim /etc/named.rfc1912.zones
//主配置文件区域参数
zone "taobao.com" IN {
type master; file "taobao.com.zone"; allow-update { none; }; notify yes; also-notify{ 192.168.211.136; }; };
从配置
[root@localhost ~]# vim /etc/named.rfc1912.zones //从配置文件区域参数 zone "taobao.com" IN {
type slave;
file "slaves/taobao.com.zone";
masters { 192.168.211.128; };
};
重启服务,查看目录下的文件
[root@localhost named]# ll /var/named/slaves/ total 4 -rw-r--r-- 1 named named 377 Oct 2 11:42 taobao.com.zone
二级域是我们的三级域就可以随意定义,联系公司各个部门,都应该有自己的服务器,因为公司上万人让一台DNS服务器去解析压力会很大,分成部门每个部门一台子域DNS解析服务器,就轻松很多,过程就是在父DNS服务器中定义区域解析条目
例:
.<–根域
.com <–顶级域(一级域)
taobao.com <–二级域<–子域
ops.taobao.com <–主机名<–子域<–子域
[root@localhost ~]# vim /var/named/taobao.com.zone
$TTL 1D
@ IN SOA ns1.taobao.com. ops.taobao.com. (
20161015; 1H; 5M; 3D; 12H; )
IN NS ns1
Ns1 IN A 127.0.0.1 oa IN A 192.168.211.136 //添如下内容
IN NS ops //添加一条NS记录将ops.taobao.com. 域授权ops管理
ops IN A 192.168.211.136 //对应上条的NS记录A记录
[root@localhost named]# vim /etc/named.rfc1912.zones //添加ops.taobao.com区域
zone "ops.taobao.com"