DNS:Domain Name Service 应用层协议
C/S,53/udp, 53/tcp
BIND:Bekerley Internat Name Domain
ISC (www.isc.org)
本地名称解析配置文件:hosts
/etc/hosts%WINDIR%/system32/drivers/etc/hosts
93.46.8.89 www.google.com
DNS域名
根域
一级域名:com, edu, mil, gov, net, org, int,arpa
组织域、国家域(.cn, .ca, .hk, .tw)、反向域
二级域名
三级域名
最多127级域名
DNS服务器类型
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔过期时长:从服务器联系不到主服务器时,多久后停止服务
通知机制:主服务器解析库发生变化时,会主动通知从服务器
DNS解析
DNS查询类型:
递归查询
迭代查询
名称服务器:域内负责解析本域内的名称的主机
根服务器:13组服务器
解析类型:
FQDN --> IP
IP --> FQDN
正反向解析是两个不同的名称空间,是两棵不同的解析树
一次完整的查询请求经过的流程:
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server
(recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>
二级域名DNS
示例:
访问www.baidu.com
DNS结构
根据域名分散的DNS服务器列表,顶级域分别指向.com、.net等域名的DNS服务器,.com又指向了2级域名baidu所在的DNS服务器,最后在二级域名的DNS中找到www域名的主机IP,至此www.baidu.com的IP找到了。
访问流程图
DNS服务器搭建
BIND的安装配置:
dns服务程序包:bind,unbound
程序名:named,unbound
程序包:yum list all bind*
bind:服务器
bind-libs:相关库
bind-utils:客户端
bind-chroot: /var/named/chroot/
服务脚本和名称:/etc/rc.d/init.d/named /usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ ZONE_NAME.ZONE
注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根域文件:named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
rndc:remote name domain controller,
默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程提供辅助性的管理功能;953/tcp
主配置文件:
/etc/named.conf
全局配置:options {};
其中listen-on的地址可以设置成localhost,否则换IP忘记改就会出现DNS无法访问。
allow-query:允许谁查询,可以写any;也可以写192.168.1.0/24
allow-transfer {192.168.1.3} :允许向192.168.1.3传输区域数据,none拒绝所有
服务监听UPD53和TCP53,UDP53用来查询,TCP53用来主从同步
日志子系统配置:logging {};
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone “ZONE_NAME” IN {};
任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
修改完配置可以用rndc reload重新加载配置,不用重启服务
缓存名称服务器的配置:
监听外部地址即可
dnssec: 建议关闭dnssec,设为no
主DNS名称服务器:
(1) 在主配置文件中定义区域
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file “ZONE_NAME.zone”;
};
例如指向named.ca的zone:
zone "." IN { zone的名字
type hint; hint表示是根域
file "named.ca"; zone的文件
};
(2) 定义区域解析库文件
出现的内容
宏定义
资源记录
添加新的区域解析库:
在/var/named/里有模板文件named.localhost,新建其他解析文件推荐复制这个模板来修改
cp -p named.localhost test.com.zone
打开test.com.zone
资源记录格式:name [TTL] IN rr_type value
这里直接先贴上修改好了的样子再来解释
$TTL 1D
@ IN SOA @ ms.test.com. admin.test.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ms.test.com
ms A 192.168.1.2
db A 192.168.1.3
www CNAME web
web A 192.168.1.10
web A 192.168.1.12
解释:
$TTL 1D
TTL是有效周期,这里定义默认为1天
@ IN SOA ms.test.com. @ admin.test.com. (
“@”引用当前区域的名字(name),也可以写成
test.com IN SOA
IN和域之间之间省略了TTL,所以从默认TTL继承,
如果要设置不同TTL:test.com 88888 IN SOA
“IN” 照抄就行
SOA是资源纪录类型(rr_type)
ms.test.com. @ admin.test.com. (
ms.test.com. 是主DNS服务器的名称
admin.test.com.是管理员邮箱地址,因为这里的@有特殊含义
所以邮箱中的@用.代替,admin.test.com.等同admin@test.com.
0 ; serial
文件版本,数值越大说明版本越新
1D ; refresh
slave服务器从主服务器检查文件更新的间隔,这里是1天
1H ; retry
slave服务器检查失败等待多久再次尝试,这里是1小时
1W ; expire
slave服务器多久没同步则slave服务器数据失效,这里是1周
3H ) ; minimum
不存在记录的缓存时长,比如有人查询了wwww.test.com,首次查询wwww不存在
下次再查询在缓存里找到这个记录的结果是不存在就直接返回,不重新查询。
NS ms
当前区域记录其他DNS的服务器名字,这里只写了主服务器的
如果有从服务器则多加几行填上从服务器
现在是省略写法,NS的完整写法是 test.com NS ms 或者 @ NS ms
ms A 192.168.1.2
指定了ms域名的IP地址,完整写法是
ms.test.com.省略时会自动加上.test.com.
db A 192.168.1.3
db域名的地址
www CNAME web
www的别名是web,也可以对应其他域名例如www.test2.com
web A 192.168.1.10
web A 192.168.1.11
web对应的IP,可以有多个,当有多个IP时会轮询,可以实现简单的负载均衡
A纪录其他写法:
通过泛域名解析至某特定地址,可以避免用户输错时给了错误地址
例如:
@ A 192.168.1.10
* A 192.168.1.10
@可以把test.com解析到192.168.1.10
*可以把其他不匹配其他不符合的地址
$GENERATE 1-254 db$ A 192.168.2.$
这个写法可以自动解析例如:
db1.test.com ---->192.168.2.1
.
↓
db254.test.com---->192.168.2.254
保存好文件后,还要在主配置文件里添加zone信息
/etc/named.conf
也可以在专门存放zone信息的文件里添加
/etc/named.rfc1912.zones
zone "test.com" IN {
type master;
file "test.com.zone";
};
邮箱域名解析:
mail@test.com解析,在zone文件中添加一条MX记录
@ MX 10 mail
mail A 192.168.1.12
10表示优先级,完整写法
test.com. IN MX 10 mail
用dig可以查到邮箱域名的DNS信息
dig -t mx 域名
如果要查指定DNS服务器上的信息
dig -t mx test.com @114.114.114.114
其他纪录类型:
AAAA:
name: FQDN
value: IPv6
PTR:
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而
有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.test.com.
TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,
如:SPF(反垃圾邮件)记录,https验证等
主配置文件语法检查:
named-checkconf
解析库文件语法检查:
named-checkzone 域名 库文件路径
named-checkzone test.com /var/named/test.com.zone
rndc status|reload ;service named reload
反向解析
区域名称:网络地址反写.in-addr.arpa.
例如:
192.168.1 --> 1.168.192.in-addr.arpa
添加反向解析库文件
zone信息添加
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
}
假设现有同网段内其他服务器地址
ftp A 192.168.1.10
web A 192.168.1.11
"192.168.1.zone"文件内容:
$TTL 1D
@ IN SOA db1.test.com. admin.test.com ( 1 1D 1H 1W 1H)
NS db1
db1 A 192.168.1.9
10 PTR ftp.test.com.
11 PTR web.test.com.
这里是简写,完整写法是10.1.168.192.in-addr.arp PTR ftp.test.com
SOA内容简写,对应是版本号,同步时间隔,尝试间隔,失效时间,不存在缓存时间
当前设定的DNS地址是192.168.1.2,测试反向解析
dig -x 192.168.1.10 @192.168.1.2
可以得到反向解析结果
从服务器设置
zone信息
zone "test.com" IN {
type slave;
masters {192.168.1.2}
file "slave/test.com.slave.zone";
};
在主服务器修改zone解析文件后如果要自动推送给从服务器,需要修改版本号,并且添加NS记录,把从服务器的IP加上
子域
子域授权:分布式数据库
正向解析区域子域方法
父域DNS设置
关闭dnssec功能:
vim /etc/named.conf
dnssec-enable no;
dnssec-validation no;
父域
test.com (192.168.1.2)
子域
aa.test.com (192.168.1.3)
父域test.com.zone文件定义字域
$TTL 1D
@ IN SOA ns1.test.com. admin.test.com ( 1 1D 1H 1W 1H)
NS ns1
aa NS ns2
ns1 A 192.168.1.9
ns2 A 192.168.1.3
子域aa.test.com.zone文件
$TTL 1D
@ IN SOA ns2.test.com. admin.test.com ( 1 1D 1H 1W 1H)
NS ns1
ns1 A 192.168.1.3
www A 192.168.1.13
转发服务器
全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
Options {
forward first|only;
forwarders { ip;};
};
特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
zone “ZONE_NAME” IN {
type forward;
forward first|only;
forwarders { ip;};
};
dig命令
dig [-t type] name [@SERVER] [query options]
dig只用于测试dns系统,不会查询hosts文件进行解析
查询选项:
dig +trace test.com:跟踪解析过程
recurse:进行递归解析
测试反向解析:
dig -x IP
或者
dig –t ptr reverseip.in-addr.arpa
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr test.com @10.10.10.10
dig –t axfr 100.1.10.in-addr.arpa @192.168.1.2
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net
host命令
host [-t type] name [SERVER]
host –t NS test.com 192.168.1.2
host –t soa test.com
host –t mx test.com
host –t axfr test.com
host 1.2.3.4
rndc命令
rndc:
rndc --> rndc (953/tcp)
rndc COMMAND
子命令
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录