在Ubuntu 16.04 LTS中安装和配置DNS服务器
这个全面的教程描述了如何在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服务器。