Linux搭建DNS服务
# DNS服务介绍
# 简介
DNS(Domain Name System)是一个用于将域名映射到IP地址的分布式数据库系统,它允许用户使用易记的域名而非复杂的IP,来访问互联网上的计算机和服务。
默认情况下,DNS服务的数据存储在本地磁盘的C:/Windows/System32/dns/
中。如果是AD域架构,则DNS数据存储在AD活动目录数据库中。
其他相关概念参考:WindowServer的DNS服务文章
在实际使用中,一个IP可以被多个域名解析,一个域名也可以解析多个IP。
# 一个域名对应多个IP的情况:
负载均衡:服务器给同一域名解析了多个IP,则它会根据轮询或智能算法配置,按顺序返回不同的IP地址。
CDN优化:CDN的智能解析策略可以根据用户的地理位置、网络运营商动态的返回最优IP。
# 配置本地解析
在Linux中我们可以修改/etc/hosts
文件来配置本地域名解析,系统会优先使用hosts文件内存在的域名解析,修改文件后会立即生效不需要重启。
在Windows中是C:\Windows\System32\drivers\etc\hosts文件。
# 常用区域类型配置格式
主区域:表示这个区域在该DNS服务器中有权威数据源,表示该DNS服务器持有并管理这个区域的完整、原始的DNS记录,并且对这个区域内的所有DNS查询提供权威回答。
# 定义一个名为localhost的区域
zone "localhost" IN {
type master;
# 区域数据文件路径,其中记录example.com区域的DNS记录
file "named.localhost";
# 不允许动态更新,表示任何试图通过网络改变该区域内的DNS记录的操作都会被服务器拒绝
allow-update { none; };
};
2
3
4
5
6
7
8
从区域:从区域是主区域的副本,从服务器定期通过区域传送从主服务器获取区域进行更新。
zone "example.com" IN {
type slave;
# 从区域文件,用于存储从主服务器同步的数据
file "slavedb.example.com";
# 主服务器的IP地址
masters { 192.0.2.1; };
};
2
3
4
5
6
7
正向区域:正向区域指的是普通的DNS区域,用于将域名解析为IP地址。正向区域的配置与主区域配置相同,因为正向区域实际上是将域名解析为IP地址的主区域。
zone "example.com" IN {
type master;
file "/etc/bind/zones/db.example.com";
allow-update { none; };
};
2
3
4
5
反向区域:反向区域用于执行IP地址到域名的反向查找,即根据IP地址找到对应的域名。这种区域通常使用in-addr.arpa或ip6.arpa后缀。
zone "2.0.192.in-addr.arpa" IN {
type master;
# 反向区域文件路径
file "/etc/bind/zones/db.192.0.2";
allow-update { none; };
};
2
3
4
5
6
# 正向区域数据配置格式
; 设置该区域的默认生存时间(此处为24小时),影响DNS缓存的持续时间
$TTL 86400
; 标识了这个区域的权威信息,包括主DNS服务器、负责人的电子邮件
; 邮件地址的@需要替换为".",并且最后需要带上"."表示根域结束
@ IN SOA ns1.example.com. admin.example.com. (
2024040901 ; 自定义序列号,用于版本控制,每次更新区域文件时需要增加,可以使用YYYYMMDDnn格式或者简单自增加一也行
3600 ; 刷新时间 (1小时)
900 ; 重试时间 (15分钟)
604800 ; 过期时间 (1周)
86400 ; 最小TTL (24小时)
)
; 之后编写区域的记录定义即可,有多条记录则指定多条
; 定义DNS名称服务器的域名,单个DNS服务器编写一行即可,多个则编写多行进行指定
IN NS ns1.example.com.
IN NS ns2.example.com.
; A记录,定义DNS名称服务器映射的IP地址
ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
; A记录,定义域名映射的IP地址
@ IN A 192.0.2.5
www IN A 192.0.2.5
; MX记录,定义邮件交换服务器
@ IN MX 10 mail.example.com.
; CNAME记录,用于定义别名
ftp IN CNAME www.example.com.
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
$TTL
:设置这个区域的默认生存时间(Time To Live),影响DNS缓存的持续时间。SOA
记录(Start of Authority):标识了这个区域的权威信息,包括主DNS服务器、负责人的电子邮件(admin.example.com.
,注意邮件地址中的@
被替换为了.
,并且最后也有一个.
表示根域结束),序列号(用于版本控制,每次更新区域文件时需要增加),以及几个时间参数(刷新时间、重试时间、过期时间和最小TTL)。NS
记录:指定了域名的名称服务器。A
记录:将主机名映射到其对应的IPv4地址。MX
记录:定义了用于电子邮件的交换服务器及其优先级。CNAME
记录:为主机名设置别名。
# DNS服务部署
# 1.安装DNS服务
# 安装BIND DNS服务
yum -y install bind bind-chroot
2
# 2.DNS配置
# 编辑主配置文件
vim /etc/named.conf
需要修改的一般只有listen-on、allow-query、forward、forwarders参数,其他的按需修改即可。
options {
# 监听IPv4的网卡和端口,需改为any或指定网卡IP,多个用";"号隔开
listen-on port 53 { 10.86.1.2; };
# 监听IPv6的网卡和端口
# listen-on-v6 port 53 { ::1; };
# 允许查询的客户端列表,需改为any或指定IP或指定网段,多个用";"号隔开
allow-query { any; };
# 转发模式:only表示只进行转发查询不进行递归解析;first表示如果转发查询失败,则尝试进行本地递归解析
forward first;
forwarders {
223.5.5.5;
223.6.6.6;
};
# 指定DNS服务的工作目录
directory "/var/named";
# 指定转储缓存的文件位置
dump-file "/var/named/data/cache_dump.db";
# 指定DNS服务统计信息的文件位置
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";
# 是否允许递归查询
recursion yes;
# 是否开启DNSSEC验证,安全性要求不高可以关闭
dnssec-validation yes;
# 管理密钥的目录
managed-keys-directory "/var/named/dynamic";
# GeoIP数据目录
geoip-directory "/usr/share/GeoIP";
# 指定PID文件的位置
pid-file "/run/named/named.pid";
# 会话关键文件的位置
session-keyfile "/run/named/session.key";
# 包含加密策略配置,用于确保BIND使用的加密方式符合系统定义安全策略
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
# 默认的日志频道
channel default_debug {
# 日志文件位置
file "data/named.run";
# 日志级别
severity dynamic;
};
};
# 根提示区域配置
zone "." IN {
# 区域类型为hint,指向根DNS服务器的地址列表
type hint;
# 根DNS服务器的地址列表文件
file "named.ca";
};
# 包含的区定义配置文件
include "/etc/named.rfc1912.zones";
# 包含用于DNSSEC的根密钥
include "/etc/named.root.key";
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 编辑区域配置文件
# 添加主区域文件配置
cat>>/etc/named.rfc1912.zones<<EOF
zone "node.local" IN {
type master;
file "/etc/named/forward/node.local";
allow-update { none; };
};
EOF
# 创建正向区域数据文件目录
mkdir -p /etc/named/forward/
# 创建区域数据文件
cat>/etc/named/forward/node.local<<EOF
\$TTL 86400
@ IN SOA dns-01.node.local. admin.node.local. (
2024040901
3600
900
604800
86400
)
IN NS dns-01.node.local.
dns-01 IN A 10.86.1.2
agent-server-01 IN A 10.86.1.1
datastore-01 IN A 10.86.1.3
EOF
# 修改文件权限
chown named.named -R /etc/named
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
每次修改完配置需要重启BIND DNS服务。
# 3.启动DNS服务
# 启动DNS服务
systemctl enable --now named
# 检查DNS服务端口
netstat -antlupe | grep named
# 防火墙放行
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
2
3
4
5
6
7
8
9