内网DNS服务安装使用系列教程(三)BIND的安装配置

DNS服务,程序包名bind,程序名named

1. 程序包


只需要安装bind、bind-libs和bind-utils即可

  • bind 主包
  • bind-libs 依赖的库文件,包括 32 位和 64 位
  • bind-utils 提供客户端工具,例如dig、host、nslookup和nsupdate
  • bind-chroot 建立不要安装,很容易被入侵

bind-chroot 包的作用是提高安全性,将 DNS 服务的配置文件/etc/named.conf 等,创建一个硬链接转到/var/named/chroot/etc/ 文件夹下面,而且使用服务帐号登录,不使用root用户登录

注意,修改配置文件要修改/etc/下面的,这样会自动同步到chroot下面的链接文件中

bind-sdb

bind-dyndb-ldap

以上这两种方式,是将解析库文件放在不同的数据库中进行存储

2. BIND配置文件


配置文件

  • 服务启动脚本
    在CentOS6下
/etc/rc.d/init.d/named
  • 主配置文件
/etc/named.conf
/etc/rndc.key

为rndc的秘钥共享文件,提供认证用的

  • rndc是什么?
    远程名称控制器
    默认与bind安装在同一主机,且只能通过本地回环地址127.0.0.1来连接named进程
    提供辅助性的管理功能,如查看解析状态等
    默认工作在 953/tcp 端口上
    /etc/named.rfc1912.zones

请求注解文档

  • 解析库文件
/var/named/ZONE_NAME.ZONE

在**/var/named/**目录下存在多个解析库文件

/var/named/named.ca

指向根DNS该文件不需要管理员更改,而是系统自带

/var/named/named.local

本地子域解析,将localhost反向解析为127.0.0.1

  • 注意
  1. 一台物理服务器可同时为多个区域提供解析
  2. 必须要有根区域文件,在named.ca中包含13根节点地址,由dig命令生成而来的
  3. 应该有两个(如果包括ipv6的,应该更多)实现localhost本地回环地址的解析库
#  在CentOS6下
[root@localhost ~]# rpm -ql bind | less
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/usr/lib64/bind
/usr/sbin/arpaname
......
# @表示当前区域的区域名称,在主配置文件/etc/named.conf中定义的
# TTL的值没写,因为定义了宏$TTL 1D,直接继承
# rname.invalid.表示管理员的邮箱地址
# 后面的如NS、A等缺省,因为继承前者的

[root@localhost named]# cat /var/named/named.localhost
$TTL 1D
@IN SOA@ rname.invalid. (
0; serial
1D; refresh
1H; retry
1W; expire
3H ); minimum
NS@
A127.0.0.1
AAAA::1

[root@localhost named]# cat /var/named/named.loopback
$TTL 1D
@IN SOA@ rname.invalid. (
0; serial
1D; refresh
1H; retry
1W; expire
3H ); minimum
NS@
A127.0.0.1
AAAA::1
PTRlocalhost.

主配置文件

  • 全局配置
options {}
  • 日志子系统配置
logging {}
  • 区域定义
    本机能够为哪些zone进行解析,就要定义哪些zone
zone "ZONE_NAME" IN {}
  • 注意
    任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
[root@localhost ~]# cat /etc/named.conf
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     { localhost; };
recursion yes;

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* 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";
# localhost.localdomain就是区域名称,也就是@
[root@localhost ~]# cat /etc/named.rfc1912.zones
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; };
};

3. 缓存名称服务器配置


安装上bind之后,其实就算的上是一个缓存名称服务器,只需要进行少许的配置即可完成

  • 修改listen-on port 53
  • 修改allow-query
  • 修改recursion

1. 安装

[root@localhost ~]#yum install bind

2. 启动

[root@localhost ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

3. 查看

# 为了安全,安装上bind之后,默认只会监听本地,不对外提供服务
# 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的`IP`地址上
# 编辑主配置文件即可

[root@localhost ~]# ss -tunlp | grep :53
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",39822,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",39822,513))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",39822,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",39822,20))

4. 修改

# 修改之前先备份一下
# 逗号之前没有内容,默认为前一个的名称,后面为复制的内容

[root@localhost ~]# cp /etc/named.conf{,.bak}
[root@localhost ~]# ll /etc/named*
-rw-r-----. 1 root named  984 11月 20 2015 /etc/named.conf
-rw-r-----. 1 root root   984 6月  20 21:53 /etc/named.conf.bak
# //表示单行注释,注释ipv6
# /**/表示多行注释
# 修改的时候必须以;结尾且{}的两端必须有空格,否则为语法错误
# directory用来定义区域解析库文件存放位置

# 建议关闭dnssec功能
# 将dnssec-enable和dnssec-validation改为no,并注释key文件即可

# 把能够以外网进行通信的地址写在listen-on port 53之后,如果有多个可以多个添加,不能省略
# 如果将listen-on port 53进行注释或者删除,默认是监听在所有
# 将allow-query注释或改为allow-query { any; };
# 是否允许递归recursion,必须为yes

[root@localhost ~]# vim /etc/named.conf
options {
        listen-on port 53 { 172.16.242.178; 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     { localhost; };
        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";
};

5. 重启生效

# 重启之后才能生效配置
[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

[root@localhost ~]# ss -tunlp | grep :53
udp    UNCONN     0      0         172.16.242.178:53                    *:*      users:(("named",40086,513))
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",40086,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",40086,514))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",40086,22))
tcp    LISTEN     0      3         172.16.242.178:53                    *:*      users:(("named",40086,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",40086,20))

4. 主 DNS 名称服务器配置


主 DNS 名称服务器配置就是在缓存DNS服务器的基础之上增加zone配置文件就可以了

  • 在/etc/named.rfc1912.zones添加zone记录
  • 在/var/named/增加zone文件

1. 在主配置文件中定义区域

格式

# master表示主DNS
# slave表示从DNS
# hint表示根
# forward做转发
# file使用的是主配置文件directory定义的路径
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};

修改配置

# 在/etc/named.rfc1912.zones文件内定义域名
# named-checkconf用来检查语法错误
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "code404.icu" IN {
        type master;
        file "code404.icu.zone";
};

[root@localhost ~]# named-checkconf

2. 定义区域解析库文件

格式

出现的内容:
宏定义;
资源记录;

修改配置

# 这里$TTL用于定义TTL的值,86400为秒,可以使用1D来代替
# $ORIGIN用于指定域名词尾,如ns以及mx都为缺省了
# named-checkzone
# 两个www,在访问的时候会进行轮询操作的
# 泛域名解析这里的*,表示无论用户输入什么都不报错
# 或者写成*  IN  A  172.16.100.11,因为CNAME不能输入ip地址

[root@localhost ~]# cd /var/named/
[root@localhost named]# vim code404.icu.zone
$TTL 86400
$ORIGIN code404.icu.
@    IN    SOA    ns1.code404.icu.    admin.code404.icu (
2016042201
1H
5M
7D
1D )
 IN    NS        ns1
 IN    NS        ns2
 IN    MX 10     mx1
 IN    MX 20     mx2
ns1  IN    A172.16.100.11
ns2 IN    A172.16.100.12
mx1 IN    A172.16.100.13
mx2 IN    A172.16.100.14
www IN    A172.16.100.11
www IN    A172.16.100.12
ftp INCNAMEwww
*    IN CNAME   www

[root@localhost named]# named-checkzone "code404.icu" /var/named/code404.icu.zone
zone code404.icu/IN: loaded serial 2016042201
OK

更改权限

# 可以查出进程是以named运行的
# 其中/etc/named.conf文件的属主为root,属组为named
# 为了安全起见,对自己创建的文件进行权限修改

[root@localhost named]# ps -aux | grep named
named     40086  0.0  1.1 160072 11736 ?        Ssl  22:07   0:00 /usr/sbin/named -u named
root      40785  0.0  0.0 103324   864 pts/0    S+   23:19   0:00 grep named

[root@localhost named]# ll /etc/named.conf
-rw-r-----. 1 root named 1004 6月  20 22:23 /etc/named.conf

[root@localhost named]# id named
uid=25(named) gid=25(named) 组=25(named)

[root@localhost named]# ll
总用量 32
drwxrwx---. 2 named named 4096 6月  20 21:45 data
drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
-rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
-rw-r-----. 1 root  named  152 12月 15 2009 named.empty
-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
-rw-r--r--. 1 root  root   408 6月  20 22:53 code404.icu.zone

[root@localhost named]# chmod 640 code404.icu.zone
[root@localhost named]# chown :named code404.icu.zone

[root@localhost named]# ll
总用量 32
drwxrwx---. 2 named named 4096 6月  20 21:45 data
drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
-rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
-rw-r-----. 1 root  named  152 12月 15 2009 named.empty
-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
-rw-r-----. 1 root  named  408 6月  20 22:53 code404.icu.zone

重启生效

[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

# 使用dig命令来帮助我们验证信息
# 因为之前的配置,这里会进行轮询操作
[root@localhost ~]# dig -t A code404.icu @172.16.242.178

5. 反向区域


反向解析和正向解析各为独立的系统,所以可以部署在不同的或者是相同的机器之上,都是可以

  • 一个区域只能有一个主服务器,无论是正向还是反向
  • 一个主服务器可以有多个从服务器

根据配置文件中定义的主机地址,来确定网络地址

  • 如果都为172.16.100内的主机,那么网络地址就是172.16.100.
  • 存在多种地址,如172.16.100.12、172.16.200.121等,那么网络地址就是172.16.
  • 以此类推

什么是反向区域

不变的部分用来当做区域名称,变化的部分用来当做实现解析时候的name

格式

区域名称:网络地址反写.in-addr.arpa.
如172.16.100. ==> 100.16.172.in-addr.arpa.

如何定义反向区域

  1. 定义区域
# file同样是一个相对路径,/var/named/
# 如果有多个正向域对应同一个网络的话,多个区域就重名了,所以这里的网络地址其实自己可以随意定义,如"网络地址1.zone"、"网络地址2.zone"等
# 如果只有一个反向区域的话,就只需要书写一个反向解析库,就可以"网络地址.zone"这样命名了
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone";
};
# 因为172.16.242.178和我们的其他服务器(172.16.100.12/172.16.100.11),所以只能写成"16.172.in-addr.arpa"和"172.16.zone"
# 最后添加如下内容
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
};
  1. 区域解析库文件
  • 以PTR记录为主
  • 不需要MX和A以及AAAA记录
# $TTL表示宏定义的TTL值
# $ORIGIN这里表示反向区域的名称
# 反向的主机名称不能省略
# 这里的11和12会自动补充上16.172.in-addr.arpa.
# 别名记录不用反解,所以ftp没有书写反向解析
# 这里可以使用vim -o code404.icu.zone 16.172.zone来同时编辑两个文件的

[root@localhost ~]# cd /var/named/
[root@localhost named]# vim 100.16.zone
$TTL 86400
$ORIGIN 16.172.in-addr.arpa.
@IN  SOAns1.code404.icu. admin.code404.icu. (
  2016042201
  1H
  5M
  7D
  1D )
IN  NSns1.code404.icu.
IN    NSns2.code404.icu.
11.100IN  PTRns1.code404.icu.
11.100IN  PTRwww.code404.icu.
12.100IN  PTRmx1.code404.icu.
12.100IN  PTRwww.code404.icu.
13.100IN  PTRmx2.code404.icu.
# 反向解析如果没有$ORIGIN的情况下,也可以这样写
[root@localhost named]# vim 100.16.zone
$TTL 86400
@IN  SOAns1.code404.icu. admin.code404.icu. (
  2016042201
  1H
  5M
  7D
  1D )
16.172.in-addr.arpa.IN  NSns1.code404.icu.
IN    NSns2.code404.icu.
11.100IN  PTRns1.code404.icu.
11.100IN  PTRwww.code404.icu.
12.100IN  PTRmx1.code404.icu.
12.100IN  PTRwww.code404.icu.
13.100IN  PTRmx2.code404.icu.
  1. 修改权限并重启
[root@localhost named]# chmod 640 16.172.zone
[root@localhost named]# chmod :named 16.172.zone

# 语法
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone "16.172.inaddr-addr" 16.172.zone
ok
[root@localhost named]# service named reload

# 检测
[root@localhost named]# host -t PRT 172.16.100.12 172.16.242.178
[root@localhost named]# dig -x 172.16.100.12 @172.16.242.178

6. 从 DNS 名称服务器配置

定义从 DNS 服务器就是在缓存服务器的基础上,进行修改配置

  • 在/etc/named.rfc1912.zones添加zone记录

主从复制

  1. 应该为一台独立的名称服务器
  2. 主服务器的区域解析库文件中必须有一条 NS 记录是指向从服务器
  3. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
  4. 主服务器得允许从服务器作区域传送
  5. 主从服务器时间应该同步,可通过ntp进行
  6. bind程序的版本应该保持一致;否则,应该从高逐低

定义从区域的方法

  • 正向从服务器格式
# 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
  • 反向从服务器格式
# 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
zone "Reverse_Net_Addr.in-addr.arpa" IN {
type master;
file "SOMEFILE.zone";
};
  • 正向从服务器的实例
# 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
# 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "code404.icu" IN {
type slave;
masters { 172.16.242.178; };
file "slaves/code404.icu.zone";
};

# 重起服务即可成效
[root@localhost ~]# rndc reload

# 可以通过log进行查看
[root@localhost ~]# tail /var/log/messages
  • 反向从服务器的实例
# 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
# 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.242.178; };
file "slaves/172.16.zone";
};

# 重起服务即可成效
[root@localhost ~]# rndc reload

# 可以通过log进行查看
[root@localhost ~]# tail /var/log/messages

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/1165.html

发表评论

登录后才能评论