编译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排错的主要内容,如果未能解决你的问题,请参考以下文章