首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux DNS服务器之BIND安装配置(详细版)

Linux DNS服务器之BIND安装配置(详细版)

作者头像
用户5921339
发布2025-07-12 18:00:28
发布2025-07-12 18:00:28
76300
代码可运行
举报
运行总次数:0
代码可运行

DNS服务器在互联网生态系统中发挥着关键作用,而Linux系统是承载高负荷DNS部署的首选平台;不同类型的DNS服务器担负着不同职责。bind 是Linux 系统中用于实现域名解析的服务软件,全称为 Berkeley Internet Name Domain。

一、DNS工作流程

DNS工作流程:

  1. 客户端向本地DNS服务器发送请求查询www.example.com的主机地址
  2. 本地 DNS 服务器检查缓存 → 无记录,然后联系根服务器b.root-servers.net
  3. 根服务器返回.com TLD(Top Level Domain) 服务器地址d.gtld-servers.net
  4. 本地 DNS 服务器向 .com TLD 服务器询问:"example.com 的权威服务器是谁?"
  5. .com TLD 服务器返回example.com的NS记录
  6. 本地 DNS 服务器向example.com 权威 DNS 服务器请求www主机的A记录
  7. 本地 DNS 服务器从example.com 权威 DNS 服务器获取到www.example.comA记录
  8. 本地 DNS 服务器将结果返回给客户端→A记录(12.34.56.78),同时写入缓存方便下次查询。

二、DNS主要类型

在DNS服务器中,BIND支持多种区域类型(zone type),其中最常见的四种是:hintforwardmaster 和 slave。它们各自有不同的用途和特点

  • hint:用于初始化DNS服务器的根区域(root zone)。它提供了根域名服务器的初始列表
  • master/primary:区域权威主服务器,存储区域数据的原始副本
  • slave/secondary:区域权威从服务器,从主服务器同步区域数据
  • forword:将特定域名的所有查询请求转发到其他DNS服务器(通常是上游DNS服务器)

BIND所支持的所有类型如下图所示:

图片
图片

三、安装配置

3.1、安装命令

  • CentOS/RedHat
代码语言:javascript
代码运行次数:0
运行
复制
yum install bind bind-utils -y
  • Debian/Ubuntu
代码语言:javascript
代码运行次数:0
运行
复制
apt install bind9 bind9utils -y

3.2、DNS服务配置

3.2.1、主配置文件: /etc/named.conf
代码语言:javascript
代码运行次数:0
运行
复制
options {
        listen-on port 53 { 10.10.10.22; };
        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";
        allow-query     { any; }; 
        masterfile-format text ;
        forward first; 
        forwarders {   
        8.8.8.8;   
        223.5.5.5;
    };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";

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

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

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
3.2.2、区域声明文件:/etc/named.rfc1912.zones
代码语言:javascript
代码运行次数:0
运行
复制
// 正向区域声明
zone "example.com" IN {
        type master; 
        file "named.example.com";
        allow-update {none};
};

// 反向区域声明(10.10.10.0/24 网段)
zone "10.10.10.in-addr.arpa" IN {
        type master;
        file "named.example.arpa";
        allow-update {none};
};
3.2.3、正向解析配置文件示例:
代码语言:javascript
代码运行次数:0
运行
复制
$TTL 1D
$ORIGIN example.com.
@       IN SOA  dns1.example.com. admin.example.com. (
                                        2025070501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.example.com.
@       A       10.10.10.22
dns1    A       10.10.10.22
www     A       10.10.10.25
ftp     CNAME   www
3.2.4、反向解析配置文件示例:
代码语言:javascript
代码运行次数:0
运行
复制
$TTL 1D
@       IN SOA  dns1.example.com admin.example.com. (
                                        2025070701      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.example.com.
22      PTR     dns1.example.com.
25      PTR     www.example.com.
25      PTR     ftp.example.com.
3.2.5、参数说明
  • $TTL(Time to Live):DNS缓存生存时间。
  • $ORIGIN:指定了未带终止点(无点结尾)的域名解析基准,所有未明确指定完整域名(FQDN)的记录都会附加该基准点
  • SOA(Start of Authority):起始授权机构,包含区域管理信息(序列号、刷新时间等)。
  • serial:系列号,随着区域每次更新而递增
  • refresh:刷新频率(1D表示1天刷新一次),指 slave 多久会主动检查 serial 的值,以便更新 zone file。
  • retry:重连时间间隔,指 slave 若是连接 master 失败,多久之后会再次尝试,1H表示1个小时后重连。
  • expire:指 slave 若是一直连接 master 失败,多久之后会放弃,1W表示1星期后放弃连接master
  • minimum:清除缓存最小时间间隔。

资源记录类型

记录类型

含义

NS

指定域名的权威 DNS 服务器

A

IPv4 地址记录(域名 → IP)

AAAA

IPv6 地址记录(域名 → IP)

CNAME

别名记录

MX

邮件交换记录(优先级 + 邮件服务器)

PTR

反向解析记录(IP → 域名)

TXT

对域名进行标识和说明,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等

四、相关命令

  • 启动dns服务
代码语言:javascript
代码运行次数:0
运行
复制
systemctl start named
  • 检查主配置文件(named.conf)语法
代码语言:javascript
代码运行次数:0
运行
复制
named-checkconf
  • 检查正、反向解析配置文件
代码语言:javascript
代码运行次数:0
运行
复制
named-checkzone example.com /var/named/named.example.com
named-checkzone 10.10.10.in-addr.arpa /var/named/named.example.arpa
  • 重新加载配置文件(不重启服务)
代码语言:javascript
代码运行次数:0
运行
复制
rndc reload
  • 强制刷新缓存
代码语言:javascript
代码运行次数:0
运行
复制
rndc flush
  • 客户端使用nc工具扫描dns服务器端口
代码语言:javascript
代码运行次数:0
运行
复制
nc -uvz -4 10.10.10.22 53
  • 客户端使用socat工具测试
代码语言:javascript
代码运行次数:0
运行
复制
echo "test" | socat -v - udp4-connect:10.10.10.22:53

五、结果验证

正向解析:

图片
图片

反向解析:

图片
图片

可在DNS服务器上抓包:

代码语言:javascript
代码运行次数:0
运行
复制
tcpdump -i ens32 -nn 'udp port 53'

抓包结果如图所示:

图片
图片

· · · · · END · · · ·

参考资料

[1] 

BIND 9 Administrator Reference Manual: https://bind9.readthedocs.io/en/latest/

[2] 

BIND 9 Configuration Reference: https://ftp.isc.org/isc/bind/9.9.4/doc/arm/Bv9ARM.ch06.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、DNS工作流程
  • 二、DNS主要类型
  • 三、安装配置
    • 3.1、安装命令
    • 3.2、DNS服务配置
      • 3.2.1、主配置文件: /etc/named.conf
      • 3.2.2、区域声明文件:/etc/named.rfc1912.zones
      • 3.2.3、正向解析配置文件示例:
      • 3.2.4、反向解析配置文件示例:
      • 3.2.5、参数说明
  • 四、相关命令
  • 五、结果验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档