ubuntu 局域网dns服务器_在Ubuntu 16.04中配置内网DNS服务的步骤

本文在 Ubuntu 16.04 版本中使用 BIND9 搭建出一个可用的内网 DNS 服务。另外要说明的一点是,本文不仅适用于 Ubuntu 16.04,也适用于 Ubuntu server 18.04 或者其它的 Ubuntu 版本,至于 18.04 之后如 Ubuntu 18.10 尚未测试,不保证也能适合。下面是配置极简内网 DNS 服务的重要操作步骤。

1.安装 BIND9

先更新 APT,之后再安装 BIND9 相关的软件包:

$ sudo apt update

$ sudo apt install bind9 bind9utils bind9-doc

2.配置 BIND9 的 IPv4 模式

这步是要将 BIND9 设置为只支持 IPv4 地址,如果需要用到 IPv6 地址的话,可以跳过这步。

我们需要修改 BIND9 的 systemd unit file:

$ sudo systemctl edit --full bind9

当然我们也可以直接用文件编辑器修改文件:

$ sudo vim /etc/systemd/system/multi-user.target.wants/bind9.service

文件内容如下,在 ExecStart 这行的最后加上 -4 就可以了。

...

[Service]

...

ExecStart=/usr/sbin/named -f $OPTIONS -4

...

修改配置后,需要重启 BIND9,因为 systemd 的 unit file 也变了,所以需要重新载入:

$ sudo systemctl daemon-reload

$ sudo systemctl restart bind9

3.修改配置文件 named.conf.options

该文件(/etc/bind/named.conf.options)需要修改三处:

acl 部分:acl 是控制哪些客户端可以连接到这个 DNS 上的,支持子网掩码方式,例子中我把 10.19.250.0/24 网段中的所有 IP 都设为了可访问。

recursion 字段:设置成 yes,表示允许递归 DNS 查询。

allow-recursion 字段:允许递归查询的客户端范围,这里设置成了之前在 acl 中声明的 trusted。

listen-on 字段:表示 DNS 服务监听在哪个地址上,填写本地 IP 即可。

allow-transfer 字段:设置成 none 表示不允许其他 DNS 服务器从本 DNS 服务器中查询。

forwarders 字段:原因是我们的内网 DNS 服务只提供了很有限的几条 DNS 记录,如果不做点什么的话,APT 源的地址都解析不了。BIND9 提供 DNS 查询的转发机制,当本地 DNS 查询不到,将查询转发到 forwarders 上,并把查询结果缓存到本地 DNS 上,这样问题就解决了。本文使用的是国内公网 DNS:114.114.114.114,大家可以根据自己的需求进行修改。

运行:$ cat /etc/bind/named.conf.options

acl "trusted" {

10.19.250.0/24;

};

...

options {

recursion yes;

allow-recursion { trusted; };

listen-on { 10.19.250.56; };

allow-transfer { none; };

...

forwarders {

114.114.114.114;

};

...

}

...

4.修改配置文件 named.conf.local

假设搭建的内网 DNS 要解析的域名为 example.com,那么 /etc/bind/named.conf.local 内容应改为:

运行:$ cat /etc/bind/named.conf.local

zone "example.com" {

type master;

file "/etc/bind/zones/db.example.com";

};

5.修改 zone 文件

zone 文件在 2.4 里已经出现过了,file "/etc/bind/zones/db.example.com";,需要在对应的目录下建立该文件。

运行:$ cat /etc/bind/zones/db.example.com,内容如下图所示:

ubuntu 局域网dns服务器_在Ubuntu 16.04中配置内网DNS服务的步骤_第1张图片

需要注意的几点是:

1].不要漏掉域名后面的点,例如:testing.example.com.

2].我们需要的 A 类型的记录,但是 NS 类型的记录也不要漏掉,不然会报错的。

named-checkconf[39493]: zone example.com/IN: has no NS records

named-checkconf[39493]: zone example.com/IN: not loaded due to errors.

named-checkconf[39493]: _default/example.com/IN: bad zone

3].SOA 类型的记录目前我还不能确定是不是必须,待验证过后再做更新,在这之前,大家还是也把这部分加上吧。

6.检查 DNS 配置

bind9 自带了检查配置文件语法正确性的工具,这可以降低排查错误的难度,所以在进一步测试 DNS 功能之前,我们先来好好利用这些工具检查一下前几步配置是否正确吧。

先来检查 named.conf.* 文件,如果运行该命令没有任何输出的话,就说明配置一切 OK,如果有的话,根据提示修改,如果遇到问题不知道怎么解决,欢迎留言。

$ sudo named-checkconf

接下来用命令 named-checkzone 检查 zone 文件,命令格式如下:sudo named-checkzone ,第一个参数 是域名,参考 2.4 中配置的域名,第二参数 是 zone 文件,参考 2.5 中配置的 zone 文件。

$ sudo named-checkzone example.com /etc/bind/zones/db.example.com

zone example.com/IN: loaded serial 2

OK

如果输出结果如上,恭喜,配置正确,如果有问题的话,还是要根据提示具体问题具体分析。

7.验证

经过这些配置,终于可以验证一下 DNS 是否能正常工作了,先重启 bind9。

$ sudo systemctl restart bind9.service

接下来要用 nslookup 检查刚刚配置的域名能否正常解析,如果系统里没有这个命令,输入一下命令安装:

sudo apt install -y dnsutils

输入以下命令,可以看到 testing.example.com 正确的解析成了 10.19.250.201。恭喜,你成功的配置了 DNS。

$ nslookup testing.example.com

Server:     10.19.250.56

Address:    10.19.250.56#53

Name:   testing.example.com

Address: 10.19.250.201

相关主题

你可能感兴趣的:(ubuntu,局域网dns服务器)