1.原理
1.1 域名空间结构
根域服务器一共有13个,根域只保存顶级域的记录,以下子域以此类推。
a.root-servers.net.
b.root-servers.net.
c.root-servers.net.
d.root-servers.net.
e.root-servers.net.
f.root-servers.net.
g.root-servers.net.
h.root-servers.net.
i.root-servers.net.
j.root-servers.net.
k.root-servers.net.
l.root-servers.net.
m.root-servers.net.
1.2 域名服务器类型
维护资源记录:
- 主NS服务器(Primary Name Server):可进行域名记录写入的服务器
- 辅助NS服务器(Secondary Name Server):不可写入域名记录,只能从主同步,从主同步的过程叫区域传递(Zone Transfer)
不维护资源记录
- 仅缓存服务器(Cache-only Server):除专门的Cache Server外,一般所有DNS服务器都会开启Cache功能
1.2.1 区域传递
区域 | 描述 |
---|---|
主要(Primary) | DNS数据的一个读写副本 |
辅助(Secondary) | DNS数据的一个只读副本,需要指定复制的Master |
1.3 递归与迭代
递归查询:
首问负责制
- 本地DNS服务器返回的结果,要么返回域名对应的IP地址,要么返回域名不存在
- 本地DNS向权威服务器查询时,权威服务器返回的结果,要么返回域名对应的IP地址,要么返回域名不存在
迭代查询:
非权威服务器的应答:
- 检查自身缓存
- 使用转发器
- 使用根提示,进行迭代查询
根提示(Root Hints):包含在DNS服务器软件中,提供了根服务器IP地址
转发器(Forwarder):自身不进行迭代查询,将DNS请求转发给指定的服务器
1.4 区域(Zone)和资源记录(Resource Records)
1.4.1 区域(Zone)
Zone是DNS名称空间中特定的一部分,Zone是DNS管理的单元,每个Zone对应的是物理上的数据文件,数据文件中存储了资源(RR)记录
Zone的分类:
- 根据存储的RR类型来分:
- 正向查找区域(Forward lookup zone)-
根据域名查IP
:A、MX、SRV、NS、SOA、CNAME... - 反向查找区域(Reverse lookup zone)-
根据IP查域名
:PTR、NS、SOA
- 根据区域传递时的角色来分:
- 主区域(Primary Zone)
- 辅助区域(Secondary Zone)
- 存根区域(Stub Zone):制包含用于定位NS服务器的记录
1.4.2 域和子域
bigsky.cn就是一个Zone,其下可以划分出多个域名www.bigsky.cn、ftp.bigsky.cn等
bigsky.cn还可以划分出子域sub.bigsky.cn,子域中可以包含多个域名www.sub.bigsky.cn、ftp.sub.bigsky.cn等
管理时:
- 可以bigsky.cn是1个Zone文件,sub.bigsky.cn是一个Zone文件,使用两套DNS服务器管理
- 也可以将所有的域和子域名放在一个Zone文件中,使用一套DNS服务器管理
1.4.3 资源记录(Resource Records)
所有Zone文件必须有:
- SOA 起始授权(Start of Authority):表示一个授权的Zone开始,Zone文件的第一条记录
- NS 名称服务器(Name Servers):表示Zone的所有NS服务器
最常用:
- A 主机记录(Host Address Record)
- CNAME 别名(Canonical Name Record)
- MX 邮件交换记录(Mail Exchange Record):表示Zone中的邮件服务器记录
常用:
- PTR 指针记录(Pointer Record):反向解析记录
- SRV 服务位置记录(Service Locator Record)
- AAAA IPv6DNS记录(IPv6 DNS Record)
- TXT 说明性信息(Text Record)
1.5 反向查找区域与PTR记录
反向查找都在arap
这个顶级域名下的in-addr.arap
子域下,反向查找的PTR记录是将IP地址倒着写拼接in-addr.arap
子域
例如:
112.168.2.46
的反向查找PTR记录为46.2.168.112.in-addr.arpa.
,它属于2.168.112.in-addr.arpa.
这个子域
2.bind
2.1 安装
yum -y install bind bind-utils
2.2 bind配置文件
主配置文件/etc/named.conf
2.2.1 配置文件语法
配置文件分为多个语句块,每段语句以;
结束,以下为options
、logging
、zone
3个语句块例子
options {
...
};
logging {
...
};
zone {
...
};
2.2.2 常用语句
2.2.2.1 acl
acl string { address_match_element;... };
定义一个命名的IP地址匹配列表
内建的acl:
- any:匹配所有主机
- none:匹配空主机
- localhost:匹配系统的所有网络接口的IPv4和IPv6地址
- localnets:匹配本机IP所属的网络内的IPv4和IPv6地址
address_match_element
语法:[ ! ]( ip_address | ip_prefix | key key_id | acl_name | { address_match_list } ),多个address_match_element按顺序匹配
例子:
1.2.3/24;!1.2.3.13;
表示1.2.3.0/24网段,后面!1.2.3.13不生效
!1.2.3.13;1.2.3/24;
表示1.2.3.0/24网段,除1.2.3.13外的所有地址
后续在某些选项中需要填写ip地址时,可以使用定义好的acl代替
例子:
acl innet {
10.189.9.0/24;
127.0.0.1/8;
192.168.0.0/24;
};
options {
directory "/var/named";
allow-recursion { innet; };
};
2.2.2.2 view
EDNS的配置在这里,可以配合acl实现,对于不同的源地址,实现不同的解析。
#定义电信IP的列表
acl telecom {
10.189.9.0/24;
};
#定义联通IP的列表
acl unicom {
10.189.8.0/24;
};
options {
directory "/var/named";
allow-recursion { localnets; }; #定义了允许递归请求的主机为NS所在网络的所有主机
allow-query { any; };
};
#定义电信的智能DNS区域
view telecom {
match-clients { telecom; };
zone "mageedua.com" IN {
type master;
file "telecom.mageedua.com.zone";
};
};
#定义联通的智能DNS区域
view unicom {
match-clients { unicom; };
zone "mageedua.com" IN {
type master;
file "unicom.mageedua.com.zone";
};
};
2.2.2.3 options
子句 | 说明 |
---|---|
directory "path" | 定义服务器区数据库文件的工作目录,配置文件中所有使用的相对路径,指的都是在这里配置的目录下。Ubuntu 默认为 /var/cache/bind |
notify yes/no | 若 named 是主服务器,当区数据库变化时将自动通知相应区的从服务器,默认为 yes |
recursion yes/no | 是否使用递归式 DNS 服务器,默认为 yes。如果作为权威服务器,建议配置为no |
transfer-format one-answer/many-anser | 设置从主服务器向从服务器复制数据的方式,使用在主域名服务器上,是否允许在一条消息中放入多条应答信息,默认值为 many-answer |
forwarders {IPaddrs} | 设置全局转发器,列出要用作转发器的服务器 IP 地址 |
forward only/first | 若值为 only,则服务器缓存数据并查询转发器,但从不查询其他的任何服务器,若转发器不能响应查询则查询失败;若值为 first,则在转发查询失败或没有查到结果时,会在本地发起正常查询。默认为 first |
2.3 Cache-only服务器
修改文件/etc/named.conf
options {
listen-on port 53 { any; };
//listen-on port 53 { 127.0.0.1; };
...
//allow-query { localhost; };
allow-query { any; };
...
};
环境没有IPv6时,禁用IPv6解析
echo 'OPTIONS="-4"' >> /etc/sysconfig/named
检查配置文件是否正确
named-checkconf
重启服务
systemctl restart named
2.3.1 查看BIND中Cache的内容
Cache的内容默认在内存中,通过rndc
命令将内存中的Cache写入磁盘文件
rndc dumpdb [-all|-cache|-zones|-adb|-bad|-fail] [view ...]
dump文件的位置在/etc/named.conf
中配置
[root@centos7-wht named]$ grep dump /etc/named.conf
dump-file "/var/named/data/cache_dump.db";
例子:
将内存中的Cache写入磁盘文件
rndc dumpdb -cache
2.4 正向查询服务器
2.4.1 配置文件添加zone语句
格式:
zone "zone_name" [ class ] {
type type_string;
file "文件名";
};
#参数解释
zone_name 子域名称
class 默认为IN,即internet
type 域的类型:
hint 说明zone是根提示
master|primary zone在主从中是master|primary服务器
slave|secondary zone在主从中是slave|secondary服务器
forward
redirect
stub
static-stub
delegation-only
file zone文件名,默认位置是相对路经由option子语句中的directory指定,为/var/named,也可以填写绝对路经
例子:
zone "bigsky.cn" IN {
type master;
file "named.bigsky.cn";
};
2.4.2 配置zone数据文件
zone数据文件中的内容为资源记录,前2个记录必为SOA
、NS
记录
资源记录有5个字段:
- Domain:被查询的域或子域
- TTL:记录被保存在缓存中的时间,以秒为单位
- Class:记录类别,通常是IN
- Type:记录类型,例如:SOA、NS、A、MX...
- RData:域映射的资源数据
2.4.2.1 SOA记录
记录主名称服务器,管理员的邮件地址,和一些区域更新的属性,使用()
可以折行。
域名串的根域符号
.
不能�省略
$TTL 1D
bigsky.cn. IN SOA ns1.bigsky.cn. root.bigsky.cn. (
1 ; 序列号,序号越大表明资料越新,每次Zone文件更新,都需要修改Serial数值
1D ; Slave服务器多少时间更新数据
1H ; Slave服务器更新失败,多长时间后重试
1W ; 若Slave服物器无法从Master更新数据,原有数据的有效期
3H ) ; DNS negative answer ttl
# $TTL 整个zone的RR的缓存时间,每条单独的RR可以省略TTL配置
# ns1.bigsky.cn. 为主名称服务器(FQDN)
# root.bigsky.cn. 管理员的邮件地址,原邮件地址中的@用.代替
2.4.2.2 NS记录
记录指定域名的权威名称服务器
bigsky.cn. IN NS ns1.bigsky.cn.
bigsky.cn. IN NS ns2.bigsky.cn.
2.4.2.3 A记录
记录主机名转换的地址,如果一个主机名有多个A记录,通过轮询的方式来实现简单的负载均衡
srv1.bigsky.cn. IN A 10.0.0.1
srv1.bigsky.cn. IN A 10.0.0.2
2.4.2.4 CNAME记录
记录主机名的别名
bbs.bigsky.cn. IN CNAME www.bigsky.cn.
ftp.bigsky.cn. IN CNAME www.bigsky.cn.
linux.bigsky.cn. IN CNAME www.bigsky.cn.
2.4.2.5 MX记录
用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器
如邮箱地址为[email protected],查询流程为:
- 查询
bigsky.cn
的MX记录为mail.bigsky.cn
- 查询
mail.bigsky.cn
的A记录
MX记录示例,10
为邮件服务器的优先级
,数值越小越优先
bigsky.cn. IN MX 10 mail1.bigsky.cn.
2.4.2.6 书写例子
默认zone文件位置,/var/named/
FQDN(全域名)写法
$TTL 1D
bigsky.cn. IN SOA ns1.bigsky.cn. root.bigsky.cn. (
1 ; 序列号,序号越大表明资料越新,每次Zone文件更新,都需要修改Serial数值
1D ; Slave服务器多少时间更新数据
1H ; Slave服务器更新失败,多长时间后重试
1W ; 若Slave服物器无法从Master更新数据,原有数据的有效期
3H ) ; DNS negative answer ttl
bigsky.cn. IN NS ns1.bigsky.cn.
bigsky.cn. IN NS ns2.bigsky.cn.
bbs.bigsky.cn. IN CNAME www.bigsky.cn.
ftp.bigsky.cn. IN CNAME www.bigsky.cn.
linux.bigsky.cn. IN CNAME www.bigsky.cn.
srv1.bigsky.cn. IN A 10.0.0.1
srv1.bigsky.cn. IN A 10.0.0.2
bigsky.cn. IN MX 10 mail.bigsky.cn.
mail.bigsky.cn. IN A 10.0.0.3
简略写法
$TTL 1D
$ORIGIN bigsky.cn.
@ IN SOA ns1 root.bigsky.cn. (
1 ; 序列号,序号越大表明资料越新,每次Zone文件更新,都需要修改Serial数值
1D ; Slave服务器多少时间更新数据
1H ; Slave服务器更新失败,多长时间后重试
1W ; 若Slave服物器无法从Master更新数据,原有数据的有效期
3H ) ; DNS negative answer ttl
@ IN NS ns1
@ IN NS ns2
bbs IN CNAME www
ftp IN CNAME www
linux IN CNAME www
srv1 IN A 10.0.0.1
IN A 10.0.0.2
@ IN MX 10 mail
mail IN A 10.0.0.3
-
$ORIGIN
,起点域名,需要以.
结尾 -
@
表示起点域名,没有配置$ORIGIN
时是zone语句中的zone_name,如bigsky.cn
- 当域名不写成FQDN时,表示与起点域名的拼接,如
ns1
表示ns1.bigsky.cn
- 当RR的Domain字段为空时,表示与上一条记录的Domain相同
2.5 反向查询服务器
2.5.1 配置文件添加zone语句
zone "0.0.10.in-addr.arpa" IN {
type master;
file "named.0.0.10";
};
2.5.2 配置zone数据文件
只包含SOA
、NS
、PTR
3种记录
vim /var/named/named.0.0.10
$TTL 1D
@ IN SOA ns1.bigsky.cn. root.bigsky.cn. (
1 ; 序列号,序号越大表明资料越新,每次Zone文件更新,都需要修改Serial数值
1D ; Slave服务器多少时间更新数据
1H ; Slave服务器更新失败,多长时间后重试
1W ; 若Slave服物器无法从Master更新数据,原有数据的有效期
3H ) ; DNS negative answer ttl
IN NS ns1.bigsky.cn.
IN NS ns2.bigsky.cn.
1 IN PTR srv1.bigsky.cn.
2 IN PTR srv1.bigsky.cn.
3 IN PTR mail.bigsky.cn.
2.6 配置文件检查
语法错误检查,不指定文件默认检查/etc/named.conf
named-checkconf
检查数据文件逻辑错误
named-checkzone zonename filename
2.7 重载配置文件
用于DNS相关配置文件的平滑更新,不用重启named服务
rndc reload
2.8 区域传递
区域传递使用TCP 53
端口
2.8.1 配置master 服务器
vim /etc/named.conf
zone "zone_name" [ class ] {
type master;
file "文件名";
};
zone file配置
$TTL 1D
@ IN SOA master节点hostname root.bigsky.cn. (
3 ; 序列号,序号越大表明资料越新,每次Zone文件更新,都需要修改Serial数值
1D ; Slave服务器多少时间更新数据
1H ; Slave服务器更新失败,多长时间后重试
1W ; 若Slave服物器无法从Master更新数据,原有数据的有效期
3H ) ; DNS negative answer ttl
@ IN NS master节点hostname
@ IN NS slave节点hostname
master节点hostname IN A master节点IP地址
slave节点hostname IN A slave节点IP地址
...
2.8.2 配置slave 服务器
配置文件添加zone语句,vim /etc/named.conf
zone "zone_name" [ class ] {
type slave;
masters { 172.16.19.53; };
file "slaves/文件名";
masterfile-format text;#可选配置,从master传递过来的文件转为文本格式,默认是二进制格式
};
例子
zone "bigsky.cn" IN {
type slave;
masters { 172.16.19.53; };
file "slaves/named.bigsky.cn";
masterfile-format text;
};
2.8.3 区域传递安全
使用allow-transfer
限制允许进行区域传递的主机,修改/etc/named.conf
文件
全局
options {
...
// 默认拒绝所有
allow-transfer { none; };
...
};
特定zone,可以覆盖全局的配置
zone "bigsky.cn" IN {
...
// 为每个zone显示指定地址
allow-transfer { 192.168.0.1;172.16.1.0/24; };
};
2.8.4 强制区域传递
在master服务器上强制发送通知
rndc notify 子域
在slave服务器上强制从主服务器拉取数据
rndc retransfer 子域
2.9 forwarder
当设置了forwarders转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由DNS转发器来完成解析工作并做缓存。
在/etc/named.conf
中配置,可以在options
中做全局配置,在zone
语句中可以为特定zone设置特定的forwarder
options {
...
forward first|only;
forwarders {
223.5.5.5;
8.8.8.8;
};
};
# forward first:优先使用forwarders DNS服务器做域名解析,如果查询不到本机再做迭代查询。
# forward only:只使用forwarders DNS服务器做域名解析,如果查询不到则返回DNS客户端查询失败。
# forwarders全局配置的转发器
zone "bigsky.cn" {
type forward; # 针对特定域名配置的转发器
forwarders { 192.168.51.39; };
};
3 bind工具
3.1 host
host [-aCdilrTvVw] [-c class] [-N ndots] [-t type] [-W time] [-R number] [-m flag] hostname [server]
#参数解释
hostname 查询的域名或IP地址
server 可以指定DNS服务器IP,默认是/etc/resolv.conf中列出的DNS服务器
-t 查询的RR类型,NS、A、MX...
-v 详细输出
-a 相当于-v -t ANY
3.2 dig
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
[ host [@local-server] {local-d-opt} [...]]
#参数解释:
@global-server 指定DNS服务器IP,默认是/etc/resolv.conf中列出的DNS服务器
domain 要查询的域名
q-type 要查询的RR类型 (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
q-class 查询的类 (in,hs,ch,...) [default: in]
q-opt 查询的选项:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
-b address[#port] (bind to source address/port)
-c class (specify query class)
-f filename (batch mode)
-i (use IP6.INT for IPv6 reverse lookups)
-k keyfile (specify tsig key file)
-m (enable memory usage debugging)
-p port (specify port number)
-q name (specify query name)
-t type (specify query type)
-u (display times in usec instead of msec)
-x dot-notation 反向查询的ip地址,例如-x 202.98.0.68
-y [hmac:]name:key (specify named base64 tsig key)
flags:
- qr:query,查询标志,代表查询操作
- rd:recursion desired,代表希望通过递归查询操作
- ra:recursive available,代表查询的服务器支持递归查询操作
- aa:authoritative answer 权威回复(查询结果由管理域名的域名服务器提供,而不是缓存服务器提供的,称为权威回复)
QUERY:查询数,1代表有1个查询,对应下面的QUESTION SECTION中的记录数
ANSWER:结果数,3代表有3个结果,对应下面ANSWER SECTION中的记录数
AUTHORITY:权威域名服务器记录数,0代表该域名有0个权威域名服务器可供域名解析用