在Ubuntu 16.04 LTS中安装和配置DNS服务器

时间:2020-03-21 11:45:13  来源:igfitidea点击:

这个全面的教程描述了如何在Ubuntu 16.04 LTS 64位服务器版本中安装和配置DNS服务器。
我们可能已经知道,DNS是域名系统的简称,用于将主机名解析为IP地址,反之亦然。
就本教程而言,我将使用三个系统,一个用于主DNS服务器,另一个用于辅助DNS,第三个用于DNS客户端。
所有系统都在Ubuntu 16.04操作系统上运行。
这是每个系统的IP和主机名。

主DNS服务器:

  • 操作系统:Ubuntu 16.04 LTS 64位服务器
  • 主机名:pri.theitroad.lan
  • IP地址:192.168.1.200/24

备用DNS服务器:

  • 操作系统:Ubuntu 16.04 LTS 64位服务器
  • 主机名:sec.theitroad.lan
  • IP地址:192.168.1.201/24

DNS客户端:

  • 操作系统:Ubuntu 16.04 LTS 64位服务器
  • 主机名:client.theitroad.lan
  • IP地址:192.168.1.202/24

在Ubuntu 16.04中安装和配置DNS服务器

为了简化和理解,我将本教程分为三个部分。

  • 安装和配置仅缓存名称服务器,
  • 安装和配置主DNS服务器或者主DNS服务器
  • 安装和配置辅助DNS服务器或者从属DNS服务器

第1部分:安装和配置仅缓存名称服务器,

确保Ubuntu服务器是最新的。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

安装BIND9

更新系统后,运行以下命令以安装用于设置DNS服务器的BIND9软件包。

sudo apt-get install bind9 bind9utils bind9-doc

配置缓存名称服务器

缓存名称服务器会在特定时间段内将DNS查询结果保存在本地。
它通过在本地保存查询来减少DNS服务器的流量,因此提高了DNS服务器的性能和效率。

要配置缓存名称服务器,请编辑/etc/bind/named.conf.options文件:

sudo nano /etc/bind/named.conf.options

取消注释以下几行。
然后,添加ISP或者Google公共DNS服务器IP地址。

forwarders {
 8.8.8.8;
 };

保存并关闭文件。

然后重新启动bind9服务以使更改生效。

sudo systemctl restart bind9

我们已经成功安装了缓存名称服务器。

测试缓存名称服务器

现在让我们使用命令检查它是否正常工作:

dig -x 127.0.0.1

如果我们看到类似下面的内容,那么恭喜!缓存名称服务器正在运行!

; <<>> DiG 9.10.3-P4-Ubuntu <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22769
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 604800 IN PTR localhost.
;; AUTHORITY SECTION:
127.in-addr.arpa. 604800 IN NS localhost.
;; ADDITIONAL SECTION:
localhost. 604800 IN A 127.0.0.1
localhost. 604800 IN AAAA ::1
;; Query time: 0 msec
;; SERVER: 192.168.1.200#53(192.168.1.200)
;; WHEN: Tue Aug 23 15:53:59 IST 2015
;; MSG SIZE rcvd: 132

第2部分:安装和配置主DNS服务器

使用以下命令确保Ubuntu服务器是最新的:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

安装BIND9

运行以下命令以安装BIND9软件包。

sudo apt-get install bind9 bind9utils bind9-doc

配置主DNS服务器

所有配置文件都将在/etc/bind /目录下可用。

让我们编辑bind9配置文件

使用我们选择的任何编辑器编辑“ /etc/bind/named.conf”:

sudo nano /etc/bind/named.conf

该文件中应包含以下几行。
如果行不存在,只需添加它们。

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

保存更改并退出文件。

我们需要定义正向和反向区域文件。

为此,请编辑named.conf.local文件:

sudo nano /etc/bind/named.conf.local

如下所示定义正向和反向文件。

zone "theitroad.lan" {
        type master;
        file "/etc/bind/for.theitroad.lan";
        allow-transfer { 192.168.1.201; };
        also-notify { 192.168.1.201; };
 };
zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/rev.theitroad.lan";
        allow-transfer { 192.168.1.201; };
        also-notify { 192.168.1.201; };
 };

在此,for.theitroad.lan是前向区域文件。
rev.theitroad.lan是反向区域文件。
192.168.1.202是辅助DNS服务器的IP地址。
我们这样做是因为,如果主服务器关闭,辅助DNS将开始获取查询。

保存并关闭文件。

现在让我们创建在上一步中定义的区域文件。

首先,让我们创建正向区域文件,如下所示。

sudo nano /etc/bind/for.theitroad.lan

添加以下行:

$TTL 86400
@   IN  SOA     pri.theitroad.lan. root.theitroad.lan. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          pri.theitroad.lan.
@       IN  NS          sec.theitroad.lan.
@       IN  A           192.168.1.200
@       IN  A           192.168.1.201
@       IN  A           192.168.1.202
pri     IN  A           192.168.1.200
sec     IN  A           192.168.1.201
client  IN  A           192.168.1.202

同样,我们可以按照上述文件中的定义添加其他客户端记录。

保存并关闭文件。
接下来创建反向区域。

sudo nano /etc/bind/rev.theitroad.lan

添加以下行:

$TTL 86400
@   IN  SOA     pri.theitroad.lan. root.theitroad.lan. (
        2011071002  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          pri.theitroad.lan.
@       IN  NS          sec.theitroad.lan.
@       IN  PTR         theitroad.lan.
pri     IN  A           192.168.1.200
sec     IN  A           192.168.1.201
client  IN  A           192.168.1.202
200     IN  PTR         pri.theitroad.lan.
201     IN  PTR         sec.theitroad.lan.
202     IN  PTR         client.theitroad.lan.

保存并关闭文件。

将适当的权限和所有权设置为bind9目录。

sudo chmod -R 755 /etc/bind
sudo chown -R bind:bind /etc/bind

接下来,我们需要验证DNS配置文件和区域文件。

使用以下命令检查DNS配置文件:

sudo named-checkconf /etc/bind/named.conf
sudo named-checkconf /etc/bind/named.conf.local

如果以上命令未返回任何内容,则表明DNS配置有效。

接下来,使用以下命令检查区域文件:

sudo named-checkzone theitroad.lan /etc/bind/for.theitroad.lan

输出示例:

zone theitroad.lan/IN: loaded serial 2011071001
OK

检查反向区域文件:

sudo named-checkzone theitroad.lan /etc/bind/rev.theitroad.lan

输出示例:

zone theitroad.lan/IN: loaded serial 2011071002
OK

如果我们得到了如上所示的结果,那么一切都很好。

现在,该检查主DNS服务器是否正常工作了。

编辑/etc/network/interfaces文件:

sudo vi /etc/network/interfaces

添加DNS服务器IP地址。
在我们的例子中,DNS服务器IP与这台机器本身的IP地址相同。

dns-nameservers 192.168.1.200

保存并关闭文件。

最后,重新启动Bind9服务。

sudo systemctl restart bind9

测试主DNS服务器

使用dig或者nslookup命令验证DNS服务器。

dig pri.theitroad.lan

输出示例:

; <<>> DiG 9.10.3-P4-Ubuntu <<>> pri.theitroad.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51989
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;pri.theitroad.lan. IN A
;; ANSWER SECTION:
pri.theitroad.lan. 86400 IN A 192.168.1.200
;; AUTHORITY SECTION:
theitroad.lan. 86400 IN NS sec.theitroad.lan.
theitroad.lan. 86400 IN NS pri.theitroad.lan.
;; ADDITIONAL SECTION:
sec.theitroad.lan. 86400 IN A 192.168.1.201
;; Query time: 0 msec
;; SERVER: 192.168.1.200#53(192.168.1.200)
;; WHEN: Tue Aug 23 16:56:13 IST 2015
;; MSG SIZE rcvd: 110

或者,使用nslookup命令,如下所示:

nslookup theitroad.lan

输出示例:

Server: 192.168.1.200
Address: 192.168.1.200#53
Name: theitroad.lan
Address: 192.168.1.200
Name: theitroad.lan
Address: 192.168.1.201
Name: theitroad.lan
Address: 192.168.1.202

如果我们得到类似上面的结果,则说明主DNS服务器已启动并且运行正常!

第2部分:安装和配置辅助DNS服务器

我们需要一个单独的系统来设置此服务器。
我们需要辅助DNS服务器,因为在主DNS出现任何问题的情况下,辅助dns服务器仍将解决查询。

首先,使用以下命令更新服务器:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

安装BIND9

安装所需的bind9软件包:

sudo apt-get install bind9 bind9utils bind9-doc

配置辅助DNS服务器

编辑bind9配置文件:

sudo nano /etc/bind/named.conf

如果以下行不存在,请添加它们。

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

保存并关闭文件。

接下来,我们需要定义区域文件。

为此,请编辑named.conf.local文件:

sudo nano /etc/bind/named.conf.local

添加或者修改以下行。
用我们自己的值替换IP地址和区域文件。

zone "theitroad.lan" {
        type slave;
        file "/var/cache/bind/for.theitroad.lan";
        masters { 192.168.5.200; };
 };
zone "1.168.192.in-addr.arpa" {
        type slave;
        file "/var/cache/bind/rev.theitroad.lan";
        masters { 192.168.5.200; };
 };

此处,192.168.1.200是主DNS服务器的IP地址。

请注意,区域文件的路径必须是/var/cache/bind /目录。
这是因为默认情况下AppArmor仅允许在其内部进行写访问。

接下来,将适当的权限和所有权设置为bind目录。

sudo chmod -R 755 /etc/bind
sudo chown -R bind:bind /etc/bind

然后,编辑网络配置文件,并添加主要和辅助DNS服务器的IP地址。

sudo nano /etc/network/interfaces
[...]
dns-nameservers 192.168.1.200
dns-nameservers 192.168.1.201

保存并关闭文件。

最后,重新引导系统以使所有更改生效。

测试辅助DNS服务器

正如我已经提到的,我们使用“ dig”或者“ nslookup”命令来测试DNS服务器。

让我们使用以下命令验证辅助DNS服务器:

dig sec.theitroad.lan

输出示例:

; <<>> DiG 9.10.3-P4-Ubuntu <<>> sec.theitroad.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49308
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sec.theitroad.lan. IN A
;; ANSWER SECTION:
sec.theitroad.lan. 86400 IN A 192.168.1.201
;; AUTHORITY SECTION:
theitroad.lan. 86400 IN NS sec.theitroad.lan.
theitroad.lan. 86400 IN NS pri.theitroad.lan.
;; ADDITIONAL SECTION:
pri.theitroad.lan. 86400 IN A 192.168.1.200
;; Query time: 2 msec
;; SERVER: 192.168.1.200#53(192.168.1.200)
;; WHEN: Tue Aug 23 18:19:47 IST 2015
;; MSG SIZE rcvd: 110

同样,我们可以使用以下命令验证主DNS服务器:

dig pri.theitroad.lan

或者,只需使用nslookup命令,如下所示。

nslookup theitroad.lan

注意:请注意,仅当主DNS服务器上的序列号高于辅助DNS服务器的序列号时,才会传输区域文件。

配置DNS客户端

在客户端系统中编辑网络配置文件:

sudo nano /etc/network/interfaces

添加名称服务器IP地址。

[...]
nameserver 192.168.1.200
nameserver 192.168.1.201

保存并关闭文件。
然后,重新引导系统以使更改生效。

使用以下任一命令测试DNS服务器:

dig pri.theitroad.lan
dig sec.theitroad.lan
dig client.theitroad.lan
nslookup theitroad.local

在此阶段,我们将拥有工作的主DNS服务器和辅助DNS服务器。