CentOS 搭建 DNS 服务

本文介绍了在 CentOS 上使用 BIND (Berkeley Internet Name Domain) 搭建 DNS 服务的步骤。首先需要下载 DNS 服务软件,然后配置主配置文件和区域文件,接着配置正向解析数据文件和反向解析数据文件,设置文件权限,检查配置文件是否配置正确,最后启动 DNS 服务并测试解析。

CentOS 搭建 DNS 服务

可以使用 BIND (Berkeley Internet Name Domain) 来搭建 DNS 服务。以下是在 CentOS 上搭建 BIND 的步骤:

下载 DNS 服务软件

1
2
3
4
5
# 服务端需安装 bind-chroot 软件
yun install -y bind-chroot

# 客户端需下载 bind-utils(需要使用 nslookup 命令)
yum install -y bind-utils

配置主配置文件

https://bind9.readthedocs.io/en/v9_18_8/reference.html#configuration-reference

编辑 /etc/named.conf 文件,修改以下内容:

1
2
3
4
5
6
7
8
9
options {
// 配置 DNS 服务监听的 IP 地址(可以写成 any)和端口(默认 53,确保该端口没有被占用)
listen-on port 53 { any; };
// 允许任何网段的主机访问 DNS 服务
allow-query { any; };

dnssec-enable no;
dnssec-validation no;
};

https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-en-4/s1-bind-namedconf.html

配置区域文件

编辑 /etc/named.rfc1912.zones 文件,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
zone "wylu.test" IN {
type master;
file "wylu.test.localhost";
allow-update { none; };
};

zone "170.128.10.in-addr.arpa" IN {
type master;
file "wylu.test.loopback";
allow-update { none; };
};

配置正向解析数据文件

拷贝一份正向解析数据文件的模板,然后进行编辑:

1
2
3
cd /var/named
cp -a named.localhost wylu.test.localhost
vim wylu.test.localhost

添加如下内容:

1
2
3
4
5
6
7
8
9
10
$TTL 1D
@ IN SOA wylu.test. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS www.wylu.test.
www A 10.128.170.235
email A 10.128.170.235

配置反向解析数据文件

拷贝一份正向解析数据文件的模板,然后进行编辑:

1
2
3
cd /var/named
cp -a named.loopback wylu.test.loopback
vim wylu.test.loopback

添加如下内容:

1
2
3
4
5
6
7
8
9
$TTL 1D
@ IN SOA wylu.test. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS www.wylu.test.
235 PTR www.wylu.test.

设置文件权限

1
chown named:named wylu.test.localhost wylu.test.loopback

注意:请确保 wylu.test.localhost 和 wylu.test.loopback 文件的属主和属组为 named。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost named]# ls -alh
total 28K
drwxrwx--T. 5 root named 178 Mar 22 18:52 .
drwxr-xr-x. 22 root root 4.0K Mar 22 17:34 ..
drwxrwx---. 2 named named 23 Mar 22 17:45 data
drwxrwx---. 2 named named 60 Mar 22 18:52 dynamic
-rw-r-----. 1 root named 2.3K Nov 8 19:18 named.ca
-rw-r-----. 1 root named 152 Nov 8 19:18 named.empty
-rw-r-----. 1 root named 152 Nov 8 19:18 named.localhost
-rw-r-----. 1 root named 168 Nov 8 19:18 named.loopback
drwxrwx---. 2 named named 6 Nov 8 19:18 slaves
-rw-r--r--. 1 root root 429 Mar 22 18:51 wylu.test.localhost
-rw-r--r--. 1 root root 397 Mar 22 17:44 wylu.test.loopback

否则启动服务时会产生如下错误提示:

1
2
3
4
5
6
Mar 22 17:44:08 localhost.localdomain named[15726]: zone 170.128.10.in-addr.arpa/IN: loading from master file wylu.test.loopback failed: permission denied
Mar 22 17:44:08 localhost.localdomain named[15726]: zone 170.128.10.in-addr.arpa/IN: not loaded due to errors.
Mar 22 17:44:08 localhost.localdomain named[15726]: zone wylu.test/IN: loading from master file wylu.test.localhost failed: permission denied
Mar 22 17:44:08 localhost.localdomain named[15726]: zone wylu.test/IN: not loaded due to errors.
Mar 22 17:44:08 localhost.localdomain named[15726]: all zones loaded
Mar 22 17:44:08 localhost.localdomain named[15726]: running

检查配置文件是否配置正确

1
2
3
4
5
6
7
8
[root@localhost named]# named-checkconf -z /etc/named.conf
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone 0.in-addr.arpa/IN: loaded serial 0
zone wylu.test/IN: loaded serial 0
zone 170.128.10.in-addr.arpa/IN: loaded serial 0

如上输出表示配置文件没问题。

启动 DNS 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
# 关闭防火墙服务
systemctl stop firewalld
systemctl disable firewalld

# 临时禁用 SELinux
setenforce 0
# 永久禁用 SELinux
vim /etc/selinux/config
SELINUX=disabled

# 启动 DNS 服务
systemctl start named
systemctl enable named

查看 DNS 服务监听情况:

1
2
3
4
5
[root@localhost named]# netstat -anupl | grep 53
udp 0 0 172.17.0.1:53 0.0.0.0:* 2111795/named
udp 0 0 10.128.170.235:53 0.0.0.0:* 2111795/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 2111795/named
udp6 0 0 ::1:53 :::* 2111795/named

测试解析

正向解析

1
2
3
4
5
6
[root@localhost named]# nslookup email.wylu.test 10.128.170.235
Server: 10.128.170.235
Address: 10.128.170.235#53

Name: email.wylu.test
Address: 10.128.170.235

反向解析

1
2
[root@localhost named]# nslookup 10.128.170.235 10.128.170.235
235.170.128.10.in-addr.arpa name = www.wylu.test.

References

cp -a 选项作用

cp -a 是 cp 命令的一个选项,用于复制文件和目录,并保留所有的属性和权限。具体来说,-a 选项等价于以下三个选项的组合:

  • -p 选项:保留文件的权限、所有者和时间戳。
  • -R 选项:递归复制目录及其内容。
  • -d 选项:保留符号链接的属性。

使用 cp -a 命令可以在复制文件和目录时保留所有的属性和权限,包括文件的所有者、组、权限、时间戳等。这对于备份和迁移文件和目录非常有用。 例如,要将目录 /home/user1 复制到目录 /home/user2,可以使用以下命令:

1
cp -a /home/user1 /home/user2

这将递归地复制 /home/user1 目录及其所有内容到 /home/user2 目录,并保留所有的属性和权限。

禁用 SELinux

SELinux(Security-Enhanced Linux)是一个安全子系统,用于限制进程和用户的访问权限,以提高系统的安全性。但是,在某些情况下,SELinux 可能会导致一些问题,例如阻止某些进程或服务的正常运行。如果你需要关闭 SELinux,可以按照以下步骤操作:

检查 SELinux 的状态

1
sestatus

如果 SELinux 处于启用状态,将显示以下输出:

1
2
3
4
5
6
7
8
9
10
11
[root@localhost named]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

临时禁用 SELinux

1
setenforce 0

这将把 SELinux 的模式从强制模式(enforcing)切换到宽容模式(permissive),并在控制台上显示警告信息。在宽容模式下,SELinux 仍然会记录违规行为,但不会阻止它们。

永久禁用 SELinux

要永久禁用 SELinux,需要编辑 /etc/selinux/config 文件,并将 SELINUX 的值设置为 disabled。可以使用以下命令打开该文件:

1
vim /etc/selinux/config

找到以下行:

1
SELINUX=enforcing

将其改为:

1
SELINUX=disabled

保存并关闭文件。

重启系统

为了使 SELinux 的更改生效,需要重启系统:

1
reboot

在系统重新启动后,SELinux 将被永久禁用。