18. DNS1-原理、bind

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 递归与迭代

递归查询:
首问负责制

  1. 本地DNS服务器返回的结果,要么返回域名对应的IP地址,要么返回域名不存在
  2. 本地DNS向权威服务器查询时,权威服务器返回的结果,要么返回域名对应的IP地址,要么返回域名不存在

迭代查询:
权威服务器的应答:

  • 检查自身缓存
  • 使用转发器
  • 使用根提示,进行迭代查询

根提示(Root Hints):包含在DNS服务器软件中,提供了根服务器IP地址
转发器(Forwarder):自身不进行迭代查询,将DNS请求转发给指定的服务器

1.4 区域(Zone)和资源记录(Resource Records)

1.4.1 区域(Zone)

Zone是DNS名称空间中特定的一部分,Zone是DNS管理的单元,每个Zone对应的是物理上的数据文件,数据文件中存储了资源(RR)记录
Zone的分类:

  1. 根据存储的RR类型来分:
  • 正向查找区域(Forward lookup zone)-根据域名查IP:A、MX、SRV、NS、SOA、CNAME...
  • 反向查找区域(Reverse lookup zone)-根据IP查域名:PTR、NS、SOA
  1. 根据区域传递时的角色来分:
  • 主区域(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 配置文件语法

配置文件分为多个语句块,每段语句以;结束,以下为optionsloggingzone3个语句块例子

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个记录必为SOANS记录
资源记录有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],查询流程为:

  1. 查询bigsky.cn的MX记录为mail.bigsky.cn
  2. 查询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
  1. $ORIGIN,起点域名,需要以.结尾
  2. @表示起点域名,没有配置$ORIGIN时是zone语句中的zone_name,如bigsky.cn
  3. 当域名不写成FQDN时,表示与起点域名的拼接,如ns1表示ns1.bigsky.cn
  4. 当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数据文件

只包含SOANSPTR 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个权威域名服务器可供域名解析用

你可能感兴趣的:(18. DNS1-原理、bind)