一:DNS(Domain Name Service),协议 二:DNS服务相关概念 三:DNS的实现方式 四:主配置文件格式 五:测试工具 六:配置正向区域
一:DNS(Domain Name Service),协议
C/S
53/{tcp,udp}:默认使用该协议通信
:主要是用udp实现解析
www.mt.com:FQDN(full qualified domain) //主机名
早期通过hosts文件进行标识
解析过程:hosts--->本地缓存-->DNS:/etc/resolv.conf
根域名:.
顶级域名:top level domain:tld //
组织域:.com,.net,.org,.gov,.edu,.mil
国家域:.lq,.tw,.hk,.ip,.cn,...
父域知道子域,但是子域不知道父域
查询完后:缓存到本地,下一次的话就直接使用缓存
缓存也有TTL,用来保证有效 //TTL倒计时,到时清除
思想:分层而治,划片[区]而管
www.baidu.com. //最后一个 . 是可以不带的,但是是存在的
DNS查询过程:两段
1:到自己所指向的DNS服务器 //递归
2:本地DNS在网上查找的过程 //迭代
递归:弟弟我帮你
迭代:自己去吧
DNS查询类型:
递归查询;
迭代查询
DNS名称解析方式://两个不同的数据库
名称--->IP:正向
IP-->名称:反向
//早期智能正向解析,而不能反向解析
//反向:另外一个树
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
[.]
/
[] //in-addr.arpa.
/
/
[1]
/ |
[1] [2]
\
[3]
\
[4]
1.2.3.4===4.3.2.1.in-addr.arpa
反向:IP地址表示的过程也是从下往上走:
表示的时候是:1.2.3.4
查找过程:
第一阶段:本地dns-->.
第二阶段:in-addr.arpa-->1-->2-->3
正向:也是从下往上查找的
表示的时候是:www.baidu.com
查找过程:
第一阶段: 本地DNS--->.
第二阶段:.-->.com-->.baidu--->www
注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库
dns相关网站
万网//https://wanwang.aliyun.com/domain/
godaddy //https://sg.godaddy.com/zh/
二:DNS服务相关概念
1.主-辅DNS
辅:在主dns挂了的时候,及时顶上去
:在忙的时候,也可以做负载均衡
:只能辅到主dns去更新,复制
:新加入的条目,只能通过主DNS
主DNS:维护所负责解析的域数据库的服务器;读写操作都可进行
从DNS:从主DNS或其他从DNS服务器那里“复制”一份解析库;但只能进行读操作
“复制”操作的实施方式:
序列号:serial,也即是数据库的版本号;主dns数据库内容发生变化时,其版本号递增
刷新时间间隔:refresh,从s每多久到主s检查序列号更新状况
重试时间间隔:retry,小于refresh//否则刷新时间已经改变,从s请求主解析库失败时,再次发起请求的时间间隔
过期时长:expire,从s多久之后放弃从主s同步数据;停止提供服务;
//因为他没有权限,进行写,所以他也就不再提供服务了
//需要手动配置为从为主NS
否定答案的缓存时长:我没有知道,多长时间内你不要问我
主s“通知“从s随时更新数据://从s定期间隔来复制,主s更新主动推送
pull:拉取,拉过来 //从s定期从主s pull数据
push:推送
区域传送:
全量传送:axfr传送整个解析库 //一般第一次的时候
增量传送:ixfr仅传送变化的数据
区域(zone)域(domain)
mt.com是一个域
FQDN-->IP
正向解析库://也成为一个区域:正向解析区域
IP-->FQDN
反向解析库://反向解析区域
一个域内有:正向解析区域和反向解析区域
一个域内:正向或者反向//又负责n个域的解析
区域是物理概念:例如一个正向或者反向的解析库文件
域是逻辑概念:.com,.cn等
//因此这两个是无所谓谁大谁小的
子域需要得到父域的授权
每一个DNS只知道自己的负责的DNS子域,而不知道父域是谁
因此每次查找,可能都需要到根查找
如果A请求NS1,单NS1不负责该域,NS1会直接查找根,而根是在配置文件中有直接定义的
全球的根节点服务器:13个,10:Usa,1:japan,1瑞士,1:英国
A-M标识,中国2014新增:L:
l.gtld-servers.net //中国的,位于北京
把DNS封了的话,国内的访问国内的网站都将失效
安全:dns缓存毒化,主机名和dns对应到其他ip
现在有:DNSsec //dns数据上上进行签名
2.区域数据库文件:
资源记录:Resouce Record,简称rr;
记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX
SOA:start of authority:起始授权记录;一个区域解析库有且只能哟一个SOA记录,而且必须放在第一条;
NS:Name service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主
A:address,地址记录FQDN-->IPV4
AAAA:地址记录,FQDN-IPv6
CNAME:Canonical Name:别名记录
PTR:Pointer ,IP--->FQDN
MX:mail eXchanger,邮件交换器
优先级:0-99,数字越小,优先级越高
资源记录类型还有很多种,这只是其中几种而已
3.资源记录的定义格式:
语法:name [TTL] IN RR_TYPE value
资源记录类型:SOA,NS,MX,A,AAAA,CANME,PTR
区域传送:AXRF,IXFR
资源记录定义的格式:
name [ttl] IN RR_TYPE value
SOA:
name:当前区域的名字;例如"magedu.com.",或者"2.3.4.in-addr.arpa.";
区域名字可以用@取代
value:由多部分组成
1.当前区域的区域名称(也可以使用主DNS服务器名称)
2.当前区域管理员的邮箱地址,但地址中不能使用@符号,使用“."取代
3.(主从服务协调属性的定义以及否定答案的TTL)
{serial,refresh,retry,expire,negative answer}
serial,refresh time,retry time,expire time,否定答案的TTL
M,H,D,W
例如:SOA
magedu.com. 86400 IN SOA mt.com. admin.mt.com. ( 2017010801;serial 是为以内 2H ;refresh time刷新时间 10min; retry 1W;expire 1D;否定答案的TTL值 ) SOA:6+5=11 NS:5 MX:6
例如:NS
name:当前区域的名称
value:当前区域的某DNS服务器的名字,例如ns.mt.com.
mt.com. 86400 IN NS ns1.mt.com.
例如:MX
name:当前区域的区域名称
value:当前区域某邮件交换服务器的主机名
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级
mt.com. 86400 IN MX 10 mx1.mt.com.
mt.com. 86400 IN MX 9 mx2.mt.com.
例如:A
name:某FQDN,例如www.mt.com.
value:某v4地址
例如:
www.mt.com. IN A 1.1.1.1
www.mt.com. IN A 1.1.1.2
bbs.mt.com. IN A 1.1.1.1
例如:AAAA
name:FQDN
value:IPv6地址
例如:PTR
name:IP地址,有特定格式,IP反过来写,而且加特定后缀
例如1.2.3.4的记录应该写为 4.3.2.1.in-addr.arpa.
value:FQDN
4.3.2.1.in-addr.arpa. IN PTR www.mt.com.
例如CNAME:
name:别名FQDN
value:FQDN格式的正式名字
web.mt.com. IN CNAME www.mt.com.
注意:
1.TTl可以从全局集成
2.@表示当前区域的名称
3.相邻的两个记录,其name相同时,后面的可以省略
www.mt.com. IN A 1.1.1.1
www.mt.com. IN A 1.1.1.2
可以
www.mt.com. IN A 1.1.1.1
IN A 1.1.1.2
//后一个不写
4.MX,NS等类型的记录其value为一个FQDN,此FQDN应该有一个A记录
4.缓存DNS
缓存DNS server:自己不负责任何域,只负责帮人查找解析
DNS服务器类型:
不负责解析域:
缓存DNS //接受所有DNS查询,进行递归解析
负责解析至少一个域:
主DNS
辅助DNS //备份以及负载均衡
缓存DNS
一个DNS服务器可以不包含任何域的配置信息,它将接收到的所有DNS查询进行递归解析,
将解析的结果返回给我们的查询客户端,并且将查询结果缓存下来,
这样的服务器就称之为Caching DNS Server
三:DNS的实现方式
DNS的开源实现:
dnsmasp //提供dhcp和bind
bind //这里重点讲bind
1.DNS and Bind
BIND的安装配置:
BIND:berkely Internet Name Domain-->ISC.org{bind,dhcpd}
早期为伯克利负责维护,后期为ISC
dns:协议
bind:dns的一种实现
named:bind程序的运行的进程名
yum info bind
yum list all bind*
程序包:
bind-utils:被bind和bind-utils包中的程序共同用到的文件
bind:提供dns server程序,以及几个常用到的测试程序
bind-chroot:可以选择程序,根切换,早期bind有漏洞,为了减少破坏,使用chroot
:所有配置文件都放在chroot目录中,然后所有的环境和配置文件都放在哪里
rpm -ql bind-utils //提供的命令有:dig,host,nslookup,nsupdate
yum install bind
rpm -ql bind //查看bind的所有生成文件
主配置文件:/etc/named.conf
或包含近来的其他文件
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/var/named/目录下
一般名字为:ZONE_NAME.zone
注意:
1.一台DNS服务器可同时为多个区域提供解析
2.必须要有根区域文件:named.ca
3.还应该有两个区域解析库:localhost和127.0.0.1的正反向解析
named.localhost:正向,named.loopback:反向
rndc:名称服务器的远程控制工具
remote name domain controller: 953/tcp但默认监听于127.0.0.1地址,因此仅允许本地使用
修改配置文件:cp /usr/share/man/man5/rndc.conf.5.gz 解压到/etc/rndc.conf
2.缓存名称服务器
bind程序安装完成之后,默认即可做缓存服务器
其他用户指向该name server即可,缓存服务器,允许本地递归即可
systemctl start named.service
注意:
1.named监听tcp和udp的53号端口
2.缓存域名服务器是不需要定义任何区域的,区域主要由:v4&v6的正反向解析记录即可
因为他不需要负责任何区域,只需要解析自己就可以了
四:主配置文件格式
全局配置段:
options{...}
日志配置段:
logging{...}
区域配置段:
zone{...}
由本级负责解析或者转发的区域
注:每个配置语句都以分号结尾,否则即为语法错误
1.缓存名称服务器的配置:
监听能与外部通信的地址
listen-on port 53 { 192.168.4.100; }; //花括号前后都有空格,监听地址分号结尾
dnssec-enable no; //可能会影响实验
dnssec-validation no;
allow-query { 192.168.4.0/24; }//允许内网主机查询
//bindkeys-file "/etc/named.iscdlv.key"; //已经关闭了dnssec因此这个密钥文件就没有用了
注释: /* ,,, */ 多行注释, //单行注释
named-checkconf //检查语法错误
named-checkconf /etc/namned.conf //指定配置文件位置
systemctl restart named.service
netstat -tnul |grep 53
tcp:953是rndc
2.vim /etc/resolv.conf 修改 :最多只能有个三个
nameserver 192.168.4.100 //监听的地址指向自己
ping www.baidu.com //在缓存nameserver上测试,能够ping通
dig -t A www.baidu.com //在本机使用,也可以,速度比较快
Got answer:请求得到了答案
flags: qr:查询请求 ra:请求答案
ANSWER SECTION:可能是本地的缓存解析的
AUTHORITY SECTION:权威段,谁负责解析的
ADDITIONAL SECTION:附加段,真实的ip对应
只要本地测试可以,就证明,本地做缓存服务器是可以的
3.允许其他人查询
/etc/named.conf
allow-query { 192.168.4.0/24; };
dig -t A www.baidu.com @192.168.4.100 //其他内部主机测试即可
小结:自己把nameserver指向自己,listen-on port修改对就可以了
五:测试工具
dig,host,nslookup
1.dig命令
dig [-t RR_TYPE] name @Server
用于测试dns系统,因此不会使用hosts文件
查询:
+[no]trace :跟踪解析过程
+[no]recurse:进行递归解析
dig +trace -t A www.baidu.com //追踪查询过程
1.找根:一个根返回顶级域 .com的所有dns,只有一个会响应 .--> .com
2. com服务器,告诉我们baidu的所有dns,只有一个响应,.com-->baidu.com.
3. baidu.com的服务器,找到www,www是一个cname,因此返回
dig -x 192.168.4.100 //反向解析
模拟完全区域传送
dig -t axfr DOMAIN [@server}
2.host命令
host -t A www.baidu.com
host -t NS baidu.com //baidu.com这个域内的NS
host [-t RR_TYPE] name SERVER_IP
3.nslookup命令
nslookup [options] [name] [server]
nslookup>
server IP:指定nameserver
set q=RR_TYPE
192.168.0.1
4.rndc named服务控制命令
rndc status //查看状态
rndc stop //可以关闭
rndc flush //清空服务器缓存
rndc reload [zone] //重载
rndc refresh zone //该zone转为维护模式,不让其解析
个人使用:
申请域名+ip
在注册商:申请修改ns记录:域名==ip
六:配置正向区域
以为mt.com域为例
1.定义区域
主配置文件或者主配置文件的辅助配置文件中实现
zone "ZONE_NAME" IN {
type {master|slave|hint|forward} //hint提示为根区域
file "ZONE_NAME.ZONE";
};
2.建立区域数据文件
在/var/named目录下建立区域数据文件
3.让服务器重载配置文件和区域数据文件
检查语法格式
4.权限及属组修改
chgrp named mt.com.zone
chmod o= mt.com.zone
172.16.4.100 ns1,bbs
172.16.4.12 mx1
172.16.4.13 mx2
172.16.4.14 www,web
172.16.4.15 bbs
实现:
1.vim /etc/named.rfc1912.zones //rfc:Request For Comments注释请求文档,各种协议标准文档
zone "mt.com" IN { //mt.com这里不加“." type master; file "mt.com.zone"; //默认位置位/var/named目录中 }; =================================== zone "4.168.192.in-addr.arpa" IN { //反向区域 type master; file "192.168.4.zone"; // 正向文件名 }
================================================
2. /var/named/mt.com.zone
语法:name [TTL] IN RR_TYPE value{[域名|DNS_name]+mail}
例如:SOA
mt.com. 86400 IN SOA mt.com. admin.mt.com. (
2017010801;serial 是为以内
2H ;refresh time刷新时间
10min; retry
1W;expire
1D;否定答案的TTL值
)
value:可以不写全,但是一定尾部不能带 “." :ns1
写全的话,是一定要带"." :ns1.mt.com.
会自动补齐/etc/named.rfc1912.zones中定义的
zone"mt.com"
或者开头:$ORIGIN mt.com.
反向区域中是不需要MX记录的
反向记录的第一条NS记录,value要写全,因为自动补齐的内容是4.168.192
======================================================
正向:
$TTL 3600 //注:这个是$而不是@ $ORIGIN mt.com. @ IN SOA ns1.mt.com. admin.mt.com. ( //注,这是小括号,不是花括号 2017030101 1H 10M 3D 1D ) IN NS ns1 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 172.16.4.100 mx1 IN A 172.16.4.12 mx2 IN A 172.16.4.13 www IN A 172.16.4.14 web IN CNAME www bbs IN A 192.168.4.15 bbs IN A 192.168.4.100
===========================================================
反向: //出错很有可能是IP地址写错了
$TTL 3600 $ORIGIN 4.168.192.in-addr.arpa. @ IN SOA ns1.mt.com. admin.mt.com. ( 2017030101 1H 10M 3D 12H ) IN NS ns1.mt.com. 100 IN PTR ns1.mt.com. 100 IN PTR bbs.mt.com. 12 IN PTR mx1.mt.com. 13 IN PTR mx2.mt.com. 100 IN PTR www.mt.com. 14 IN PTR web.mt.com. 15 IN PTR bbs.mt.com.
========================================================
3.named-checkconf
named-checkzone mt.com /var/named/mt.com.zone
rndc status;rndc reload ;rndc status
number of zones:会发生改变
测试:
dig -t NS mt.com
dig -t MX mt.com
dig -t A bbs.mt.com //两次执行可能会发生变化
4.修改属性
chown :named mt.com.zone
chmod o= mt.com.zone //取消其他人的权限
chmod o= 192.168.4.zone
chgrp named 192.168.4.zone
5.测试
dig -x 192.168.4.100
注意:rpm -ql bind //假如删除了bind的配置可以到/usr/share/man/man5中找回配置文件
Windows查看查看DNS缓存:
ipconfig /displaydns
解析顺序验证:
1.[root@localhost ~]# cat /etc/nsswitch.conf |grep -i name
# An example Name Service Switch config file. This file should be
# dns Use DNS (Domain Name Service)
hosts: files dns myhostname //先从hosts文件(files),后采用dns
2.cat /etc/resolv.conf
nameserver 8.8.8.8
本文出自 “黑马腾空” 博客,请务必保留此出处http://hmtk520.blog.51cto.com/12595610/1983897
原文地址:http://hmtk520.blog.51cto.com/12595610/1983897