DNS服务器搭建与配置实战:BIND9正向解析与反向解析配置

DNS解析原理与BIND9安装

DNS(Domain Name System)是互联网基础设施的核心服务,负责域名到IP地址的解析。在企业内网中,自建DNS服务器可提供内部域名解析、DNS缓存加速和DNS劫持防护。BIND9(Berkeley Internet Name Domain)是使用最广泛的开源DNS服务软件,支持权威解析、递归查询、DNSSEC签名等完整功能。

安装BIND9以Ubuntu/Debian为例:

# 安装BIND9及相关工具
apt update && apt install -y bind9 bind9utils bind9-doc dnsutils

# 验证安装
named -v
# BIND 9.18.x

# 启动并设置开机自启
systemctl enable --now bind9
systemctl status bind9

BIND9配置文件位于/etc/bind/目录。named.conf是主配置文件,通过include指令引入其他配置。生产环境建议将自定义区域配置与默认配置分离,便于管理和备份。

BIND9主配置与全局选项

编辑named.conf.options配置全局参数,包括监听地址、允许查询范围和转发器设置:

// /etc/bind/named.conf.options
options {
    directory "/var/cache/bind";
    
    // 监听IPv4和IPv6的53端口
    listen-on { any; };
    listen-on-v6 { any; };
    
    // 允许查询的客户端网段
    allow-query { any; };
    allow-recursion { 
        127.0.0.0/8;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
    };
    
    // 配置上游DNS转发器
    forwarders {
        8.8.8.8;
        114.114.114.114;
    };
    forward first;
    
    // DNSSEC验证
    dnssec-validation auto;
    
    // 限制递归查询深度
    max-recursion-depth 10;
    
    // 查询性能调优
    max-cache-size 256M;
    max-ncache-ttl 10800;
    cleaning-interval 60;
};

allow-recursion限定可发起递归查询的客户端范围,防止开放递归被利用做DNS放大攻击。forwarders配置上游DNS,本地无法解析的查询转发到上游,forward first表示优先转发,失败后自行迭代。

正向解析区域配置

正向解析将域名映射到IP地址。创建区域配置文件定义域名记录:

// /etc/bind/named.conf.local
zone "yunthe.com" {
    type master;
    file "/etc/bind/zones/db.yunthe.com";
    allow-transfer { 10.0.1.100; };  // 允许从服务器区域传送
    allow-update { none; };
};

// /etc/bind/zones/db.yunthe.com
$TTL    86400
@       IN  SOA     ns1.yunthe.com. admin.yunthe.com. (
                2026091001  ; 序列号(日期+版本)
                3600        ; 刷新间隔(从服务器检查更新)
                900         ; 重试间隔
                604800      ; 过期时间
                86400       ; 否定缓存TTL
                )

; NS记录 - 指定域名服务器
@       IN  NS      ns1.yunthe.com.
@       IN  NS      ns2.yunthe.com.

; A记录 - 域名到IPv4
@       IN  A       203.0.113.10
www     IN  A       203.0.113.10
api     IN  A       203.0.113.20
ns1     IN  A       10.0.1.1
ns2     IN  A       10.0.1.2

; CNAME记录 - 别名指向
blog    IN  CNAME   www.yunthe.com.
docs    IN  CNAME   api.yunthe.com.

; MX记录 - 邮件服务器
@       IN  MX  10  mail.yunthe.com.
mail    IN  A       203.0.113.30

; TXT记录 - SPF和验证
@       IN  TXT     "v=spf1 mx a ~all"
_dmarc  IN  TXT     "v=DMARC1; p=quarantine; rua=mailto:admin@yunthe.com"

SOA记录定义区域起始授权信息,序列号格式为YYYYMMDDNN,每次修改递增。TTL值控制DNS缓存时间,高频变更的记录可设较短TTL。CNAME记录不能与A记录共存于同一名称。

反向解析区域配置

反向解析将IP地址映射到域名,用于邮件服务器身份验证和日志可读性。反向区域名称遵循in-addr.arpa格式:

// /etc/bind/named.conf.local 添加反向区域
zone "113.0.203.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.113.0.203";
    allow-transfer { 10.0.1.100; };
};

// /etc/bind/zones/db.113.0.203
$TTL    86400
@       IN  SOA     ns1.yunthe.com. admin.yunthe.com. (
                2026091001
                3600
                900
                604800
                86400
                )

@       IN  NS      ns1.yunthe.com.
@       IN  NS      ns2.yunthe.com.

; PTR记录 - IP到域名反向映射
10      IN  PTR     yunthe.com.
10      IN  PTR     www.yunthe.com.
20      IN  PTR     api.yunthe.com.
30      IN  PTR     mail.yunthe.com.

PTR记录的名称是IP地址的最后一段,BIND根据区域名称自动补全前缀。203.0.113.10对应的完整PTR名称为10.113.0.203.in-addr.arpa。

主从DNS服务器同步配置

生产环境至少部署主从两台DNS服务器,保证高可用。从服务器通过区域传送(Zone Transfer)从主服务器同步数据:

// 从服务器配置 /etc/bind/named.conf.local
zone "yunthe.com" {
    type slave;
    file "/var/cache/bind/db.yunthe.com";
    masters { 10.0.1.1; };  // 主服务器IP
    allow-notify { 10.0.1.1; };
};

zone "113.0.203.in-addr.arpa" {
    type slave;
    file "/var/cache/bind/db.113.0.203";
    masters { 10.0.1.1; };
    allow-notify { 10.0.1.1; };
};

主服务器配置allow-transfer允许从服务器IP区域传送。allow-notify允许主服务器发送DNS NOTIFY消息触发增量同步。从服务器收到NOTIFY后检查SOA序列号,若有更新则发起AXFR(全量传送)或IXFR(增量传送)。

DNS安全加固与性能调优

DNS安全加固要点包括限制递归范围、关闭版本信息泄露、配置速率限制和启用DNSSEC。响应速率限制(RRL)防止DNS放大攻击:

// named.conf.options 安全配置
options {
    // 隐藏BIND版本号
    version "not disclosed";
    
    // 响应速率限制
    rate-limit {
        responses-per-second 10;
        errors-per-second 5;
        slip 2;
    };
    
    // 禁止区域传送(仅允许从服务器)
    allow-transfer { 10.0.1.100; };
    
    // 限制并发查询数
    tcp-clients 100;
    recursive-clients 1000;
    
    // 查询日志(按需开启)
    querylog yes;
};

DNSSEC为DNS响应添加数字签名,防止DNS欺骗和缓存投毒。生成签名密钥并配置区域签名:

# 生成区域签名密钥(ZSK和KSK)
dnssec-keygen -a ECDSAP256SHA256 -b 256 -n ZONE yunthe.com
dnssec-keygen -a ECDSAP256SHA256 -b 256 -f KSK -n ZONE yunthe.com

# 对区域文件签名
dnssec-signzone -o yunthe.com -k KSK文件 db.yunthe.com ZSK文件

# 配置BIND加载签名后的区域文件
zone "yunthe.com" {
    type master;
    file "/etc/bind/zones/db.yunthe.com.signed";  // 使用签名后的文件
    inline-signing yes;
    auto-dnssec maintain;
};

性能调优方面,增大max-cache-size提升缓存命中率,调整cleaning-interval控制缓存清理频率。高频查询环境可部署dnsmasq作为前端缓存层,减少BIND递归查询压力。监控方面使用Prometheus配合bind_exporter采集DNS查询QPS、响应延迟和缓存命中率指标。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/dns-fu-wu-qi-da-jian-yu-pei-zhi-shi-zhan-bind9-zheng-xiang/

(0)
小编小编
上一篇 4小时前
下一篇 4小时前

相关推荐