搭建DNS缓存主备服务器

网络服务搭建篇 其二

上篇:DHCP服务器搭建

环境

服务器镜像:Ubuntu 18.04 LTS Server

主机名描述IP
Server1DHCP服务器和DNS主服务器192.168.200.10有外网权限
Server2备DNS服务器192.168.200.11有外网权限
Client客户端DHCP获取无外网权限

目标

实现外网的转发解析

解析以下域名:

域名解析值
www.abc.lan192.168.200.10
inadd.abc.lan192.168.200.15
192.168.200.15in.abc.lan
ns1.abc.lan192.168.200.10
ns2.abc.lan192.168.200.11

注意事项

配置文件结构

新版bind9(起码在Ubuntu上)将named.conf分拆成了三个文件:

  • named.conf.options:程序本身配置
  • named.conf.local:用户的域定义文件
  • named.conf.default-zones:默认的域定义文件

SOA

开始验证标识(Start of Authority),声明了域名的管理信息

如abc.lan域中d:

@ IN SOA ns1.abc.lan. admin.abc.lan. (2019042601 1H 5M 1D 1H )

按顺序解释如下:

  • @:范围为整个域
  • ns1.abc.lan. :负责该域DNS解析的Master服务器
  • admin.abc.lan. :该域的管理员电子邮件,即为admin@abc.lan
  • 2019042601 :序列号,代表域配置文件的版本号,越新的数字越大。习惯上以YYYYMMDDNU来命
  • 1H:Slave对该配置的更新频率,1小时
  • 5M:更新失败的重试间隔,5分钟
  • 1D:如果一直更新失败,Slave将在1天后不尝试更新,并删除该配置。若要恢复需管理员手动处理
  • 1H:配置中默认的缓存时间,1小时

dig

Linux中的DNS查询工具

正向查询:dig www.baidu.com

指定DNS服务器:dig www.baidu.com @8.8.8.8

反向查询:dig -x 192.168.200.15

主DNS服务器配置

1. 安装bind9组件

Bind是Linux中常用的DNS服务器程序

sudo apt install bind9

2. 关闭IPv6监听

实验环境在IPv4网络,不考虑IPv6,所以将bind设置为仅IPv4模式

管理员权限编辑/etc/default/bind9文件

在OPTIONS中添加-4选项,如"-u bind -4"

1556269045278

3. 配置缓存转发

管理员权限打开/etc/bind/named.conf.options,修改如下:

//设定可访问的主机清单
acl goodclients {
        192.168.200.0/24;
        localhost;
        localnets;
};

options {
        directory "/var/cache/bind";
        listen-on { 192.168.200.10;};  //设定IPv4监听地址
        listen-on-v6 { none; };  //不设置IPv6监听地址

        //关闭dnssec(域名安全扩展,这个配置在我们实验范畴外)
        dnssec-enable no;
        dnssec-validation no;

        auth-nxdomain no;    // conform to RFC1035

        recursion yes ;  //允许递归查询
        allow-query { goodclients;};  //设定查询客户端白名单
        allow-transfer { none; }; //默认不设置域转发的服务器,在各个域配置中设置
        
        #配置转发器
        forwarders {
                223.5.5.5;
                114.114.114.114;
        };
        forward only ;    //仅进行查询转发
};

修改时可以直接将旧的配置文件做备份

DNSSEC是对DNS解析进行签名的一套扩展,其需要配置一些密钥和其它参数,就先不考虑了。

4. 配置local文件

named.conf.local文件可用来声明域配置文件的存放信息

使用管理员权限修改/etc/bind/named.conf.local

zone "abc.lan" {
        type master;
        file "/etc/bind/db.abc.lan";
        allow-transfer { 192.168.200.11; };  //允许的从DNS服务器
};

zone "200.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.200";
        allow-transfer { 192.168.200.11; };
};

5.定义域配置文件

named.conf.local中我们定义了一个正向域和一个反向域。我们根据其配置在/etc/bind/下分别创建两个名为db.abc.landb.192.168.200的域配置文件:

db.abc.lan

$TTL    600
@       IN      SOA     ns1.abc.lan.  admin.abc.lan. (
                2019042601       ; Serial 序号
                1H               ; Refresh 更新频率
                5M               ; Retry 失败重试时间
                1D               ; Expire 失效时间
                1H )             ; Negative Cache TTL 默认缓存时间
; NS服务器
@       IN      NS      ns1.abc.lan.
@       IN      NS      ns2.abc.lan.

; NS记录
ns1     IN      A       192.168.200.10
ns2     IN      A       192.168.200.11

; 主机正解设置
www     IN      A       192.168.200.10
inadd   IN      A       192.168.200.15

db.192.168.200

$TTL    600
@       IN    SOA     ns1.abc.lan.  admin.abc.lan. (
              2019042601         ; Serial 序号
              1H                 ; Refresh 更新频率
              5M                 ; Retry 失败重试时间
              1D                 ; Expire 失效时间
              1H )               ; Negative Cache TTL 默认缓存时间

@       IN    NS      ns1.abc.lan.
@       IN    NS      ns2.abc.lan.

15      IN    PTR     inadd.abc.lan.

6. 检查配置

使用named-checkconf检查named.conf的配置是否有误

使用named-checkzone检查域配置文件是否有误

sudo named-checkconf
sudo named-checkzone abc.lan /etc/bind/db.abc.lan
sudo named-checkzone 192.168.200.in-addr.arpa /etc/bind/db.192.168.200

1556281895498

7. 重启bind9服务

sudo service bind9 restart

8. 验证

使用dig命令尝试查询

dig inadd.abc.lan @192.168.200.10

1556282542815

可以看见有响应

备DNS服务器设置

1. 基本服务配置

前三步和主DNS配置的1、2、3步相同,但需要将named.conf.options文件中的listen-on改为从服务器的IP。完整配置如下:

//设定可访问的主机清单
acl goodclients {
        192.168.200.0/24;
        localhost;
        localnets;
};

options {
        directory "/var/cache/bind";
        listen-on { 192.168.200.11;};  //设定IPv4监听地址
        listen-on-v6 { none; };  //不设置IPv6监听地址

        //关闭dnssec(域名安全扩展,这个配置在我们实验范畴外)
        dnssec-enable no;
        dnssec-validation no;

        auth-nxdomain no;    // conform to RFC1035

        recursion yes ;  //允许递归查询
        allow-query { goodclients;};  //设定查询客户端白名单
        allow-transfer { none; }; //默认不设置域转发的服务器,在各个域配置中设置
        
        #配置转发器
        forwarders {
                223.5.5.5;
                114.114.114.114;
        };
        forward only ;    //仅进行查询转发
};

2. 配置local文件

named.conf.local文件中我们一样要定义这两个域,不过可以直接指定类型为slave。这样bind会将域配置文件从主DNS服务器上同步过来。

zone "abc.lan" {
        type slave;
        file "slaves/db.abc.lan";
        masters { 192.168.200.10; };  //允许的从DNS服务器
};

zone "200.168.192.in-addr.arpa" {
        type slave;
        file "slaves/db.192.168.200";
        masters { 192.168.200.10; };
};

根据配置文件,我们可以看除同步过来的文件会放在/var/cache/bind/slaves/目录下。

检查发现我们没有这个目录,那么我们新建这个目录,并将所有权修改为bind:bind,权限设置为775

sudo mkdir /var/cache/bind/slaves
sudo chown bind:bind /var/cache/bind/slaves
sudo chmod 775 /var/cache/bind/slaves

3. 应用配置

使用named-checkconf命令检查配置

没问题后重启bind9服务

sudo service bind9 restart

查看服务状态

service bind9 status

1556285675297

验证DNS服务

在client中修改/etc/resolv.conf文件,将其DNS服务器设置修改为我们配置的服务器

nameserver 192.168.200.10
nameserver 192.168.200.11

使用dig命令查询

用主服务器查询

www.baidu.com

1556285928378

www.abc.lan

1556285958176

inadd.abc.lan

1556285994199

反查192.168.200.15

1556286026010

用备DNS服务器查询

将主DNS服务器的程序关闭

1556286114497

此时继续尝试

1556286187622

1556286205607

1556286221095

可以看见现在的DNS响应是由192.168.200.11提供了

Last modification:May 6th, 2019 at 06:00 pm

Leave a Comment