在 Red Hat Enterprise Linux 8 搭建 DNS 服务器
1 DNS 简介
- DNS 的全称是 Domain Name System, 域名系统. 它在网络中扮演着域名与 IP 地址之间相互映射的角色. 通常使用的端口是 53.
- DNS正向解释就是通过域名来查找对应的 IP 地址
- DNS反向解释就是通过 IP 地址来查找对应的域名
2 搭建环境
- Red Hat Enterprise Linux release 8.4 (Ootpa)
- bind-9.11.26-4.el8_4.x86_64
- DNS 服务器 RHEL8.4 , IP 100.100.100.30
- DNS 测试客户端 RHEL8.4, IP 100.100.100.20
- 要解释的域名是 samlee.com 对应的IP是 100.100.100.33
3 搭建步骤简介
- 1 安装
bind
RPM - 2 配置防火墙 (根据需要可选)
- 3 配置selinux 上下文 (根据需要可选)
- 4 修改
/etc/named.conf
配置文件 - 5 修改
named.rfc1912.zones
域配置文件 - 6 创建正向与方向解释的 zone 文件
named.samlee.zone.pos
,named.samlee.zone.rev
- 7 启动
named
服务并设定开机启动 - 8 测试验证
4 具体搭建步骤
4.1 安装 bind
RPM
1 | # yum install -y bind |
4.2 可选 配置防火墙,允许报文访问 DNS 端口 (如果开启防火墙则需要这一步)
1 | # firewall-cmd --permanent --add-service=dns |
4.3 可选 配置 SELinux 上下文 (如果开启了SELinux并且上下文错误,则需要这一步)
- 首先检查是否上下文是否正确,如果入例子输出则无需修改,否则就需要修改
1
2
3
4# ls -Zl /etc/named.conf
-rw-r-----. 1 root named system_u:object_r:named_conf_t:s0 1693 Nov 4 08:20 /etc/named.conf
# ls -Zl /etc/named.rfc1912.zones
-rw-r-----. 1 root named system_u:object_r:named_conf_t:s0 1138 Nov 3 20:37 /etc/named.rfc1912.zones - 修改上下文并使之生效
1
2
3
4# semanage fcontext -a -t named_conf_t /etc/named.conf
# semanage fcontext -a -t named_conf_t /etc/named.rfc1912.zones
# restorecon -RFvv /etc/named.conf
# restorecon -RFvv /etc/named.rfc1912.zones4.3 修改
/etc/named.conf
配置文件 - 修改文件
1
2
3
4
5
6
7
8
9
10options {
listen-on port 53 { any; }; # 添加 any,监听所有 IPv4 IP
listen-on-v6 port 53 { ::1; any; }; # 添加 any,监听所有 IPv6 IP
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; }; # 添加 any 允许查询 - 检查配置 (检查正确为无输出)
1
# named-checkconf /etc/named.conf
4.4 修改
named.rfc1912.zones
域配置文件 - 添加正向解释域信息
1
2
3
4
5zone "samlee.com" IN { # 名字为 samlee.com
type master;
file "named.samlee.zone.pos"; # 域的配置文件名
allow-update { none; };
}; - 添加反向解释域信息
1
2
3
4
5zone "33.100.100.100.in-addr.arpa" IN { # 我准备用 100.100.100.33, 所以反着写
type master;
file "named.samlee.zone.rev"; # 域的配置文件名
allow-update { none; };
};4.5 创建正向与方向解释的 zone 文件
named.samlee.zone.pos
,named.samlee.zone.rev
- 创建正向解释的 “named.samlee.zone.pos”
1
2
3
4
5
6
7
8
9$TTL 1D
@ IN SOA @ samlee.com. (
0 ; serial #更新序列号
1D ; refresh # 刷新时间
1H ; retry # 重试时间
1W ; expire # 过期时间
3H ) ; minimum # H 刷新间隔
NS @ # NS 是域名服务器记录
A 100.100.100.33 # A IPv4 地址资源记录 - 创建方向解释的 “named.samlee.zone.rev”
1
2
3
4
5
6
7
8
9
10
11$TTL 1D
@ IN SOA @ samlee.com. (
0 ; serial #更新序列号
1D ; refresh # 刷新时间
1H ; retry # 重试时间
1W ; expire # 过期时间
3H ) ; minimum # H 刷新间隔
NS @ # NS 是域名服务器记录
A 100.100.100.33 # A IPv4 地址资源记录
AAAA ::1 # AAAA 是 IPv6 地址资源记录
PTR samlee. # PTR 指针记录,只用在反向解释 - 检查 zone 文件配置
1
2
3
4
5
6
7# named-checkzone samlee /var/named/named.samlee.zone.pos
zone samlee/IN: loaded serial 0
OK
# named-checkzone samlee /var/named/named.samlee.zone.rev
zone samlee/IN: loaded serial 0
OK - 确保组属性为
named
否则无法解释- 检查组属性
1
2
3# ll /var/named/named.samlee.zone.*
-rw-r--r--. 1 root root 144 Nov 4 10:47 /var/named/named.samlee.zone.pos
-rw-r--r--. 1 root root 167 Nov 4 10:50 /var/named/named.samlee.zone.rev - 修改组属性
1
# chgrp named /var/named/named.samlee.zone.*
- 再次确认已经修改为
named
1
2
3# ll /var/named/named.samlee.zone.*
-rw-r--r--. 1 root named 144 Nov 4 10:47 /var/named/named.samlee.zone.pos
-rw-r--r--. 1 root named 167 Nov 4 10:50 /var/named/named.samlee.zone.rev5 启动
named
服务并设定开机启动1
# systemctl enable named --now
6 测试验证
6.1 本地端测试
- 检查组属性
- 正向解释验证 指定 DNS 服务器
1
2
3
4
5
6# nslookup samlee.com 100.100.100.30
Server: 100.100.100.30
Address: 100.100.100.30#53
Name: samlee.com
Address: 100.100.100.33 - 反向解释验证 指定 DNS 服务器
1
2# nslookup 100.100.100.33 100.100.100.30
33.100.100.100.in-addr.arpa name = samlee.6.2 客户端测试
- 将 DNS 服务器 IP 加入 客户端配置
1
2# cat /etc/resolv.conf
nameserver 100.100.100.30 - 正向测试
1
2
3
4
5
6# nslookup samlee.com
Server: 100.100.100.30
Address: 100.100.100.30#53
Name: samlee.com
Address: 100.100.100.33 - 反向测试
1
2nslookup 100.100.100.30
33.100.100.100.in-addr.arpa name = samlee.7 附录
7.1 我们也可以根据上述步骤所提炼 ansible playbook
- 运行paybook 的示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46# time ansible-playbook config_dns_server_rhel8.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: While constructing a mapping from /mnt/sdb/sam_ansible_playbook/config_dns_server_rhel8.yaml, line 31, column 5, found a
duplicate dict key (ansible.builtin.command). Using last defined value only.
PLAY [DNS server auto configuration playbook] **********************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************
ok: [127.0.0.1]
TASK [Step 1/8 Install require rpms] *******************************************************************************************************
ok: [127.0.0.1]
TASK [2/8 Update firewall to permit DNS client access] *************************************************************************************
fatal: [127.0.0.1]: FAILED! => {"changed": false, "msg": "firewall is not currently running, unable to perform immediate actions without a running firewall daemon"}
...ignoring
TASK [Step 3-1/8 Update selinux file context] **********************************************************************************************
ok: [127.0.0.1] => (item=\etc\named.conf)
ok: [127.0.0.1] => (item=\etc\named.rfc1912.zones)
TASK [Step 3-2/8 Apply new SELinux file context] *******************************************************************************************
changed: [127.0.0.1]
TASK [Step 4/8 Modify configuration file /etc/named.conf] **********************************************************************************
ok: [127.0.0.1]
TASK [Step 5/8 Modify configuration file named.rfc1912.zones] ******************************************************************************
ok: [127.0.0.1]
TASK [Step 6/8 Create postive resolve file named.samlee.zone.pos] **************************************************************************
changed: [127.0.0.1]
TASK [Step 7/8 Create reverse resolve file named.samlee.zone.rev] **************************************************************************
changed: [127.0.0.1]
TASK [Step 8/8 Enable and start named service] *********************************************************************************************
changed: [127.0.0.1]
PLAY RECAP *********************************************************************************************************************************
127.0.0.1 : ok=10 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
real 0m37.625s
user 0m37.243s
sys 0m4.827s