DNS正反向解析和主从同步配置

DNS服务器的类型

  • 主DNS服务器
  • 从DNS服务器
  • 缓存DNS服务器
  • 转发器

主从简介

  • 主DNS服务器:
    • 维护所负责解析的域内解析库的服务器;解析库由管理维护
  • 从DNS服务器:
    • 从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库

DNS安装配置

在Linux系统上安装能提供DNS服务的程序包,其程序包名为 bind,程序名为 named

安装如下程序包

  • bind
    • 实现提供DNS服务的主程序包
  • bind-libs
    • bind程序包所需要的库文件
  • bind-utils
    • 包含一系列用于测试和查询DNS的命令
    • 如:dig, host, nslookup
yum install -y bind bind-libs bind-utils

主要配置文件位置

安装完成后,主要配置文件位置如下

  • bind 服务脚本: /etc/rc.d/init.d/named
  • 主要配置文件
    • /etc/named.conf
    • /etc/named.rfc1912.zones
    • /etc/rndc.key

编辑主配置文件

/etc/named.conf,默认配置和字段意义解释如下

# options 为全局配置
options {
        # 监听端口 53 在 127.0.0.1 上
        listen-on port 53 { 127.0.0.1; };

        # 监听端口 53 在 ipv6 回环接口上
        listen-on-v6 port 53 { ::1; };

        # 区域配置文件目录
        directory       "/var/named";

        # 解析过的内容的缓存
        dump-file       "/var/named/data/cache_dump.db";

        # 静态缓存
        statistics-file "/var/named/data/named_stats.txt";

        # 静态缓存(内存中)
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        # 允许进行DNS查询客户机的地址
        allow-query     { localhost; };

        # 是否允许客户机进行递归查询
        recursion yes;

        # 是否开启 dnssec,建议测试时关闭
        dnssec-enable yes;

        # 是否开启 dnssec 验证
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        # 管理密钥文件的位置
        managed-keys-directory "/var/named/dynamic";
};

# logging 为日志
logging {
        # channel 定义通道名
        channel default_debug {
                # 日志文件 位于 /var/named/data/named.run
                file "data/named.run";

                # 控制日志级别
                severity dynamic;
        };
};

# 定义 区域名为"."
zone "." IN {
        # 类型为 根
        type hint;
        # 区域解析库文件名,此处为默认根服务器地址
        file "named.ca";
};

# 扩展区域配置文件
include "/etc/named.rfc1912.zones";
# 根区域的 key
include "/etc/named.root.key";

进行编辑,结果如下,此时一个最基本的DNS服务器就已搭建完成。(缓存DNS服务器)

options {
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        dnssec-enable no; 
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

注意
1. 一台物理服务器可同时为多个区域提供解析
2. 必须要有根区域文件 named.ca
3. 应该有两个(如果包括IPv6,应该更多)实现 localhost 和 本地回环地址的解析库

扩展区域配置文件简介

在 /etc/named.rfc1912.zones,中实现 IPv4 和 IPv6 的本地回环地址 的 正反解析区域

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

这里对区域定义,进行简单解释

# ZONE_NMAE 为定义的区域名
zone "ZONE_NAME" IN {
    # type 定义区域类型
    # master 为主
    # slave 为从
    # hint 为根
    # forward 为转发
    type {master|slave|hint|forward};

    # file 定义区域解析库文件名
    # 存放位置 绝对路径为 /var/named/[ZONE_NAME.zone]
    file "ZONE_NANE.zone";
}

开启DNS服务

开启DNS服务时,运行如下命令

  • named-checkconf 命令检查 主配置文件 配置是否无误
    • 运行没有提示(结果)就是 最好的提示(结果)
  • service named start 开启DNS服务
  • rndc status 查看DNS服务状态,确定DNS服务已经开启
  • ss -tlunp | grep ':53' 查看DNS服务 53端口 是否绑定在合适的IP地址上

进行测试

使用 dig 命令,测试命令如下

dig -t A www.bing.com @127.0.0.1

结果如下,表示成功解析 www.bing.com 域名 并获取其 IP地址

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.3 <<>> -t A www.bing.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42652
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.bing.com.          IN  A

;; ANSWER SECTION:
www.bing.com.       300 IN  CNAME   cn.a-0001.a-msedge.net.
cn.a-0001.a-msedge.net. 240 IN  A   202.89.233.103
cn.a-0001.a-msedge.net. 240 IN  A   202.89.233.104

;; AUTHORITY SECTION:
a-msedge.net.       172793  IN  NS  ns2.a-msedge.net.
a-msedge.net.       172793  IN  NS  ns1.a-msedge.net.

;; ADDITIONAL SECTION:
ns1.a-msedge.net.   172793  IN  A   204.79.197.1
ns2.a-msedge.net.   172793  IN  A   131.253.21.1

;; Query time: 837 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 13 06:54:07 2017
;; MSG SIZE  rcvd: 166

注意

  • 关闭 iptables ,以免DNS协议报文被过滤,以至于无法为客户机提供DNS服务

DNS正反向解析

  • 正向区域
    • 提供 FQDN 到 IP 地址的解析
  • 反向区域
    • 提供 IP 地址 到 FQDN 的解析

FQDN:FULL Qualified Domain Name (完全合格域名)

区域解析库

  • 无论正反向解析都各需要一个解析库分别负责本地域名的正向和反向解析
  • 区域解析库由众多 RR(Resource Recodr) 组成
    • 有如下记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX
      • SOA:起始授权记录
      • A:Internet Address,作用,FQDN 到 IP
      • AAAA:FQDN 到 IPv6
      • PTR:PoinTeR,IP 到 FQDN
      • NS:Name Server,专用于表明当前区域的DNS服务器
      • CNAME:Canonical Name,别名记录
      • MX:Mail eXchanger,邮件交换器
资源记录定义的格式

语法

  • name [TTL] IN rr+type value

注意
1. TTL可从全局继承
2. @可用于引用当前区域的名字
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

创建正向解析区域

在主配置文件中定义区域

vim /etc/named.conf 中 添加如下内容

zone "test.com" IN {
        type master;
        file "test.com.zone";
};
定义区域解析库文件

在 /var/named/ 目录下,创建 test.com.zone,解析库文件
/var/named/test.com.zone 中添加如下内容

$TTL 86400
$ORIGIN test.com.
@       IN      SOA     ns1.test.com.   admin.test.com. (
        2017011301
        1H
        5M
        7D
        1D
)

        IN      NS      ns1

ns1     IN      A       192.168.80.130
www     IN      A       192.168.80.130
        IN      A       192.168.80.130
*       IN      A       192.168.80.130

需要注意的是,在 /var/named 目录下创建文件的默认所属组属于root,named用户将无法读取,这里我们将属组改为named

chown :named /var/named/test.com.zone

对添加的内容解释如下
- $TTL 86400 宏定义 TTL 值为 86400 秒,记录省略未填写的 TTL值的记录,将自动代入该TTL值
- $ORIGIN test.com. 宏定义 ORIGIN(当前区域的名字),以便于 @ 引用,或 自动代入

;@ 引用当前区域名
;SOA 指明 ns1.test.com. 为当前区域权威服务器(主DNS服务器)
;admin.test.com 当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用 . 替换
@       IN      SOA     ns1.test.com.   admin.test.com (
        2017011301    ;序列号
        1H            ;刷新时间
        5M            ;重试时间
        7D            ;过期时间
        1D            ;否定答案的TTL值
)

注意
1. 区域解析库文件中 第一条必须为 SOA,一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录
2. 在资源记录定义的 代表为 根的 . (点号)必不可少

创建反向解析区域

在主配置文件中定义区域

vim /etc/named.conf 中 添加如下内容。通常反向解析区域名,约定俗成的规则为该 网络地址反写 拼接 “.in-addr.arpa”,如下

zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.80.zone";
};
定义区域解析库文件

在 /var/named/ 目录下,创建 192.168.80.zone,解析库文件
/var/named/192.168.80.zone 中添加如下内容

$TTL 86400
$ORIGIN 80.168.192.in-addr.arpa.
@       IN      SOA     ns1.test.com.   admin.test.com. (
        2017011301
        1H
        5M
        7D
        1D
)

        IN      NS      ns1.test.com.

130     IN      PTR     ns1.test.com.
130     IN      PTR     www.test.com.

同上,这里我们也要将属组改为named

chown :named /var/named/192.168.80.zone

正反向解析测试

  • 首先检查主配置文件
    • named-checkconf
    • 没有提示就是最好的提示
  • 检查正反向区域解析库文件配置
    • named-checkzone "test.com" /var/named/test.com.zone
    • named-checkzone "80.168.192.in.addr.arpa" /var/named/192.168.80.zone
  • 配置无误后 启动DNS服务
    • service named start
  • 检查端口及IP地址
    • ss -tlunp | grep ":53"
  • 测试正向解析结果是否正确
    • dig -t A www.test.com @127.0.0.1
  • 测试反向解析结果是否正确
    • dig -x 192.168.80.130 @127.0.0.1

DNS主从同步配置

实验目标

  • 负责 test.com 正反区域的解析
  • 和 test.com 正反区域的主从同步

实验环境

  • DNS主服务器为 CentOS6.8
  • DNS从服务器为 CentOS7.2
  • 主服务器的IP地址为 192.168.80.130
  • 从服务器的IP地址为 192.168.80.131

安装服务

首先分别为主和从服务器安装提供DNS服务的bind程序包

yum install -y bind bind-libs bind-utils

编辑主服务器 配置文件

编辑 /etc/named.conf,结果如下

options {
        listen-on port 53 { 192.168.80.130; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "test.com" IN {
        type master;
        file "test.com.zone";
        allow-transfer { 192.168.80.131; };
};

zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.80.zone";
        allow-transfer { 192.168.80.131; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

注意

  • 在生产环境中,allow-transfer { 192.168.80.131; }; 必不可少, 为防止内网服务器部署情况泄露,限制可以进行同步的服务器。

在 /var/named/ 目录下 新增正反区域解析库文件,test.com.zone 和 192.168.80.zone,并添加如下内容

/var/named/test.con.zone

$TTL 86400
$ORIGIN test.com.
@       IN      SOA     ns1.test.com.   admin.test.com. (
        2017011301
        1H
        5M
        7D
        1D
)

        IN      NS      ns1
        IN      NS      ns2
ns1     IN      A       192.168.80.130
ns2     IN      A       192.168.80.131
www     IN      A       192.168.80.130
        IN      A       192.168.80.130
*       IN      A       192.168.80.130

/var/named/192.168.80.zone

$TTL 86400
$ORIGIN 80.168.192.in-addr.arpa.
@       IN      SOA     ns1.test.com.   admin.test.com. (
        2017011301
        1H
        5M
        7D
        1D
)

        IN      NS      ns1.test.com.
        IN      NS      ns2.test.com.
130     IN      PTR     ns1.test.com.
131     IN      PTR     ns2.test.com.
130     IN      PTR     www.test.com.

最后对配置进行检查

  • named-checkconf
  • named-checkzone "test.com" /var/named/test.com.zone
  • named-checkzone "80.168.192.in-addr.arpa" /var/named/192.168.80.zone

关闭 iptables

  • service stop iptables

确认配置无误后开启DNS服务

  • service named start

注意
1. 主服务器应该为一台独立的名称服务器
2. 主服务器的区域解析库文件中必须有一条NS记录是指向从服务器
3. 主服务器必须允许从服务器作区域传送复制

编辑从服务器 配置文件

编辑 /etc/named.conf,结果如下

options {
        listen-on port 53 { 192.168.80.131; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };

        recursion yes;
        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "test.com" IN {
        type slave;
        masters { 192.168.80.130; };
        file "slaves/test.com.zone";
};

zone "80.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.80.130; };
        file "slaves/192.168.80.130.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

对配置进行检查

  • named-checkconf

开启DNS服务

  • CentOS 7 系列 使用 systemctl 命令开启服务
    • systemctl start named.service

关闭SELinux 和 防火墙
- /etc/sysconfig/selinux
- systemctl stop firewalld.service

最后在 /var/named/slaves/ 目录能看到已经同步区域解析库文件

[root@localhost ~]# ls /var/named/slaves/
192.168.80.130.zone  test.com.zone

注意
1. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
2. bind程序的版本应该保持一致;否则,应该从高,主低
3. 如果未能同步,请检查主服务器的位于/var/named/目录下区域解析库的所属组权限是否正确,
4. 如果未能同步,注意检查主和从服务器的防火墙和SELinux是否设置得当,在本博文配置中,均是关闭状态
5.学会使用 tail -f /var/log/message 查看DNS服务日志来解决问题


DNS常用测试命令使用方法总结

dig命令

dig命令语法

  • dig [-t type] name [@SERVER] [query options]
    • -t 指明类型 如 A记录 MX记录等
    • name 需要查询的名称
    • [@SERVER] 指定DNS服务器
    • [query options] 查询选项
      • +[no]trace 跟踪解析过程
      • +[no]recurse 进行递归解析
  • 示例
    • 由指定 192.168.80.131 DNS服务器查询 A记录 名称为 www.test.com 的 IP地址
    • dig -t A www.test.com @192.168.80.131

host命令

host命令语法

  • host [-t type] name [SERVER]

  • 示例

    • 由指定 192.168.80.131 DNS服务器查询 A记录 名称为 www.test.com 的 IP地址
    • host -t A www.test.com 192.168.80.131

nslookup命令

nslookup命令语法

  • nslookup [-option] [name | -] [server]

常使用于交互式模式

nslookup >
    server IP:指明使用哪个DNS server进行查询
    set q=RR_TYPE:指明查询的资源记录类型
    NAME:要查询的名称

示例

[root@localhost ~]# nslookup
> server 192.168.80.131   
Default server: 192.168.80.131
Address: 192.168.80.131#53
> set q=A
> www.test.com
Server:     192.168.80.131
Address:    192.168.80.131#53

Name:   www.test.com
Address: 192.168.80.130
> 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值