Day 8-1:DNS 原理与内网 DNS 部署(Bind)

Day 8-1:DNS 原理与内网 DNS 部署(Bind) 为什么我们在浏览器输入 magedu.com 就能访问,而不是输入对应的 IP? 目标 说明 理解 DNS 解析原理 掌握递归/迭代查询、完整解析链、常用记录类型 使用 DNS 诊断工具 熟练使用 dig、nslookup、host 排查

Day 8-1:DNS 原理与内网 DNS 部署(Bind)

为什么我们在浏览器输入 magedu.com 就能访问,而不是输入对应的 IP?

DNS 把域名转换为 IP 地址

目标 说明
理解 DNS 解析原理 掌握递归/迭代查询、完整解析链、常用记录类型
使用 DNS 诊断工具 熟练使用 dig、nslookup、host 排查 DNS 问题
部署内网 DNS 服务器 安装配置 Bind,管理正向/反向解析区域

一、DNS——域名系统

1.1 什么是 DNS?

DNS(Domain Name System,域名系统)。把人类好记的域名(magedu.com)翻译成机器能识别的 IP 地址(43.226.56.46)。

输入域名、本地缓存、DNS 递归查询、获取公网 IP、建立 TCP 连接、访问服务器

1.2 完整查询链

分布式数据库(缓存 + 权威)。

DNS Resolver 向根服务器、.com 顶级域服务器、域名权威服务器逐级查询后,向客户端返回 IP

1.3 递归查询 vs 迭代查询

查询类型 谁发起 谁负责
递归查询 客户端 → 递归 DNS 递归 DNS 帮你查到底
迭代查询 递归 DNS → 各级 DNS 每层告诉你下一层找谁

1.4 DNS 记录类型速查

记录类型 含义 示例
A IPv4 地址 magedu.com → 43.226.56.46
AAAA IPv6 地址 magedu.com → 2001:db8::1
CNAME 别名 www.magedu.com → magedu.com
MX 邮件交换 magedu.com → mail.magedu.com
TXT 文本验证 域名所有权验证、SPF 记录
NS 域名服务器 指定该域名的权威 DNS 是谁
PTR 反向解析 192.168.100.10 → magedu.com
SOA 授权起始 区域的权威信息(主 DNS、管理员邮箱、序列号等)

1.5 hosts 文件

hosts 文件是本地静态 DNS 解析表,优先级高于任何 DNS 服务器。

Windows hosts、DNS Client 缓存与网卡配置的 DNS 服务器

# Linux /etc/hosts(谁用谁就要设置,例如集群中的所有主机)
[root@magedu ~]# vim /etc/hosts
10.10.10.10  master-01.magedu.com
10.10.10.20  master-02.magedu.com
10.10.10.30  master-03.magedu.com
10.10.10.40  node-01.magedu.com
10.10.10.50  node-02.magedu.com
10.10.10.60  node-03.magedu.com

# Windows C:\Windows\System32\drivers\etc\hosts

# Windows DNS 缓存
ipconfig /displaydns
ipconfig /flushdns

1.6 常用 DNS 查询工具

1.6.1 dig:最详细的 DNS 查询工具

# 基本查询
[root@magedu ~]# dig magedu.com A
[root@magedu ~]# dig magedu.com +short

# 指定 DNS 服务器查询
[root@magedu ~]# dig @8.8.8.8 magedu.com +short

# 查询特定记录类型
[root@magedu ~]# dig magedu.com MX +short
[root@magedu ~]# dig magedu.com NS +short

1.6.2 nslookup:简单查询

# 基本查询
[root@yangge ~]# nslookup magedu.com

# 指定 DNS 服务器查询
[root@yangge ~]# nslookup magedu.com 114.114.114.114
[root@yangge ~]# nslookup magedu.com 8.8.8.8

[root@yangge ~]# nslookup magedu.com 139.224.142.121
Server:  139.224.142.121
Address: 139.224.142.121#53

Name:    magedu.com
Address: 43.226.56.46

1.6.3 host:简洁输出

# 查询 www 子域名的 A 记录(IPv4 地址)
[root@yangge ~]# host www.magedu.com
www.magedu.com has address 43.226.56.46

# 查询主域名的 A 记录(IPv4 地址)
[root@yangge ~]# host -t A magedu.com
magedu.com has address 43.226.56.46

# 查询 MX 邮件交换记录(邮件服务器)
[root@yangge ~]# host -t MX magedu.com
magedu.com mail is handled by 10 mxbiz2.qq.com.
magedu.com mail is handled by 5 mxbiz1.qq.com.

# 查询 NS 权威域名服务器记录
[root@yangge ~]# host -t NS magedu.com
magedu.com name server dns10.hichina.com.
magedu.com name server dns9.hichina.com.

# 查询 SOA 授权起始记录(区域权威信息)
[root@yangge ~]# host -t SOA magedu.com
magedu.com has SOA record dns9.hichina.com. hostmaster.hichina.com. 2026011209 3600 1200 86400 600

# 指定 DNS 服务器查询
[root@yangge ~]# host magedu.com 114.114.114.114

二、案例实战:部署内网 DNS 服务器

2.1 为什么企业需要自建 DNS?

场景 说明
服务发现 内网服务器之间用域名通信,而不是硬编码 IP
服务迁移 服务迁移时只需要改 DNS 记录,不需要改所有配置文件
微服务架构 微服务之间通过域名互相调用,实现解耦
内网 HTTPS 结合私有 CA,实现内网 HTTPS 加密通信
集中管理 所有内网域名解析统一管理,避免分散配置

2.2 安装与主配置文件

主环境:Rocky Linux 10。

# Rocky Linux 10:安装 Bind
[root@magedu ~]# dnf install -y bind bind-utils

# 主配置文件 /etc/named.conf
[root@magedu ~]# vim /etc/named.conf
options {
    listen-on port 53 { any; };    # 修改为在所有接口监听
    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";
    secroots-file "/var/named/data/named.secroots";
    recursing-file "/var/named/data/named.recursing";
    allow-query { any; };          # 修改为允许所有主机查询

    recursion yes;

    forwarders {                   # 转发(可选)
        114.114.114.114;            # 国内 DNS(主用)
        8.8.8.8;                   # 谷歌 DNS(备用)
    };
    forward first;                 # 先查 forwarders,再查根服务器

    dnssec-validation yes;
    managed-keys-directory "/var/named/dynamic";
    geoip-directory "/usr/share/GeoIP";

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

    /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
    include "/etc/crypto-policies/back-ends/bind.config";
};

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

# 根域配置(Root Hint)——指向全球 13 组根服务器,用于递归查询
zone "." IN {
    type hint;
    file "named.ca";
};

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

配置参数说明:

参数 含义
listen-on 监听哪些 IP 地址的 53 端口
allow-query 允许哪些客户端查询(any 表示所有)
allow-transfer 允许哪些服务器进行区域传输(安全设置)
forwarders 上游 DNS 服务器(用于解析外部域名)
forward first 先查 forwarders,查不到再查根服务器
recursion yes 允许递归查询

2.3 配置正向解析

2.3.1 正向解析区域声明——magedu.com

[root@magedu ~]# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {             # 声明区域 magedu.com
    type master;                  # 类型为 master
    file "magedu.com.zone";        # 区域文件 magedu.com.zone
    allow-update { none; };       # 禁止更新(可选)
};

2.3.2 正向解析区域文件——magedu.com.zone

[root@magedu ~]# vim /var/named/magedu.com.zone
; 文件名: /var/named/magedu.com.zone
; 域名: magedu.com 正向解析区域文件

$TTL 86400
@ IN SOA ns1.magedu.com. admin.magedu.com. (
    2026072801    ; serial(版本号)
    3600          ; refresh(从 DNS 服务器刷新间隔)
    1800          ; retry(重试间隔)
    604800        ; expire(过期时间)
    86400         ; minimum TTL
)

@     IN NS ns1.magedu.com.  ; DNS 服务器
ns1   IN A  192.168.100.10  ; DNS 服务器
ruoyi IN A  192.168.100.10  ; 若依系统
mysql IN A  192.168.100.20  ; MySQL 数据库
redis IN A  192.168.100.30  ; Redis 缓存
nacos IN A  192.168.100.40  ; Nacos 注册中心

2.3.3 正向解析区域声明——yangge.org

[root@magedu ~]# vim /etc/named.rfc1912.zones
zone "yangge.org" IN {             # 声明区域 yangge.org
    type master;                  # 类型 master
    file "yangge.org.zone";        # 区域文件 yangge.org.zone
    allow-update { none; };       # 禁止更新(可选)
};

2.3.4 正向解析区域文件——yangge.org.zone

[root@magedu ~]# vim /var/named/yangge.org.zone
; 文件名: /var/named/yangge.org.zone
; 域名: yangge.org 正向解析区域文件

$TTL 86400
@ IN SOA ns1.yangge.org. admin.yangge.org. (
    2026072801    ; serial(YYYYMMDDNN,每次修改 +1)
    3600          ; refresh(从 DNS 刷新间隔)
    1800          ; retry(重试间隔)
    604800        ; expire(过期时间)
    86400         ; minimum TTL
)

@     IN NS ns1.yangge.org. ; DNS 服务器

www   IN A 192.168.20.10
ns1   IN A 192.168.20.20    ; DNS 服务器
ruoyi IN A 192.168.20.30    ; 若依系统
mysql IN A 192.168.20.40    ; MySQL 数据库

2.5 配置验证与启动

# 检查配置语法
[root@magedu ~]# named-checkconf /etc/named.conf

# 检查区域文件语法
[root@magedu ~]# named-checkzone magedu.com /var/named/magedu.com.zone
zone magedu.com/IN: loaded serial 2026062201
OK

# 启动服务
[root@magedu ~]# systemctl enable --now named

# 验证 53 端口监听
[root@yangge ~]# netstat -tunlp | grep :53
tcp   0 0 10.0.0.142:53 0.0.0.0:* LISTEN 2227/named
tcp   0 0 127.0.0.1:53  0.0.0.0:* LISTEN 2227/named
tcp6  0 0 ::1:53        :::*      LISTEN 2227/named
udp   0 0 10.0.0.142:53 0.0.0.0:*        2227/named
udp   0 0 10.0.0.142:53 0.0.0.0:*        2227/named
udp   0 0 127.0.0.1:53  0.0.0.0:*        2227/named
udp   0 0 127.0.0.1:53  0.0.0.0:*        2227/named
udp6  0 0 ::1:53        :::*             2227/named
udp6  0 0 ::1:53        :::*             2227/named

# 测试解析
[root@magedu ~]# dig @127.0.0.1 mysql.magedu.com A
; <<>> DiG 9.18.33 <<>> @127.0.0.1 magedu.com
;; ANSWER SECTION:
mysql.magedu.com. 86400 IN A 192.168.100.20
[root@yangge ~]# dig @127.0.0.1 mysql.magedu.com +short
192.168.100.20

2.6 客户端配置

Windows:网卡图形化添加。

Linux:

[root@tianyun ~]# nmcli conn mod ens160 ipv4.dns "DNS_Server_IP"

验证客户端解析:

# 测试正向解析
[root@tianyun ~]# dig @10.0.0.142 jd.com +short
111.13.149.108
211.144.27.126
106.39.171.134

# 也可以临时使用指定 DNS 测试
[root@tianyun ~]# dig @10.0.0.142 www.magedu.com +short
192.168.100.50
[root@tianyun ~]# dig @10.0.0.142 www.yangge.org +short
192.168.20.10

2.7 Bind 管理命令

# rndc:远程名称守护进程控制工具
[root@magedu ~]# rndc status               # 查看状态
[root@magedu ~]# rndc reload               # 重新加载配置(修改区域文件后)

# 以下命令为扩展命令
[root@magedu ~]# rndc reload magedu.com    # 重新加载特定区域
[root@magedu ~]# rndc flush                # 清空 DNS 缓存
[root@magedu ~]# rndc flushname magedu.com  # 清空特定域名缓存
[root@magedu ~]# rndc querylog             # 开启/关闭查询日志

修改区域文件后执行:

# 1. 修改区域文件
[root@magedu ~]# vim /var/named/magedu.com.zone

# 2. 检查语法
[root@magedu ~]# named-checkzone magedu.com /var/named/magedu.com.zone

# 3. 重新加载配置(不重启服务)
[root@magedu ~]# rndc reload

2.8 防火墙配置

# Rocky Linux 10:放行 DNS 端口
[root@magedu ~]# firewall-cmd --add-service=dns --permanent
[root@magedu ~]# firewall-cmd --reload
[root@yangge ~]# firewall-cmd --list-all
public (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client dns ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# 或指定端口
[root@magedu ~]# firewall-cmd --add-port=53/tcp --permanent
[root@magedu ~]# firewall-cmd --add-port=53/udp --permanent
[root@magedu ~]# firewall-cmd --reload

三、本章小结

3.1 核心知识点速记

DNS 解析流程:

hosts → 本地缓存 → 递归 DNS → 根域名服务器 → 顶级域名服务器 → 权威域名服务器。

递归 vs 迭代:

  • 递归:DNS 帮你查到底(你打 114,接线员帮你查)。
  • 迭代:DNS 告诉你下一层找谁(接线员告诉你号码,你自己打)。

记录类型:

A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件)、TXT(验证)。

3.2 常用命令速查

操作 Rocky Linux 10 Ubuntu 26.04
安装 Bind dnf install -y bind bind-utils apt install -y bind9 bind9-utils
主配置文件 /etc/named.conf /etc/bind/named.conf
区域文件目录 /var/named/ /var/lib/bind/
检查配置 named-checkconf /etc/named.conf named-checkconf /etc/bind/named.conf
检查区域文件 named-checkzone 域名 区域文件 named-checkzone 域名 区域文件
启动服务 systemctl enable --now named systemctl enable --now named
重新加载 rndc reload rndc reload
测试解析 dig @127.0.0.1 magedu.com dig @127.0.0.1 magedu.com
防火墙放行 firewall-cmd --add-service=dns ufw allow 53

评论