bind早已是DNS系统软件的事实标准,构建企业级DNS系统先从软件安装开始。

bind的安装方法包括源码安装和yum安装两种方法,本文介绍源码安装的步骤

本文的目标是:先让bind软件跑起来

环境准备
  1. CentOS7最小化安装后使用yum完成以下软件安装。
yum -y install net-tools
yum -y install iptables-services
yum -y install vim
yum -y install gcc*
yum -y install tcpdump
yum -y install cmake
yum -y install bind-utils
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum -y install libffi-devel -y
yum -y install libxml*
yum -y install git
yum -y install wget
yum -y install libtool
  1. 在https://www.isc.org/download/ 下载最新stable版本bind,本文以bind-9.16.3.tar.xz为例。将软件传到/root目录下。
    也可以到https://ftp.isc.org/isc/bind9/ 下载更多历史版本
  2. 执行pip install ply安装ply,安装前要确保此时setuptools和pip已经安装,如果未安装则需要单独安装。如果不安装ply模块,bind在编译时会报错如下。
configure: error: Python >= 2.7 or >= 3.2 and the PLY package are required for dnssec-keymgr and other Python-based tools. 
PLY may be available from your OS package manager as python-ply or python3-ply; it can also be installed via pip. To build without Python/PLY, use --without-python.

4.执行以下命令安装libuv
yum install -y epel-releaseyum install libuvyum install libuv-devel 如果不安装libuv则在bind编译时会报错如下。

checking for libuv... checking for libuv >= 1.0.0... no
configure: error: libuv not found
  1. 如果bind编译过程中出现以下报错,说明libtool没有安装,请用yum安装libtool。
configure: error: sys/capability.h header is required for Linux capabilities support. Either install libcap or use --disable-linux-caps.
yum install libcap-devel
  1. 创建named用户及相关目录。
    使用53端口作为named组和named用户的ID号
    groupadd -g 53 -r nameduseradd -u 53 -s /sbin/nolgin -r named -g named
安装bind
  1. tar -xvf bind-9.16.3.tar.xz 解压bind。
  2. cd bind-9.16.3
  3. ./configure --prefix=/usr/local/bind9
    configure的参数有很多,这里只是指定的安装路径,安装路径一旦指定其实一些参数也自动默认指定了,例如 sysconfdir(存放配置文件)、localstatedir(存放本地数据文件和进程输出文件)。
    注:–enable-threads enable multithreading参数已经在9.14及后续不再单独设置,9.11之前需要指定。9.14版本开始默认使用了SO_REUSEPORT特性(后期文档详细介绍)
  4. make && make install 执行安装
  5. 安装成功后 /usr/local/bind目录中的内容如下。
[root@localhost bind]# ll
total 4
drwxr-xr-x  2 root root  124 Jun 13 02:58 bin   一些工具可执行程序例如nslookup等
drwxr-xr-x  2 root root   23 Jun 13 02:58 etc    主配置文件
drwxr-xr-x 12 root root  126 Jun 13 02:58 include
drwxr-xr-x  4 root root  154 Jun 13 02:58 lib
drwxr-xr-x  2 root root 4096 Jun 13 02:58 sbin  编译后的程序文件例如named、rndc等
drwxr-xr-x  3 root root   17 Jun 13 02:58 share 文档
drwxr-xr-x  3 root root   17 Jun 13 02:58 var  本地数据文件及输出文件目录
bind初始化配置
  1. cd /usr/local/bind
  2. sbin/rndc-confgen > etc/rndc.conf
    bind官方推荐使用rndc(Remote Name Domain Controllerr)工具,rndc是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作,后期文档详细介绍。
    注意:如果这里卡住不动可改用下面的命令
    sbin/rndc-confgen -r /dev/urandom > etc/rndc.conf
  3. cd /usr/local/bind/etc/
  4. tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf
    此时named.conf文件内容如下
[root@localhost etc]# cat named.conf
key "rndc-key" {
    algorithm hmac-sha256;
    secret "AXeCgzN/af9naYrVgtmdBkBEO2XYDl4k+rlq3dICfrY=";
};
controls {
    inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
};

5 编辑named.conf文件,在当前文件的最后增加全局options配置如下。

options {
    directory "/usr/local/bind/var/run";
    pid-file "named.pid";
    recursion yes;
    allow-query { any; };
    listen-on port 53 { any; };
};

参数名称

参数说明

directory

named程序运行后cd到此目录,区文件、输出的文件也写在此目录

pid-file

进程id文件名

recursion

全局开启递归查询

allow-query

源IP解析限制,any代表所有

listen-on port 53

监听53端口的IP地址,any代表本机所有IP

  1. chown -R named:named /usr/local/bind
  2. cd /usr/local/bind
  3. 执行sbin/named -u named -g 检查配置文件合规性。
运行bind
  1. 执行如下命令启动bind。
    /usr/local/bind/sbin/named -u named -c /usr/local/bind/etc/named.conf
  2. 测试能正常解析
[root@localhost ~]# ps -ef|grep named
named     17934      1  1 07:54 ?        00:00:00 /usr/local/bind/sbin/named -u named -c /usr/local/bind/etc/named.conf
root      17944   1333  0 07:54 pts/0    00:00:00 grep --color=auto named
[root@localhost ~]# 
[root@localhost ~]# netstat -anp|grep 53
tcp        0      0 192.168.3.160:53        0.0.0.0:*               LISTEN      17934/named         
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      17934/named             
tcp6       0      0 fe80::9963:d77b:85c6:53 :::*                    LISTEN      17934/named         
tcp6       0      0 ::1:53                  :::*                    LISTEN      17934/named         
udp        0      0 192.168.3.160:53        0.0.0.0:*                           17934/named             
udp        0      0 127.0.0.1:53            0.0.0.0:*                           17934/named             
udp6       0      0 ::1:53                  :::*                                17934/named         
udp6       0      0 fe80::9963:d77b:85c6:53 :::*                                17934/named           
[root@localhost ~]# dig @127.0.0.1 www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @127.0.0.1 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8151
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; ANSWER SECTION:
www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	300	IN	A	61.135.169.125
www.a.shifen.com.	300	IN	A	61.135.169.121

;; Query time: 409 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jun 13 07:54:43 EDT 2020
;; MSG SIZE  rcvd: 104

bind源码快速安装本文先介绍到这,还有很多细节例如设置本地hint区、打印日志、正向、反向区等,请继续关注后续更新,谢谢!