ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

    • Linux基础

    • Linux服务

      • Rsync文件传输
      • Sersync实时同步
      • NFS文件服务
      • SSH远程连接
      • Keepalived高可用
      • Supervospr进程管理
      • APT包管理工具
      • Samba文件共享
      • JumpServer堡垒机
      • Linux搭建DNS服务
        • DNS服务介绍
          • 简介
          • 配置本地解析
          • 常用区域类型配置格式
          • 正向区域数据配置格式
        • DNS服务部署
        • DNS抓包分析
      • Tmux终端管理
      • Iptables
      • Firewalld防火墙管理
      • OpenVPN代理
      • 本地yum仓库搭建
    • Windows Server笔记

    • Shell笔记

    • Ansible笔记

  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 操作系统
  • Linux服务
Hoshinozora
2024-04-09
目录

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; };
};
1
2
3
4
5
6
7
8

从区域:从区域是主区域的副本,从服务器定期通过区域传送从主服务器获取区域进行更新。

zone "example.com" IN {
    type slave;
    # 从区域文件,用于存储从主服务器同步的数据
    file "slavedb.example.com";
    # 主服务器的IP地址
    masters { 192.0.2.1; };
};
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; };
};
1
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; };
};
1
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.
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
  • $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
1
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";
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
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
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

每次修改完配置需要重启BIND DNS服务。

# 3.启动DNS服务

# 启动DNS服务
systemctl enable --now named

# 检查DNS服务端口
netstat -antlupe | grep named

# 防火墙放行
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
1
2
3
4
5
6
7
8
9

# DNS抓包分析

# DNS请求包分析

#Linux#DNS
JumpServer堡垒机
Tmux终端管理

← JumpServer堡垒机 Tmux终端管理→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式