CentOS 7 使用 bind 配置私有网络的 DNS

Posted 高效运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7 使用 bind 配置私有网络的 DNS相关的知识,希望对你有一定的参考价值。

前言

CentOS 7 使用 bind 配置私有网络的 DNS,记录一下大致的安装和配置过程。

环境说明
CentOS 7(Minimal Install)

样例说明
本例需要 4 台服务器

10.11.0.199 ns1
10.11.0.209 ns2
10.11.0.101 host1
10.11.0.102 host2

ns1 为主 DNS,ns2 为次 DNS,host1,host2 分别为注册的主机(注意: host1, host2 不是机器名,因为机器名跟 DNS 没关系,host1, host2 是 DNS 里配置的)

具体说明如下:

  • 我们使用 2 个服务器 host1 和 host2

  • 服务器在一个机房内,本例为北京机房(bj1 datacenter)

  • 机房内的服务器网络是相互联通的(本例都在 10.11.0.0/16 子网内)

  • 本机房使用 example.com 这个域名(实际情况请自行更改,注意最好使用自己的域名,这样可以保障不会出现重复等冲突)

Host Role Private FQDN Private IP Address
host1 Host host1.bj1.example.com 10.11.0.101
host2 Host host2.bj1.example.com 10.11.0.102

注意:请根据实际情况更改域名和 IP 。

目的说明
我们最终搭建主 DNS 服务器 ns1 和次 DNS服务器 ns2。

列表如下:

Host Role Private FQDN Private IP Address
ns1 Primary DNS ns1.bj1.example.com 10.11.0.199

安装和配置

更新系统

$ sudo yum update

版本如下

$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

安装 bind
DNS 服务器都需要安装 bind。

$ sudo yum install bind bind-utils

安装之后,开始配置主 DNS 服务器。

配置主 DNS 服务器

BIND 包含很多配置文件,在 named.conf 中配置。这些配置文件都是以 “named” 开头,这样 BIND 程序要求的。

配置 bind

BIND 进程名叫 named。 所以,很多文件名都是 named 而不是 bind。

进入 ns1 服务器,编辑 named.conf

$ sudo vi /etc/named.conf

在 options 块前面,创建一个 ACL(Access Control List) 块,名称为 “trusted”。我们使用这个控制局域网内哪些计算机可以使用我们这个域名服务进行递归域名查询。本例将添加 ns1, ns2, host1, host2作为信任的客户机。

acl "trusted" {
10.11.0.199; # ns1 - can be set to localhost
10.11.0.209; # ns2
10.11.0.101; # host1
10.11.0.102; # host2
};
options {
listen-on port 53 { 127.0.0.1; 10.11.0.199; };
# listen-on-v6 port 53 { ::1; };
...
...
options {
...
allow-transfer { 10.11.0.209; }; # disable zone transfers by default
...
allow-query { trusted; }; # allows queries from "trusted" clients
...

在文件的最后,添加这一行

include "/etc/named/named.conf.local";

保存 :wq 之后,看起来是这样的

acl "trusted" {
10.11.0.199; # ns1 - can be set to localhost
10.11.0.209; # ns2
10.11.0.101; # host1
10.11.0.102; # host2
};
options {
listen-on port 53 { 127.0.0.1; 10.11.0.199; };
# listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-transfer { 10.11.0.209; }; # disable zone transfers by default
allow-query { trusted; }; # allows queries from "trusted" clients

recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named/named.conf.local";

接下来,我们需要新建 named.conf.local 配置 DNS 域

配置本地文件

在 ns1 服务器,配置 named.conf.local

$ sudo vi /etc/named/named.conf.local

我们将本地配置都放到 /etc/named 文件夹下,在这个配置中指定正向和反向的域。

添加正向域

zone "bj1.example.com" {
type master;
file "/etc/named/zones/db.bj1.example.com"; # zone file path
};

假设我们的私有子网为 10.11.0.0/16 则需要添加如下反向配置(注意 我们的反向域的名称以 11.10 开始,这正好是 10.11 八进制反过来)

zone "11.10.in-addr.arpa" {
type master;
file "/etc/named/zones/db.10.11"; # 10.11.0.0/16 subnet
};
保存 :wq 之后,这个文件看起来是这样的

zone "bj1.example.com" {
type master;
file "/etc/named/zones/db.bj1.example.com"; # zone file path
};
zone "11.10.in-addr.arpa" {
type master;
file "/etc/named/zones/db.10.11"; # 10.11.0.0/16 subnet
};

如果还有其他子网,则将每个网段都加入到这个文件中,在添加其他域 zone 的配置。

现在域文件指定了,我们就按照这个配置,新建正向域和反向域的文件。

创建正向域文件

根据配置文件,需要新建 /etc/named/zones 文件夹

$ sudo chmod 755 /etc/named
$ sudo mkdir /etc/named/zones

我们开始编辑正向域文件

$ sudo vi /etc/named/zones/db.bj1.example.com

首先,要添加一条 SOA 记录 (起始授权机构)。注意替换为您自己的域名,每次编辑文件,请增加 Serial 的值,之后再重启 named 服务,因为如果数字不增加,次 DNS 不会同步更新配置,本例中 Serial 的值为 3 (RFC1912 2.2建议的格式为YYYYMMDDnn 其中nn为修订号;)。

$TTL    604800
@ IN SOA ns1.bj1.example.com. admin.bj1.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

之后,我们需要添加 NS 记录。

; name servers - NS records
IN NS ns1.bj1.example.com.
IN NS ns2.bj1.example.com.
; name servers - A records
ns1.bj1.example.com. IN A 10.11.0.199
ns2.bj1.example.com. IN A 10.11.0.209

; 10.11.0.0/16 - A records
host1.bj1.example.com. IN A 10.11.0.101
host2.bj1.example.com. IN A 10.11.0.102

保存 :wq 之后,这个文件 db.bj1.example.com 看起来是这样的

$TTL    604800
@ IN SOA ns1.bj1.example.com. admin.bj1.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

; name servers - NS records
IN NS ns1.bj1.example.com.
IN NS ns2.bj1.example.com.

; name servers - A records
ns1.bj1.example.com. IN A 10.11.0.199
ns2.bj1.example.com. IN A 10.11.0.209

; 10.11.0.0/16 - A records
host1.bj1.example.com. IN A 10.11.0.101
host2.bj1.example.com. IN A 10.11.0.102

创建反向域文件

反向域文件,主要是 DNS 中的 PTR 记录进行 DNS 查找(即通过 IP 查找域名, 如本例中,DNS 收到查找 10.11.0.101 的请求,进行查找,返回 host1.bj1.example.com 这个域名)

$ sudo vi /etc/named/zones/db.10.11

与正向域文件一样,要添加一条 SOA 记录 (起始授权机构)。注意替换为您自己的域名,每次编辑文件,请增加 Serial 的值,之后再重启 named 服务。

$TTL    604800
@ IN SOA ns1.bj1.example.com. admin.bj1.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

之后,添加 NS 记录

; name servers - NS records
IN NS ns1.bj1.example.com.
IN NS ns2.bj1.example.com.
; PTR Records
199.0 IN PTR ns1.bj1.example.com. ; 10.11.0.199
209.0 IN PTR ns2.bj1.example.com. ; 10.11.0.209
101.0 IN PTR host1.bj1.example.com. ; 10.11.0.101
102.0 IN PTR host2.bj1.example.com. ; 10.11.0.102

保存 :wq 之后,这个文件 db.10.11 看起来是这样的

$TTL    604800
@ IN SOA ns1.bj1.example.com. admin.bj1.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

; name servers - NS records
IN NS ns1.bj1.example.com.
IN NS ns2.bj1.example.com.

; PTR Records
199.0 IN PTR ns1.bj1.example.com. ; 10.11.0.199
209.0 IN PTR ns2.bj1.example.com. ; 10.11.0.209
101.0 IN PTR host1.bj1.example.com. ; 10.11.0.101
102.0 IN PTR host2.bj1.example.com. ; 10.11.0.102

检查 bind 配置

使用 named-checkconf 命令检查 named.conf* 文件

$ sudo named-checkconf

如果有错误,会返回错误的提示,请根据提示进行查找问题和修正。

使用 named-checkzone 命令检查域文件语法是否错误

例如,检查正向域文件配置

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

检查反向域文件配置

$ sudo named-checkzone 11.10.in-addr.arpa /etc/named/zones/db.10.11

如果检查没有问题,可以重启 bind 服务

启动 bind 服务

启动

$ sudo systemctl start named

设置开机启动

$ sudo systemctl enable named

防火墙开放端口

BIND 默认使用 53 端口,使用 TCP 和 UDP 协议,我们需要再防火墙开放这两个端口。

$ sudo firewall-cmd --zone=public --permanent --add-port=53/tcp
$ sudo firewall-cmd --zone=public --permanent --add-port=53/udp
$ sudo firewall-cmd --reload

查看端口开放

$ sudo firewall-cmd --list-ports
53/udp 53/tcp

到此为止,主 DNS 服务器已经配置完成,我们开始配置次 DNS 服务器

配置次 DNS 服务器

大多数情况下,如果主 DNS 不可用,次 DNS 负责响应,会很好的保障网络稳定性。次 DNS 非常容易配置。

在 ns2 服务器上,编辑 named.conf 配置文件

在 options 块前,插入 ACL 块进行访问控制。

acl "trusted" {
10.11.0.199; # ns1 - can be set to localhost
10.11.0.209; # ns2
10.11.0.101; # host1
10.11.0.102; # host2
};
options {
listen-on port 53 { 127.0.0.1; 10.11.0.209; };
# listen-on-v6 port 53 { ::1; };
...

更改 allow-query 条目,由 localhost 改为 trusted。

...
options {
...
allow-query { trusted; }; # allows queries from "trusted" clients
...

在配置最后,添加本地配置文件

include "/etc/named/named.conf.local";

保存 :wq 之后,编辑 named.conf.local 文件

$ sudo chmod 755 /etc/named
$ sudo vi /etc/named/named.conf.local
zone "bj1.example.com" {
type slave;
file "slaves/db.bj1.example.com";
masters { 10.11.0.199; }; # ns1 private IP
};

zone "11.10.in-addr.arpa" {
type slave;
file "slaves/db.10.11";
masters { 10.11.0.199; }; # ns1 private IP
};

保存 :wq 之后,校验一下 named.conf.local

$ sudo named-checkconf

如果没问题,开始启动服务

$ sudo sudo systemctl start named

设置开机启动

$ sudo systemctl enable named

开启防火墙端口

$ sudo firewall-cmd --zone=public --permanent --add-port=53/tcp
$ sudo firewall-cmd --zone=public --permanent --add-port=53/udp
$ sudo firewall-cmd --reload

配置 DNS 客户端

在 CentOS, RedHat, and Fedora Linux VPS, 编辑 resolv.conf 文件。

在 host1 host2 服务器上分别设置:

$ sudo vi /etc/resolv.conf

添加如下配置

search bj1.example.com  # your private domain
nameserver 10.11.0.199 # ns1 private IP address
nameserver 10.11.0.209 # ns2 private IP address

测试

使用 nslookup 工具,在 CentOS 7 中,这个工具在 bind-utils 内。本例测试对 host2 进行正向查找和反向查找。

在 host1 上安装 bind-utils

$ sudo yum install bind-utils

正向查找

$ sudo nslookup host2
Server: 10.11.0.199
Address: 10.11.0.199#53

Name: host2.bj1.example.com
Address: 10.11.0.102

输入的是 host2 会扩展为 host2.bj1.example.com 其中 bj1.example.com 是在 resolv.conf 中 search 设置的。

也可以查找 FQDN (Fully-Qualified Domain Name)

$ sudo nslookup host2.bj1.example.com
Server: 10.11.0.199
Address: 10.11.0.199#53

Name: host2.bj1.example.com
Address: 10.11.0.102

反向查找

$ nslookup 10.11.0.102
Server: 10.11.0.199
Address: 10.11.0.199#53

102.0.11.10.in-addr.arpa name = host2.bj1.example.com.

这表示 DNS 服务配置正常,恭喜!

维护 DNS 记录

如果使用私有 DNS 服务,难免需要增加,修改和删除机器,那么也要相应的维护 DNS 中的记录。

添加主机到 DNS 中

主 DNS 服务器设置

  • 正向域添加 A 记录,增加 Serial 的值

  • 反向域添加 PTR 记录,增加 Serial 的值

重启 bind 服务

$ sudo systemctl reload named

次 DNS 服务器设置

  • $ sudo systemctl reload named

配置新主机的 DNS

  • 配置 resolv.conf

  • 使用 nslookup 工具测试

从 DNS 中移除主机

  • 从信任列表删除

  • 删除正向域的 A 记录,增加 Serial 的值

  • 删除反向域的 PTR 记录,增加 Serial 的值

重启 bind 服务

$ sudo systemctl reload named

转发

有时,需要访问外网服务,这就需要用到 bind 的转发功能,在 named.conf 配置的 options 块中,添加 forwarders 条目.

...
options {
...
forwarders {
8.8.8.8; # 本例使用 Google 的DNS,配置外网的 DNS,请根据实际情况配置
8.8.4.4;
};
...

这样,内网 DNS 查找可以使用,也可以进行外网 DNS 正向查找跟反向查找了。

结束语

本例使用 bind 安装和配置主 DNS 服务器和次 DNS 服务器。

  • 配置主 DNS 服务器

  • 配置次 DNS 服务器

  • 测试 DNS 服务

  • 维护 DNS 服务

来源:https://qizhanming.com/blog/。

点击阅读原文,更多精彩

以上是关于CentOS 7 使用 bind 配置私有网络的 DNS的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker快速搭建Webmin+bind私有DNS服务器

centos6.8+nginx+python2.7.13配置seafile私有云盘

centos7_bind_DNS 配置masterslave缓存转发

CentOS 7 安装 bind 服务 实现内网DNS

Linux Centos 6.5 DNS主从复制配置(bind-9.8.2)

Linux Centos 6.5 DNS主从复制配置(bind-9.8.2)