BIND为任意长掩码的网段做反向解析

前言

当初做BIND实验的时候在网上搜到的资料全部是以24位掩码来做反向解析实验的,搞得我一直以为BIND反向解析时只能使用24位掩码。然而,事实上BIND支持任意长度掩码的网段的反向解析。

本文将以16位掩码为例子,演示配置过程。

实验目的

使BIND可以正确为192.168.0.0/16网段做反向解析,并正确解析出192.168.10.254这个IP地址对应的域“www.ibadboy.net”。

配置方法

1、创建16位掩码的反向解析区域

2018-06-21 09-48-19屏幕截图.png

2、编辑反向解析数据库文件

注意,这里的254.10是10.254的倒写!!!这里是重点!必须倒写!
2018-06-21 09-47-09屏幕截图.png

3、验证结果

如下图,已经按照实验预期通过192.168.10.254解析出了www.ibadboy.net。
2018-06-21 09-48-44屏幕截图.png

配置rndc实现对BIND的管理

rndc介绍:
rndc是BIND安装包提供的一种控制域名服务运行的工具,可以实现在不重启BIND的情况下对zone及解析记录等配置进行更新。
软件包安装:
首先要安装BIND软件包才可以使用rndc工具,rndc和BIND可以不在同一台服务器上部署。

[root@localhost ~]# yum install -y bind

rndc配置部分:
生成rndc的通信密钥及配置文件,/dev/urandom是Linux下用来生成随机数的一个文件,这里使用-r选项调用它是为了生成通信密钥。

[root@localhost ~]# rndc-confgen -r /dev/urandom > /etc/rndc.conf

编辑刚刚生成的配置文件。

[root@localhost ~]# vim /etc/rndc.conf

转到第9行,其定义了要管理的BIND服务器的地址,按照需求对其进行修改,本实验中我的BIND服务器的地址是192.169.1.101.

default-server 192.168.1.101;

BIND配置部分:
使用vim打开rndc的配置文件,转到第十四行,此行直到末尾都是要加入到/etc/named.conf文件中的,加入后可以按照自己的需求进行修改,比如说第21行的inet选项是用来定义监听本服务器的哪些接口的(当然是监听和rndc相连的接口啦),如果想监听所有接口则将其改为0.0.0.0。第22行是定义此BIND服务器允许接受哪些rndc的管理,将127.0.0.1改成运行rndc的设备的IP地址就行。最后别忘了把注释去掉,否则配置文件是不生效的。

14 # Use with the following in named.conf, adjusting the allow list as needed:
15 # key "rndc-key" {
16 # algorithm hmac-md5;
17 # secret "YAkaS9u8kADIcBMslszUaw==";
18 # };
19 #
20 # controls {
21 # inet 127.0.0.1 port 953
22 # allow { 127.0.0.1; } keys { "rndc-key"; };
23 # };
24 # End of named.conf

以下是我的/etc/named.conf文件的完整配置(第40行到末尾是新增的配置),仅供参考,切勿复制。
运行BIND的服务器的IP:192.168.1.101
运行rndc的服务器的IP:192.168.1.100

  1 //
  2 // named.conf
  3 //
  4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  5 // server as a caching only nameserver (as a localhost DNS resolver only).
  6 //
  7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
  8 //
  9
 10 options {
 11 listen-on port 53 { any; };
 12 listen-on-v6 port 53 { ::1; };
 13 directory "/var/named";
 14 dump-file "/var/named/data/cache_dump.db";
 15 statistics-file "/var/named/data/named_stats.txt";
 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
 17 allow-query { any; };
 18 recursion yes;
 19
 20 dnssec-enable yes;
 21 dnssec-validation yes;
 22 dnssec-lookaside auto;
 23
 24 /* Path to ISC DLV key */
 25 bindkeys-file "/etc/named.iscdlv.key";
 26
 27 managed-keys-directory "/var/named/dynamic";
 28 };
 29
 30 logging {
 31 channel default_debug {
 32 file "data/named.run";
 33 severity dynamic;
 34 };
 35 };
 36
 37 include "/etc/named.rfc1912.zones";
 38 include "/etc/named.root.key";
 39
 40 # Use with the following in named.conf, adjusting the allow list as needed:
 41 key "rndc-key" {
 42 algorithm hmac-md5;
 43 secret "YAkaS9u8kADIcBMslszUaw==";
 44 };
 45 #
 46 controls {
 47 inet 192.168.1.101 port 953
 48 allow { 192.168.1.100; } keys { "rndc-key"; };
 49 };
 50 # End of named.conf

保存后重启named服务器

[root@localhost ~]# server named restart

使用rndc连接BIND并进行管理
在使用rndc连接BIND前一定要确保两台Linux服务器的时间同步,否则会报错(我做实验的时候卡在这个坑里整整一天)
可以手工修改系统时间也可以与NTP服务器同步,若你的实验用机器无法链接外网,又不想手工配置时间,则可以参考下面这篇文章,将其中一台机器配置为NTP,供另一台机器同步。

CentOS 6下配置NTP网络时间服务器


启动rndc并连接BIND。

[root@localhost ~]# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
CPUs found: 1
worker threads: 1
number of zones: 19
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

可以看到,上面的输出信息中包含了一条警告,这个其实没什么影响的,如果你有强迫症可以使用下面这条命令开启动rndc,这样就不会看到那条警告了。

[root@localhost ~]# rndc -c /etc/rndc.conf status

rndc常用管理命令:

status                    #显示bind服务器的工作状态
reload                    #重新加载配置文件和区域文件
reload zone_name          #重新加载指定区域
reconfig                  #重读配置文件并加载新增的区域
querylog                  #关闭或开启查询日志
dumpdb                    #将高速缓存转储到转储文件 (named_dump.db)
freeze                    #暂停更新所有动态zone
freeze zone [class [view]]#暂停更新一个动态zone
flush [view]              #刷新服务器的所有高速缓存
flushname name            #为某一视图刷新服务器的高速缓存
stats                     #将服务器统计信息写入统计文件中
stop                      #将暂挂更新保存到主文件并停止服务器
halt                      #停止服务器,但不保存暂挂更新
trace                     #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL               #指定 debug 的级别, trace 0 表示关闭debug
notrace                   #将调试级别设置为 0
restart                   #重新启动服务器(尚未实现)
addzone zone [class [view]] { zone-options } #增加一个zone
delzone zone [class [view]]                  #删除一个zone
tsig-delete keyname [view]#删除一个TSIG key
tsig-list                 #查询当前有效的TSIG列表
validation newstate [view]#开启/关闭dnssec

CentOS 6下使用BIND配置简单DNS服务器

介绍:
BIND是linux/unix下的开源免费DNS服务器,也是全世界应用最广泛的DNS服务器软件。
软件安装:

yum install -y bind

主要配置文件介绍:

/etc/named.conf                 //BIND主配置文件
/etc/named.rfc1912.zones        //DNS解析区域配置文件
/etc/named.localhost            //正向解析模板文件
/etc/named.loopback             //反向解析模板文件

BIND配置:
编辑主配置文件

vim /etc/named.conf

将如下如红色箭头所指的两处的值均改为“any”,第一处定义bind服务监听的本地网卡地址,默认仅监听回环地址,改为any后监听所有网卡。第二处定义的是允许查询DNS的主机,默认只有本地可以查询,改为any后允许所有主机进行DNS查询。

修改后如下图。

主配置文件的配置至此结束,接下来编辑DNS解析区域配置文件。

vim /etc/named.rfc1912.zones

此部分为正向解析区域配置模板,这里稍微啰嗦一下什么是正向解析什么是反向解析:正向解析就是通过域名解析出IP地址,反向解析就是通过IP地址来解析出域名。

此部分为IPv6反向解析区域配置模板。

此部分为反向解析区域配置模板

这里,我们添加一个正向解析区域和一个反向解析区域。
直接在模板基础上修改即可,如下图,第一个“it7e.com”是要解析的域名,第二个“it7e.com”是正向解析配置文件的文件名。
默认情况下,所有的解析配置文件都存放在/var/named/目录下。

再添加一个反向解析区域,其中”1.168.192″是要进行反向解析的网段”192.168.1″的倒写,而图中的“192.168.1”则是反向解析配置文件的文件名。

最后,分别编辑两个解析区域的解析配置文件向其中添加解析即可。
先根据正向解析配置文件模板”named.localhost”创建正向解析配置文件”it7e.com”。

cp -p /var/named/named.localhost /var/named/it7e.com

再根据反向解析配置文件模板“named.loopback”创建反向解析配置文件“192.168.1”。

cp -p /var/named/named.loopback /var/named/192.168.1

编辑正向解析配置文件“it7e.com”

vim /var/named/it7e.com

通常情况下,只需要编辑红框部分,向其中添加解析即可,其余地方不用更改。

例如:

上图中需要特殊说明的是MX记录后面的5是MX优先级。记录值中填的“@”代表本域,本实验中是“it7e.com”,注意如果这样写,那么就必须保证有“it7e.com”对应的解析记录,本实验中其对应的记录在第九行。在主机位上填的“@”代表“空”,也可以真的留空,什么都不写,就像第九行的那条解析记录一样。另外,记录值中的域名都以“.”结尾,IP则不用。
最后需要注意的是MX记录要写在其值的CNAME记录的前面,例如上图中,“@   MX 5 mail.it7e.com”记录写在了“mail CNAME it7e.com”记录的前面,否则会出现异常。
关于DNS解析记录类型的介绍参考此篇文章:

DNS解析记录类型详解

再来编辑反向解析文件。

vim /var/named/192.168.1

依然是没有特殊需求就只编辑红框内的内容即可。

例如:

上图中,“ A 127.0.0.1”这个记录不可删除,否则报错。因为NS记录值是“@”,也就是“it7e.com”,若删除了“ A 127.0.0.1”这条记录,则“it7e.com”没有对应的A记录,NS记录会抛出错误。
服务测试:
测试前需要将本机或客户机的DNS修改为DNS服务器的IP地址。
CentOS 6下DNS的修改方法参考此篇文章,Windows下不做介绍。

CentOS 6下正确配置DNS的方法

测试DNS解析使用nslookup命令,如果发现系统中没有nslookup这个命令是因为没有安装bind工具包,执行以下命令安装。

yum install -y bind-utils

启动nslookup。

nslookup

执行命令后在“>”符号后面输入要测试解析的域名即可。

例如下图,其中蓝色框内是DNS服务器信息,红框内是域名解析信息。

可以通过“set type=”来设置解析类型。
例如,测试MX解析记录: 
或者,测试TXT记录。

再来测试下反向解析。

最后,退出nslookup工具,只需要在“>”符号后面输入“exit”即可。

CentOS 6下正确配置DNS的方法

本来配置DNS是比较简单的东西,没想专门写一篇文章的。但后来我发现这里还是有一个大坑的,很有必要单独拿出来对其进行说明。
我看到网上很多教程都推荐大家通过编辑/etc/resolv.conf这个文件来修改系统的DNS。
但经过实测,用此方法修改DNS,在某些情况下会发生明明编辑了/etc/resolv.conf文件,但重启网络后文件又恢复到之前的状态的情况。
经过一翻搜索之后,发现。原来是因为CentOS 6使用NetworkManager来管理网络,当在/etc/resolv.conf中配置了DNS时,/etc/sysconfig/network-scripts/ifcfg-eth*文件中并没有DNS信息或还是之前的DNS信息,而NetworkManager会用/etc/sysconfig/network-scripts/ifcfg-eth*中的DNS信息来覆盖/etc/resolv.conf中的信息。
正确配置DNS的方法:

vim /etc/sysconfig/network-scripts/ifcfg-eth*(*是什么依据实际情况来定)

按照如下格式添加DNS。

DNS1=
DNS2=
DNS3=
……

例如下图,其中“114.114.114.114”是国内著名的DNS服务,“8.8.8.8”是谷歌的DNS服务,也可以根据自身需求更改为其他DNS地址。

最后重启网络即可。

service network restart

DNS解析记录类型详解

A记录:将域名指向一个IPv4地址(例如:10.10.10.10)。
CNAME记录:如果将域名指向一个域名,实现与被指向域名相同的访问效果。
MX记录:建立电子邮箱服务,将指向邮件服务器地址。
NS记录:域名解析服务器记录,如果要将子域名指定某个域名服务器来解析。
TXT记录:可任意填写(可为空),通常用做SPF记录(反垃圾邮件)使用。
AAAA记录:将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1)。
SRV记录:记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)。
显性URL:将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将www.tianidc.cn显性转发到www.ibadboy.net后,访问www.tianidc.cn时,地址栏显示的地址为:www.ibadboy.net)。
隐性URL:与显性URL类似,但隐性转发会隐藏真实的目标地址(例如:将www.tianidc.cn隐性转发到www.ibadboy.net后,访问www.tianidc.cn时,地址栏显示的地址仍然为:www.tianidc.cn)。