Linux DNS 服务器搭建

介绍

我们有文章介绍了如何配置 Linux 版本的 3CX 双击热备。在整个配置过程中,我们需要另外一台 Linux 的 DNS 服务器,当实现双机热备功能时,备机执行脚本来修改 DNS 服务器中的记录值的功能。

那么本篇我们就来讲讲如何简单搭建一个 Linux 版本的 DNS 服务器。

这里我们使用的环境为:

  • Debian 10.2

搭建 DNS

首先需要注意的是这个 DNS 服务器需要设置为静态 IP,如果 IP 变来变去,话机也没办法一直能解析到 3CX 正确的 IP。

这里我们的 DNS 服务器的 IP 是 10.168.1.53

系统装好后,我们需要安装 dns 服务和它的组件:

$ sudo apt install -y bind9 dnsutils

?Tips: 如果 Linux 发行版为 centos,dns 服务是 named

bind9 默认装在 /etc/bind/ 目录下,其中配置文件为 named.conf,我们看一下他里面记录了哪些信息:

$ cat /etc/bind/named.conf

可以看到这个文件是载入了以下三个文件:

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

其中 options 结尾的是 DNS 服务器的配置文件;local 结尾的是本地 DNS 服务的配置,我们会在这里声明内部的 FQDN; default-zones 是默认的 zone 文件。

接下来我们给 options 文件先做个备份:

$ cd /etc/bind/$ cp named.conf.options named.conf.options.bak

然后我们将以下内容写入到 options 文件中:

options {    
    listen-on { any; };    
    listen-on-v6 { none; };    
    allow-query { any; };    
    recursion yes;    
    allow-recursion { any; };    
    allow-transfer {none;};    
    forwarders {        
      223.5.5.5;        
      8.8.8.8;    
    };
};

其中:

  • listen-on : 允许查询的 IPv4 地址
  • listen-on-v6 : 允许查询的 IPv6 地址
  • allow-query : 是否可以查询。如果只允许内网查询的话可设置为 internals
  • allow-recursion : 是否允许递归查询,只允许内网查询可设置为 internals
  • allow-transfer : 是否允许将 zone 信息转发给其他 DNS 服务器
  • forwarders : 本机没有的 DNS 记录,去下面的 DNS 服务器中查询

写入后保存并重启 bind9 服务:

$ sudo service bind9 restart

然后我们查看一下 bind9 服务是否在运行中:

$ sudo service bind9 status

如果服务没有正常运行,就是 options 文件设置有问题。

那么我们已经可以查询本机做一下测试了:

$ dig www.3cx.com @127.0.0.1

如果查询有结果,并且下面的 SERVER 显示的是 127.0.0.1#53,那就说明 DNS 服务器已经跑起来了,并且工作正常!

设置内部 FQDN

既然要设置 FQDN,我们就要建一个域(zone)。比如我这里用的内部 FQDN 为 3cx.debian.domain。那么域就是 debian.domain。

编辑 named.conf.local 文件,加入以下内容:

zone "debian.domain" {    
    type master;    
    file "/etc/bind/db.debian.domain";
};

将上面的 debian.domain 替换成用户的域。

接着我们在创建一个 db.debian.domain 文件,并填入下面的信息:

$TTL    3600
@       IN      SOA     3cx.debian.domain. root.debian.domain. (    
                  2007010401           ; Serial                                    
                        3600           ; Refresh [1h]                       
                         600           ; Retry   [10m]                                            86400           ; Expire  [1d]                                                600 )         ; Negative Cache TTL [1h];
@       IN      NS      3cx.debian.domain.
@       IN      MX      10 3cx.debian.domain.
​3cx IN A 10.168.1.53

记得修改对应的记录值。

修改完后重启一下 bind9 服务:

$ sudo service bing9 restart

然后查一下我们的域名是否可以查询:

$ dig 3cx.debian.domain @127.0.0.1

如上图所示就大功告成了。

应用

我们首先需要将 /etc/resolv.conf 文件中的第一行改为:

nameserver 10.168.1.53

这里的 DNS 改成我们的 DNS 服务器的 IP。

然后话机的 IP 可以直接通过 DHCP 下发,也可以通过公司的主 DNS 做转发(做转发的话有缓存,failover 速度会慢一点)。

那么我们可以 配合Linux 版本的 3CX 双击热备 实现 3CX 的双击热备功能。