基于Linux(CentOS/Ubuntu)使用Bind9自建私有权威DNS

Bind9简介

企业内部经常需要搭建内部的DNS服务器,现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows),BIND服务的名称称之为named。DNS默认使用UDP、TCP协议,使用端口为53(domain),953(mdc,远程控制使用)。

名词解析

DNS: 域名解析服务(DomainNameSystem),是用于解析域名与IP地址对应关系的服务。
LDNS: Local DNS 也称为递归 DNS、缓存 DNS,核心功能是缓存、递归查询。收到域名查询请求后,Local DNS 首先查看本地缓存中是否有记录。如果没有则逐级查询根域、顶级域、二级域等,直到获取到结果然后返回给用户。一般来说,运营商(例如联通、移动、电信)分配的 DNS 就是 Local DNS,主要功能是帮助运营商的网络用户去相应的权威 DNS 服务查询域名解析结果,其查询结果直接影响某一运营商的所有网络用户。
权威 DNS: 权威 DNS 是域名注册商处的 DNS 服务器,用于管理特定域名(比如增加、删除、修改等)。权威 DNS 服务器一般由域名解析服务商建设,供购买自己域名服务的用户使用,方便管理域名记录。由于权威 DNS 服务器需要接受 Local DNS 服务器的查询,其结果直接影响某一域名解析服务商的所有用户,间接影响所有网民。中小型公司一般会选择一家知名的权威 DNS 服务商提供的托管服务,比如阿里云云解析 DNS。
正向解析: 根据主机名(域名)查找对应的IP地址。
反向解析: 根据IP地址查找对应的主机名(域名)。

DNS解析过程

基于Linux(CentOS/Ubuntu)使用Bind9自建私有权威DNS_第1张图片

  1. 当被询问到有关本地管理区所授权的域名时﹐DNS服务器会直接做出回答﹔
  2. 如果所查询的域名属于其它区域的话﹐会检查缓存﹐看看有没有相关数据;
  3. 如果没有发现﹐则会转向根节点服务器查询﹔
  4. 然后根节点服务器会将该区域授权服务器(可能会超过一台)的地址告知本地服务器﹔
  5. 本地服务器然后向其中的一授权台服务器查询﹐并将这些服务器名单存到缓存中(省却再向 根查询的步骤)﹔
  6. 远方服务器回应查询﹔
    7.将结果存储在缓存中,并同时将结果响应给客户,从步骤1到步骤7是一个完整的递归解析过程;
  7. 如果缓存的记录存放时间尚未过期之前再接到相同的查询﹐则以存放在缓存中的数据来做响应。

适用场景

本文介绍了如何使用BIND软件轻松构建一套私有的权威DNS服务,用于内部调用API或内部域名隐私保护等场景。

安装篇

方式一、在线安装

  1. YUM管理器(RedHat体系)
    以centos7.4为例:
yum -y install bind-chroot bind bind-utils bind-devel
  1. APT管理器(Debian体系)
    以ubuntu16.04为例:
sudo apt-get install -y bind9 bind9-host dnsutils bind9-doc

方式二、离线包安装

离线安装包均可以在该网站上搜索到:https://pkgs.org/download/bind9

  1. RPM包(RedHat体系)
    以centos7.4为例:
#将需要下载好的安装包都放在同一目录下
[root@localhost ~]# mkdir /root/bind9/
[root@localhost ~]# cd /root/bind9/
[root@localhost bind9]# cd /root/bind9/ && ls
bind-9.9.4-61.el7_5.1.x86_64.rpm
bind-libs-9.9.4-61.el7_5.1.x86_64.rpm
bind-libs-lite-9.9.4-61.el7_5.1.x86_64.rpm
bind-license-9.9.4-61.el7_5.1.noarch.rpm
[root@localhost bind9]# yum localinstall -y ./*
  1. DEB包(Debian体系)
    以ubuntu16.04为例:

ubuntu@ubuntu-xenial:~$ mkdir ~/bind9/
ubuntu@ubuntu-xenial:~$ cd ~/bind9/ && ls
libbind9-140_9.10.3.dfsg.P4-8_amd64.deb
bind9utils_9.10.3.dfsg.P4-8_amd64.deb
bind9_9.10.3.dfsg.P4-8_amd64.deb
bind9-host_9.10.3.dfsg.P4-8_amd64.deb
ubuntu@ubuntu-xenial:~/bind9$ dpkg -i ./*.deb

方式三、源码编译安装

wget https://www.isc.org/downloads/file/bind-9-12-2-p1/?version=tar-gz -O bind-9.12.2-P2.tar.gz
tar zxvf bind-9.12.2-P2.tar.gz
cd bind-9.12.2-P2
./configure --sysconfdir=/etc/bind --with-libtool
make
make install

配置篇

编辑主配置文件/etc/named.conf,需要修改的行数如下:(下面显示的是修改之后的配置)

[root@internal-dns]# vim /etc/named.conf
13 listen-on port 53 { any; }; //127.0.0.1修改为any,代表允许监听任何IP地址。
14 #listen-on-v6 port 53 { ::1; }; //注释掉这行
19 allow-query { any; }; //localhost修改为any,代表允许任何主机查询。

配置区域数据信息,文件名为/etc/named.rfc1912.zones,在该文件最下面追加以下内容:

vim /etc/named.rfc1912.zones
# 正向解析
zone "linux.com" IN {
        type master;
        file "linux.com.zone";
        allow-update { none; };
};
 
# 反向解析
zone "15.168.192.in-addr.arpa" IN {
        type master;
        file "1.0.0.127.zone";
};

配置解析数据信息

  1. 复制正向解析配置模板文件,填写相关记录值:
cp /var/named/named.localhost  /var/named/linux.com.zone

修改后的正向解析文件内容如下:

[root@localhost named]# cat linux.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.linux.com.
dns IN A 192.168.15.150
www IN A 192.168.15.150
hehe IN A 192.168.15.150
  1. 复制反向解析配置模板文件,填写相关记录值:
cp /var/named/named.loopback /var/named/1.0.0.127.zone

修改后的反向解析文件内容如下:

[root@localhost named]# cat 1.0.0.127.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.linux.com.
150 IN PTR dns.linux.com.
150 IN PTR www.linux.com.
150 IN PTR hehe.linux.com.

检验配置文件语法是否正确:

named-checkconf /etc/named.conf
named-checkzone linux.com /var/named/linux.com.zone
named-checkzone 1.0.0.127.in-addr.arpa /var/named/1.0.0.127.zone

重启named服务:

systemctl restart named

检验解析结果
1)将本机DNS地址设置为本机IP:

[root@ineteral-dns named]# cat /etc/resolv.conf
nameserver 192.168.15.150

2)使用host/nslookup/dig等命令测试解析是否生效。
基于Linux(CentOS/Ubuntu)使用Bind9自建私有权威DNS_第2张图片

注意事项

部署完成后,各需要调用私有权威DNS的主机,需要在各主机修改DNS地址为部署Bind9的服务器IP地址,不影响各主机上互联网,但如果配置的权威域名zone如果为www.taobao.com,1.1.1.1,那么此域名首先解析到的地址为1.1.1.1,而不是公网的淘宝网地址,这相当于域名劫持操作。

常见报错

在测试的时候,可能会遇到下面一些报错。

一、Host not found

Host www.linux.com not found: 2(SERVFAIL)

报错原因可能是配置文件的权限问题,检查配置文件的属性:

[root@ineteral-dns named]# ll
总用量 24
-rw-r----- 1 root root 475 5月 7 13:26 1.0.0.127.zone
-rw-r----- 1 root root 248 5月 7 13:26 linux.com.zone

修改域文件的属性:

chmod 640 *.zone
chgrp named linux.com.zone
chgrp named 1.0.0.127.zone

二、正向解析正常,反向解析错误

反向解析的时候,出现以下报错:

server can’t find 150.15.168.192.in-addr.arpa.: NXDOMAIN

可能的原因是反向解析文件的区域配置错误,检查区域信息配置:

zone "15.168.192.in-addr.arpa" IN {
type master;
file "1.0.0.127.zone";
};

你可能感兴趣的:(基于Linux(CentOS/Ubuntu)使用Bind9自建私有权威DNS)