DNS简介
DNS是Domain Name System的简称,DNS的主要作用就是讲主机名解析成ip地址的过程,因为在计算机网络当中是通过ip地址来进行主机间通信的,ipv4的地址是32位,人类记忆起来十分困难,更何况ipv6的128位,所以我们需要一个简单容易记忆的字符串来替换ip地址,当我们访问www.baidu.com它能知道访问的是某个ip地址的服务器,这时需要一种机制能够完成从域名(FQDN)到主机识别的ip地址之间的转换,DNS没出现的时候,这个解析过程是通过hosts文件来记录域名和ip的对应关系,但是host文件有缺陷,只能作用于本机,不能更新同步所有的主机使用,管理起来相当困难。
DNS是一个分布式,分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。DNS利用类似到处抓那个的目录结构将主机名的管理分配在不同层级的DNS服务器中,经过分层管理,每一集DNS服务器负责部分域名信息,这也就减轻了DNS服务器的负载,同时也方便记录的更新同步。
DNS服务
dns工作的tcp和udp的53端口,tcp的53端口主要用来传输数据,而udp的53端口用来查询
在linux中,dns服务器的软件一般使用的是BIND:Bekerley Internat Name Domain,目前这个软件是由ISC组织来维护,其背后的查询过程是根据数据来查询的
本地名称即系配置文件:hosts
/etc/hosts Linux系统
C:\Windows\System32\drivers\etc\hosts windows系统
两者的书写格式相同,格式如下:
1.1.1.1 www.abc.com
1.1.1 www.def.com
FQDN是Full Qualified Domain Name的简称,叫完整主机名,完整主机名是由主机名和域名构成。那什么是主机名和域名呢,域名是你到域名注册机构注册的二级域,比如baidu.com,我们平时访问的www.baidu.com当中的www就是主机名,主机名和域名之间用实心的点号表示。
在学习文件系统是知道目录结构的最顶层是根目录,根是一切文件的七点,DNS同根文件系统一样都是倒树状结构,在最顶层是由一个叫做根服务器,主要负责顶级域名的管理,所谓顶级域名就是像.com、.cn 、.net 、 .gov 、.org 、.edu等等,在下面的顶级域名服务器则负责其所对应的二级域名。如baidu.com,在接下来二级域名服务器负责对应的主机名称解析或者其三级域名解析,如nes.baidu.com,依次类推
其中根节点是由分布在世界各地的13台服务器组成,其中10台位于美国地区,另外三台设置与英国、瑞典和日本,在13太根服务器当中有1台为主根服务器放置在美国,其余12台均为辅助根服务器,所有的根服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和ip地址的管理
DNS域名
根域
一级域名:Top Level Domain 简称tld
com edu mil gov net org int
可以分为三类:组织域、国家域(.cn .ca .hk .tw),反向域
二级域名
三级域名
最多127级域名
ICANN(The Internet Corporation for Assign Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名以及国家和地区顶级域名系统的管理、以及根服务器系统的管理
DNS解析
DNS查询类型
递归查询:只发出一次请求
迭代查询:发出多次请求
DNS名称解析方式
名称---ip:正向解析
ip-----名称:反向解析
注意:二者的名称空间,不是同一个空间,即分为同一颗树,一次,也不是同一个解析库
一次完整的查询请求经过的流程
--->hosts文件----->DNS local cache ---->DNS server(rescursion)
自己负责解析的域:直接查询数据库并返回答案
不是自己负责解析的域:server cache---->iteration(迭代)
解析答案
可定答案
否定答案:不存在查询的键,因此,不存在与其查询键对应的值
权威答案:有直接负责的DNS服务器返回的答案
非权威答案
DNS服务器的类型
主DNS服务器:维护所负责解析的域树数据库的那台服务器,读写操作均可进行
从DNS服务器:从主DNS服务器哪里或其他的从DNS服务器哪里复制一份,但只能进行读操作
缓存DNS服务器(转发器)
复制操作的实方方式
序列号:数据库的版本号,主服务器内容发生变化时,其版本号迪则呢过
刷新时间间隔:refresh,从服务器没多久到主服务器检查顺序号更新情况
重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔,此时间比刷新时间要短
过期时长:exprire,从服务器始终联系不上主服务器时,多久之后放弃从主服务器同步数据,停止提供服务否定答案的缓存时长
主服务器通知从服务器随时更新数据
区域传送
全量传送:传送整个数据库 axfr
增量传送:仅传送变化的数据 ixfr
区域(zone)和域(domain)
baidu.com 域
FQDN--->ip 正向解析库
ip--->FQDN 反向解析库
区域数据库文件
资源记录Resource 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 Exchange邮件交换器,优先级0-99,数字越小,优先级越高
资源记录的格式
语法 name [TTL] IN RR_TYPE value
SOA:
name:当前区域的名字,例如:magedu.com或者2.3.4.in-addr.arpa
value:有多部分组成
当前区域的区域名称(也可以使用主DNS服务器名称)
当前区域管理员的邮箱地址,但地址中不能使用“@”符号,使用点号代替
主从服务协调属性的定义以及否定答案的ttl
例如:
magedu.com. 300 IN SOA ns1.magedu.com. admin.magedu.com. (
2016092501 ;序列号位数不能超过10位serial
2H ;刷新时间 refresh
10M ;重试时间 retry
1W ;过期时间 expire
7D) ;否定答案的TTL值 negative answer
NS
name:当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如:ns.magedu.com.
注意:一个区域可以有多个NS记录
例如:
magedu.com. 300 IN NS ns1.magedu.com.
magedu.com. 300 IN NS ns2.magedu.com.
MX
name:当前区域的区域名称
value:当前区域某邮件交换器的主机名
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
注意:MX记录可以有多个,但每个value之前应该有一个数字表示其优先级
A
name:某FQDN例如:www.magedu.com
value:某iPv4地址
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 2.2.2.2
bbs.magedu.com. IN A 1.1.1.1
注意:
*.magedu.com. IN A 3.3.3.3
magedu.com. IN A 4.4.4.4
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
AAAA
name:FQDN
value:ipv6
跟A记录差不过,只不过FQDN对应的地址是128位的ipv6地址
PTR
name:ip地址有特定格式,ip反过来写,而且加特定后缀,如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
简写为
4.in-addr.arpa. IN PTR www.magedu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
CNAME
name:FQDN格式的别名
value:FQDN格式的正式名称
例如:
web.magedu.com. IN CNAME www.magedu.com
注意:
值可以从全局继承
表示当前区域的名称
相邻的两条记录其name相同时,后一条的name可省略
等类型的记录的value为FQDN,此FQDN应该有一个A记录(正向区域)
域名注册:
代理商:万网,新网,godaddy
注册完成之后,想用自己专用服务来解析,在后台进行管理,把NS记录执行服务器的名称,和A记录指向的服务器地址
BIND的安装配置
BIND: Bekerley Internat Name Domain 由ISC组织维护
dns协议
bind:dns协议的一种实现
named:bind程序的运行的进程名
程序包
bind-utils:被bind和bind-utils包中的程序功用用到的库文件
bind:提供的dns server程序以及常用的测试程序
bind-chroot:选装,让named运行与jail(沙箱)模式下(保证bind的安全)
bind
主配置文件:/etc/named.conf
或包含进来其他文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
服务脚本文件
/etc/rc.d/init.d/named unbound.service
解析库文件
/var/named目录下,一般名字为zone_name.zone
注意:
一台DNS服务器可同时为多个区域提供解析
必须要有根区域解析库文件named.ca
还应该有两个区域解析库文件 localhost和127.0.0.1
正反向解析
正向:named.localhost
反向:named.loopback
rndc:remote name domain controller
默认与bnd安装在同一主机,且只能过127.0.0.1链接named进程
提供辅助性的功能 953/tcp
bind程序安装完成之后,默认即可做缓存名称服务器使用,如果没有专门负责解析的区域,直接即可启动服务
CentOS6 service named start
CentOS7 systemctl strat named.service
配置文件
主配置文件
全局配置段:options { …}
日志配置段:logging {…}
区域配置段:zone{…} 本机能够为那些zone进行解析,就要定义那些zone
注意:任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的ip地址上,每个配置语句必须以分号结尾
缓存名称服务器的配置
监听能与外部通信的地址
listen-on port 53
lsten-on port 53 { 10.1.253.65;}
学习时建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaslde no ;
关闭仅允许本地查询
注释allow-query { localhost;};
检查配置文件语法错误
named-checkconf [ /etc/named.conf]
解析库文件语法检查
named-checkzone “magedu.com” /var/named/magedu.com.zone”
测试工具
dig host nslookup
dig命令
dig [-t RR_TYPE] [@server] [query options]
用于测试dns系统,因此不会查询hosts文件
查询选项
+[no]trace 跟踪解析过程
+[no]recurse 进行递归解析
反向解析
dig -x ip
模拟完全区域传送
dig -t axfr domain [@server]
host命令
host[ -t RR_TYPE] name server_ip
nslookup命令
nslookup [-options][name][server]
交互式模式
nslookup>
server ip,已指定的ip为dns服务器进行查询
set q=RR_TYPE:要查询的资源记录类型
name:要查询的名称
rndc命令:named服务控制命令
rndc status 查看状态
rndc flush 清空dns服务器的所有缓存记录
rndc reload 重载主配置文件和区域解析库文件
rndc zone 重载区域解析库文件
rndc trace 递增debug一个级别
rndc reconfig 重载主配置文件
rndc retransfer zone 手动启动区域传送过程,而不管序列号是否增加
rndc querylog 开启或关闭查询日志文件/var/log/messages
配置解析一个正向区域
定义区域
建立区域数据文件
让服务器重载配置文件和区域数据文件
以xiao.com为例
在主配置文件或主配置文件辅助的配置文件中实现
zone “xiao.com” IN {
type master ;
file “zone_name.zone”;
};
注意:区域即为域名
建立区域数据文件(主要记录为A或AAAA)
在/var/named目录下创建区域数据文件
文件为/var/named/xiao.com.zone
$TTL 300
@ IN SOA dns.xiao.com. admin.xiao.com. (
2016092501
3H
10M
3D
7D)
IN SOA ns1.xiao.com.
IN MX 10 mx1.xiao.com.
ns1 IN A 172.18.16.112
mx1 IN A 172.18.16.113
www IN A 17218.16.115
web IN CNAME www
bbs IN A 172.18.16.1
bbs IN A 172.18.16.2
修改此文件的属主为named并将权限改为640
chown named xiao.com.zone
chmod 640 xiao.com.zone
检查语法错误
named-checkconf
named-checkzone “xiao.com” /var/named/xiao.com.zone
让服务器重新加载配置文件
service named restart
配置一个反向区域
定义区域
在主配置文件或主配置文件辅助文件中实现
zone “16.18.172.in-addr.arpa IN {
type master ;
file “172.18.16.zone” ;
};
注意反向区域的名字反写的网段地址.in-addr.ara
定于区域解析库文件(主要记录为PTR)
示例:区域名称为172.18.16.zone
@ IN SOA dns.xiao.com. admin.xiao.com. (
2016092501
1H
10M
3D
7D)
IN NS ns1.xiao.com.
112 IN PTR ns1.xiao.com.
113 IN PTR mx1.xiao.com.
115 IN PTR www.xiao.com.
1 IN PTR bbs.xiao.com.
2 IN PTR bbs.xiao.com.
修改此文件的属主为named并将权限改为640
chown named 172.18.16.zone
chmod 640 172.18.16.zone
检查语法错误
named-checkconf
named-checkzone “16.18.in-addr.arpa” /var/named/ 172.18.16.zone
让服务器重新加载配置文件
service named restart
测试:使用其他主机来解析
正向解析
反向解析
主从服务器
注意:从服务器区域级别的概念
配置一个从区域
在从服务器上
定义区域
zone “xiao.com” IN {
type slave ;
masters
file “slaves/xiao.com.zone” ;
};
zone “1.10.in-addr.arpa” IN {
type slave ;
masters
file “slaves/10.1.zone” ;
};
从服务器配置
主服务器配置,只需要在区域数据文件中添加从服务器的NS记录和A记录即可
配置文件语法检查
named-checkconf
重载配置
rndc reload
测试:只需将主服务的区域数据文件序列号变化,重载服务即可,查看日志是否有如下内容
从服务器,不需要重载,查看日志,看是否传输成功
注意:
应该为一台独立的名称服务器
主服务器的区域解析库文件中必须有一条NS记录执行从服务器
从服务器只需要定义区域,而无需提供解析库文件;解析库文件应该放置于/var/named/slaves目录中
主服务器允许从服务器区域传送
主从服务器的时间应该同步,可通过ntp进行
程序的八本应该保持一致,否则,应该从高,主低
DNS服务是由named用户运行的,/var/named目录named用户没有写权限,数据时不会直接同步的,而/var/named/slaves目录的属主和属组是named用户,所以named用户可以对该目录可写,所有区域传送文件存在在此
在主服务器上配置
确保区域数据文件中每个从服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录且此A后面的地址为真正的从服务器的ip地址,如果没有添加NS记录和A记录,主服务器配置了刷新时间,从服务器以哪个配置的时间到主服务器检查序列号的变化情况,如果发生变化,就会同步数据
子域授权
正向解析区域授权子域的方法(主服务器)
在主区域数据文件中添加如下内容
ops.xiao.com. IN NS ns1.ops.xiao.com.
ops.xiao.com. IN NS ns2.ops.xiao.com.
ns1.ops.xiao.com. IN A 10.1.252.100
ns2.ops.xiao.com. IN A 10.1.252.198
从服务器添加一个区域和区域数据文件即可
zone “ops.xiao.com” IN {
type master ;
file “ops.xiao.com.zone” ;
};
在区域数据库目录下创建区域数据文件ops.xiao.com.zone
$TTL 300
@ IN SOA dns.ops.xiao.com. admin.ops.xiao.com. (
2016092501
3H
10M
3D
7D)
IN SOA ns1.ops.xiao.com.
ns1.ops.xiao.com. IN A 10.1.252.100
www IN A 10.1.252.101
重载配置
rndc reload
这时候就可以在主服务器上测试子域是否能解析
dig -t A www.ops.xiao.com @172.18.16.112
转服服务器
注意:被转发的服务器允许你为当前服务器做递归
区域转发:仅转发对某特定区域的解析请求
zone “zone_name” IN {
type forward ;
forwar {first|only} ;
forwarders { server_ip; } ; 将收到的请求转发给那台dns服务器
first:首先转发,转发器不响应时,自行去迭代查询(查找根)
only:只转发,不响应时,不做任何回应
示例:
另外一个DNS服务器其对xiao.com域本地解析不了,需要将请求转发到该域的dns服务器上,定义一个zone类型为forward
zone "xiao.com" IN {
type forward;
forward only;
forwarders { 10.1.253.65; 10.1.252.198; };
};
测试:在本机上解析www.xiao.com使用本机来解析
全局转发:针对凡本地没有通过zone定义的区域查询请求通通转给某转发器
options {
forward only|first;
forwarders { server ip ; };
};
注意:最好关闭dnssec功能
dnssec-enable no;
dnssec-validation no;
bind中的安全相关的配置
acl访问控制列表,把一个或多个ip地址归并一个命令的集合,随后通过此名称即可对此集合内的所有主机实现统一调用
acl acl_name {
ip;
net/prelen;
};
示例:
acl mynet {
10.1.0.0/16;
127.0.0.0/8;
};
bind中有四个内置的acl
none:没有一个主机
any:任意主机
local:本机
localnet:本机所在的ip所属的网络
注意:只能先定义,后使用,因此一般定义在配置文件中,处于options前面
访问控制指定
allow-query { };允许查询的主机白名单
allow-transfer { };允许向那些主机做区域传送,默认为向所有主机传送,应该配置仅允许从服务器能够传送
allow-recursion { }; 允许那些主机向当前dns服务器发起递归查询请求
allow-update { };DDNS,允许动态更新区域数据库中的文件
bind view 视图
view view_name {
match-clients { };
zone
zone
…
};
示例:
view internal {
match-clients { 10.1.252.100; };
zone “xiao.com” IN {
type master;
file ‘”xiao.com.zone”;
};
};
view external {
match-clients { any; };
zone “xiao.com” IN {
type master;
file ”xiao.com.zone”;
};
};
注意:
一个bind服务器可以定义多个view,每个view定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
一旦启用了view,所有的zone都只能定义在view中
仅在允许递归请求的客户端所在view中定义根区域
客户端请求到达时,是自上而下检查每个view所服务的客户端列表
DNS排错
#dig A example.com
<<>> DiG9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<-opcode: QUERY, status: NOERROR, id: 30523
...
SERVFAIL:Thenameserverencountered a problem while processing the query.
可使用dig +trace排错,可能是网络和防火墙导致
NXDOMAIN:The queried name does not exist in the zone.
可能是CNAME对应的A记录不存在导致
REFUSED:The nameserverrefused the client's DNS request due to policy restrictions.
可能是DNS策略导致
NOERROR不代表没有问题,也可以是过时的记录
查看是否为权威记录,flags:aa标记判断
被删除的记录仍能返回结果,可能是因为*记录存在
如:*.example.com.INA172.25.254.254
注意“.”的使用
避免CNAME指向CNAME记录,可能产生回环
test.example.com. IN CNAME lab.example.com.
lab.example.com. IN CNAME test.example.com.
正确配置PTR记录,许多服务依赖PTR,如sshd,MTA
正确配置轮询round-robin记录
压力测试
vim test.txt
xiao.com NS
www.xiao.com A
web.xiao.com A
bbs.xiao.com A
ops.xiao.com A
使用queryperf工具进行压力测试
queryperf –d test.txt –s 127.0.0.1
打开日志功能
rndc querylog
rndc status
queryperf –d test.txt -s 127.0.0.1
wc -l /var/log/messages 查看里面的压力测试查询的记录