编译bind以及DNS排错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译bind以及DNS排错相关的知识,希望对你有一定的参考价值。

编译bind

准备阶段:

下载bind软件包,然后传输到系统中  
https://www.isc.org/downloads/

安装开发包组  
yum -y groupinstall "Development tools"    
解压bind软件包    
tar xvf bind-9.10.5-P3.tar.gz

创建named系统用户账号  
useradd -r -d /var/named -s /sbin/nologin -u 53 named

-r 指定系统账号,-d指定家目录为/var/named -s指定shell环境为/sbin/nologin -u 指定UID为53

创建named的家目录及修改所属组信息  
mkdir /var/named

ll -d /var/named \所属组为root

chgrp named /var/named/ \修改所属组为named  
chmod o= /var/named/

关闭防火墙、禁用SELinux

iptables -F

setenforce 0

编译

cd bind-9.10.5-P3

./configure --help \查看configure编译的说明

mkdir /usr/src/bind9 \新建目录作为bind的根目录

./configure --prefix=/usr/src/bind9/ \执行编译安装,出现如下提示时,需要安装OpenSSL软件包或在编译时使用--without-openssl关闭安全加密功能

技术分享

./configure --prefix=/usr/src/bind9/ --without-openssl

make && make install

技术分享

vim /etc/profile.d/bind9.sh \添加bind9二进制文件的路径到全局变量中  
export PATH=/usr/src/bind9/sbin:/usr/src/bind9/bin:$PATH

. /etc/profile.d/bind9.sh \刷新生效

ls /usr/src/bind9/bin

which dig \测试dig命令的路径是否正确

编辑/etc/man.config(centos 6)|man_db.conf(centos7)文件 添加一个

技术分享

man dig \测试帮助文档命令路径是否正确

vim /etc/ld.so.conf.d/named.conf \编辑加载库文件路径

/usr/src/bind9/lib \ 可以参照当前目录下其他文件格式

ldconfig –v \加载库文件 让系统重新生成缓存

ln -sv /usr/src/bind9/include /usr/include/named \导出头文件,直接复制,或者基于链接方式

vim /usr/src/bind9/etc/named.conf \新建named.conf配置文件  
options {    
directory "/var/named";    
};    
zone "." {    
type hint;    
file "named.ca";    
};

编辑DNS . 文件,可从其他主机中复制,可在网络中某个DNS服务器中抓取

dig -t NS . @172.16.0.1 > /var/named/named.ca \抓取 .DNS数据到/var/named/named.ca

vim /usr/src/bind9/etc/named.conf \添加DNS解析域文件  
options { #OPTIONS选项用来定义一些影响整个DNS服务器的环境

listen-on port 53 { any; };

directory "/var/named"; # 指定的域名解析文件的路径,如这里的是将其指定到 /var/named 下

allow-query { any; };

recursion yes;

dnssec-enable no;

dnssec-validation no;

};  
zone "." { #根区域

type hint;  
file "named.ca";    
};    
zone "magedu.com"
{ #测试

type master;  
file "magedu.com.zone";    
};

vim /var/named/magedu.com.zone \编辑DNS数据库文件  
$TTL 1D    
@ IN SOA ns admin ( 0 1D 10M 3D 1H)    
NS ns    
ns A 192.168.198.136    
www A 192.168.198.150

chgrp named /usr/src/bind9/etc/named.conf \修改主配置文件所属组为named

chmod 640 /usr/src/bind9/etc/named.conf \设置权限为640

chgrp -R named /var/named/ \解析域文件目录下文件所属组为named

named -f -g -d 3 -u named \ 开启named服务,-f 前台执行,-g 将日志信息输出到标准输出,-d 以什么级别显示debug信息,-u 指定什么用户执行命令

named -u named 后台运行

ss -tuln \启动成功后,监听的tcp 、udp的53端口

tail /var/log/message \检查区域配置文件语法错误以及区域文件加载成功、服务运行

Sep 21 04:55:07 WTF-6 named[20954]: managed-keys-zone: loaded serial 0

Sep 21 04:55:07 WTF-6 named[20954]: zone magedu.com/IN: loaded serial 2017092001

Sep 21 04:55:07 WTF-6 named[20954]: all zones loaded

Sep 21 04:55:07 WTF-6 named[20954]: running

客户端访问测试  
dig www.danran.com @192.168.198.136 指定ip192.168.198.136为dns服务器解析域名

named -u named \当修改配置文件后,重新启动named服务

killall named \停止named服务

安装rndc

生成DNS key文件  
rndc-confgen -r /dev/urandom > /usr/src/bind9/etc/rndc.conf

vim /usr/src/bind9/etc/rndc.conf \将文件中的如下注释内容剪切到/usr/src/bind9/etc/named.conf文件中  
#Use with the following in named.conf, adjusting the allow list as #needed:    
#key "rndc-key" {    
#algorithm hmac-md5;    
#secret "JZMdWLCUJhuMaes8bUJJKw==";    
#};    
#controls {    
#inet 127.0.0.1 port 953

#allow { 127.0.0.1; } keys { "rndc-key"; };  
#};    
#End of named.conf

vim /usr/src/bind9/etc/named.conf \将/usr/src/bind9/etc/rndc.conf文件中剪切的内容复制到此文件中,并去掉#注释信息  
#Use with the following in named.conf, adjusting the allow list as needed:    
key "rndc-key" {    
algorithm hmac-md5;    
secret "JZMdWLCUJhuMaes8bUJJKw==";    
};    
controls {    
inet 127.0.0.1 port 953    
allow { 127.0.0.1; } keys { "rndc-key"; };    
};    

#End of named.conf

技术分享

named -f -g -d 3 -u named \ 开启named服务,-f 前台执行,-g 将日志信息输出到标准输出,-d 以什么级别显示debug信息,-u 指定什么用户执行命令

named -u named 后台运行

ss -ntln \rndc的953端口一打开

rndc reload \rndc命令已安装

rndc querylog \打开named的日志功能

rndc status \查看named的状态信息

DNS排错

1. #dig A example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523

...

SERVFAIL:The nameserver encountered a problem while processing the query.

---可使用dig +trace排错,可能是网络和防火墙导致

2. NXDOMAIN:The queried name does not exist in the zone.

---可能是CNAME对应的A记录不存在导致

3. REFUSED:The nameserver refused the client‘s DNS request due to policy restrictions.

---可能是DNS策略导致

4. NOERROR不代表没有问题,也可以是过时的记录

5. 查看是否为权威记录,flags:aa标记判断

6. 被删除的记录仍能返回结果,可能是因为*记录存在 如:*.example.com. IN A 172.25.254.254

7. 注意“.”的使用

8. 避免CNAME指向CNAME记录,可能产生回环 test.example.com. IN CNAME lab.example.com. lab.example.com. IN CNAME test.example.com.

9. 正确配置PTR记录,许多服务依赖PTR,如sshd,MTA

10. 正确配置轮询round-robin记录

以上是关于编译bind以及DNS排错的主要内容,如果未能解决你的问题,请参考以下文章

Linux进阶:DNS详解

DNS系列- 2.dns服务搭建(bind编译安装)

Linux 第24天: (09月22日) Linux DNS

+++++++子域授权与编译安装

centos6源码编译安装DNS源码安装

DNS中的ACrndc智能DNS解析和基础排错