当前位置: 首页 > news >正文

CentOS 7上BIND9配置DNS服务器指南

详细说明如何在 CentOS 7 上配置 BIND9 扮演这四种不同的 DNS 角色,包括配置文件示例和注意事项。

BIND9 可以扮演 DNS 体系中的多种角色:
权威DNS服务器 (Authoritative DNS Server): 存储特定域名(例如 example.com)的官方DNS记录。当其他DNS服务器或客户端查询这个域名的信息时,权威服务器会给出最终的、官方的答案。
递归DNS服务器 (Recursive DNS Server / Resolver): 代表客户端(如你的电脑)向其他DNS服务器发起查询,直到找到最终答案,然后将结果返回给客户端并缓存起来以备后续使用。ISP 通常会提供递归DNS服务器。
缓存DNS服务器 (Caching DNS Server): 递归服务器通常也扮演缓存服务器的角色,它会缓存查询过的记录,以加快后续相同查询的响应速度并减少网络流量。
转发DNS服务器 (Forwarding DNS Server): 将所有收到的查询请求转发给指定的其他DNS服务器处理,自身不进行递归查询。


通用前提和注意事项 (适用于所有角色):

  1. 安装 BIND:
    sudo yum install -y bind bind-utils
    
  2. 主配置文件: /etc/named.conf
  3. 区域定义文件 (通常): /etc/named.rfc1912.zones (被 /etc/named.conf 包含)
  4. 区域数据文件目录: /var/named/
  5. 服务管理:
    sudo systemctl start named
    sudo systemctl enable named
    sudo systemctl status named
    sudo systemctl restart named
    sudo systemctl reload named
    
  6. 配置文件检查:
    sudo named-checkconf /etc/named.conf
    sudo named-checkzone <zone_name> /var/named/<zone_file>
    
  7. 防火墙: 确保 UDP 和 TCP 端口 53 对相应的客户端开放。
    sudo firewall-cmd --permanent --add-service=dns
    sudo firewall-cmd --reload
    
  8. SELinux: 如果遇到权限问题,检查 SELinux 日志 (sudo ausearch -m avc -ts recent)。可能需要调整布尔值或文件上下文。
  9. 日志: 关注 /var/log/messages 或通过 journalctl -u named -f 查看 named 的日志输出。
  10. rndc: 确保 rndc (远程名称守护进程控制) 配置正确,以便管理 named 服务而无需完全重启。通常 CentOS 7 默认配置是可用的。

角色 1: 权威DNS服务器 (Authoritative DNS Server)

目的: 存储特定域名(例如 example.com)的官方DNS记录,并对这些记录的查询提供权威答案。它不为其他域名提供递归查询。

配置文件 (/etc/named.conf - options 部分):

options {listen-on port 53 { 127.0.0.1; <your_server_ip>; }; // 监听本地和服务器的IPlisten-on-v6 port 53 { ::1; };                     // 可选,如果不需要IPv6设为 nonedirectory       "/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; };       // 权威服务器通常允许任何人查询其权威数据// 如果是内部权威服务器,可以限制为内部网络recursion no;                   // **关键:权威服务器不应提供递归查询**allow-recursion { none; };      // 明确禁止递归// 可选:限制区域传送给从服务器// allow-transfer { <ip_of_slave1>; <ip_of_slave2>; };dnssec-enable yes;              // 推荐开启DNSSECdnssec-validation yes;          // 如果也做验证的话 (通常权威服务器不直接验证)// 对于纯权威服务器,dnssec-validation 可以是 no,// 但如果它也需要解析其他域(例如,查找NS记录的胶水记录),则可能需要。// 更安全的做法是让递归解析器处理验证。/* 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";include "/etc/crypto-policies/back-ends/bind.config";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};// 包含区域定义文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key"; // 即使是权威服务器,也可能需要根提示来解析NS记录的A记录(胶水)

区域定义 (/etc/named.rfc1912.zones):

zone "example.com" IN {type master;file "db.example.com"; // 区域文件名,位于 /var/named/allow-update { none; }; // 通常禁止动态更新,除非有特定需求// also-notify { <ip_of_slave1>; }; // 如果有从服务器,通知它们更新
};// 示例反向区域 (如果需要)
zone "1.168.192.in-addr.arpa" IN { // 对应 192.168.1.0/24type master;file "db.192.168.1";allow-update { none; };
};

区域文件 (/var/named/db.example.com):

$TTL 86400
@       IN      SOA     ns1.example.com. admin.example.com. (2023072101      ; Serial3600            ; Refresh1800            ; Retry604800          ; Expire86400 )         ; Minimum TTLIN      NS      ns1.example.com.IN      NS      ns2.example.com. ; 如果有第二个NSns1     IN      A       <ip_of_ns1>
ns2     IN      A       <ip_of_ns2>
@       IN      A       <ip_of_example.com_website>
www     IN      A       <ip_of_www.example.com_website>
mail    IN      MX      10 mailserver.example.com.
mailserver IN   A       <ip_of_mailserver>

(反向区域文件 db.192.168.1 类似,包含 PTR 记录)

注意事项:

  • recursion no; 是最重要的设置,防止服务器被滥用于DDoS放大攻击。
  • allow-query { any; }; 允许互联网上的任何人查询你权威的区域数据。如果这是内部权威服务器,应限制为内部网络。
  • allow-transfer 应严格限制为你的从服务器IP地址。
  • SOA 记录中的序列号在每次修改区域文件后必须增加
  • 确保你的域名注册商处将你的NS记录指向此服务器的IP。

角色 2: 递归DNS服务器 (Recursive DNS Server / Resolver)

目的: 代表客户端(如你的电脑或内部网络中的其他服务器)向其他DNS服务器发起查询,直到找到最终答案,然后将结果返回给客户端并缓存。

配置文件 (/etc/named.conf - options 部分):

options {listen-on port 53 { 127.0.0.1; <your_lan_ip>; }; // 监听本地和局域网接口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     { localhost; <your_lan_network>/<prefix>; }; // **关键:限制谁可以查询**// 例如: 192.168.1.0/24;recursion yes;                  // **关键:启用递归**allow-recursion { localhost; <your_lan_network>/<prefix>; }; // **关键:限制谁可以使用递归服务**// 可选:配置转发器 (如果不想直接查询根服务器)// forwarders {//      8.8.8.8;    // Google Public DNS//      1.1.1.1;    // Cloudflare DNS// };// forward only; // 如果设置了 forwarders,是只转发还是先转发再自己递归dnssec-enable yes;              // 启用DNSSEC支持dnssec-validation auto;         // **关键:自动进行DNSSEC验证 (BIND 9.11+ 推荐)**// 或 dnssec-validation yes;/* Path to ISC DLV key */bindkeys-file "/etc/named.iscdlv.key";managed-keys-directory "/var/named/dynamic"; // 用于存储DNSSEC信任锚pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";include "/etc/crypto-policies/back-ends/bind.config";
};logging {channel default_debug {file "data/named.run";severity dynamic;};// 可以添加更详细的日志,例如查询日志 (用于调试,会产生大量日志)// channel query_log {//     file "data/query.log" versions 3 size 5m;//     print-time yes;//     severity info;// };// category queries { query_log; };
};// 递归服务器需要根提示文件来知道从哪里开始解析
zone "." IN {type hint;file "named.ca"; // 这是根服务器列表文件,通常随BIND一起提供
};// 通常递归服务器不定义其他 master 或 slave 区域,除非它也扮演权威角色
// include "/etc/named.rfc1912.zones"; // 如果也做权威,则包含
include "/etc/named.root.key";

根提示文件 (/var/named/named.ca):
这个文件通常在安装 bind 包时会自动创建或链接。如果需要手动获取或更新,可以从 IANA (Internet Assigned Numbers Authority) 或 ISC (Internet Systems Consortium) 下载。

# 通常不需要手动操作,但如果需要:
# wget -O /var/named/named.ca https://www.internic.net/domain/named.root
# sudo chown named:named /var/named/named.ca

注意事项:

  • allow-queryallow-recursion 必须严格限制为你的内部网络或受信任的客户端。开放的递归解析器是DDoS放大攻击的主要目标。
  • recursion yes; 是必须的。
  • dnssec-validation auto; (或 yes) 非常重要,以确保解析结果的安全性。
  • 确保 named.ca 文件存在且正确。
  • 递归服务器通常不需要定义自己的 masterslave 区域,除非它也扮演权威角色(例如,为内部域名提供权威服务,同时为内部客户端提供外部递归)。

在这里插入图片描述


角色 3: 缓存DNS服务器 (Caching DNS Server)

目的: 基本上与递归DNS服务器相同。它接收客户端查询,进行递归查找,并将结果缓存起来以加速后续相同查询。“缓存DNS服务器” 通常就是指 “递归DNS服务器”。

配置: 与递归DNS服务器的配置完全相同。

递归的过程自然包含了缓存。当递归服务器为客户端解析一个域名时,它会缓存解析路径上的所有相关记录(A, NS, CNAME 等),以及最终的答案。下次有相同查询时,如果缓存未过期,它会直接从缓存中提供答案。

注意事项: 同递归DNS服务器。


角色 4: 转发DNS服务器 (Forwarding DNS Server)

目的: 将所有收到的DNS查询请求转发给一个或多个指定的上游DNS服务器处理,自身不进行完整的递归查询。它仍然会缓存从上游服务器获取的结果。

配置文件 (/etc/named.conf - options 部分):

options {listen-on port 53 { 127.0.0.1; <your_lan_ip>; };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     { localhost; <your_lan_network>/<prefix>; }; // 限制谁可以查询recursion yes;                  // **需要启用递归,以便能够转发**allow-recursion { localhost; <your_lan_network>/<prefix>; }; // 限制谁可以使用此转发服务forwarders {                    // **关键:指定上游DNS服务器**<ip_of_upstream_dns1>;      // 例如 8.8.8.8;<ip_of_upstream_dns2>;      // 例如 1.1.1.1;};forward only;                   // **关键:设置为 'only' 表示只转发,不自行递归**// 如果设置为 'first',则先尝试转发,失败后再自行递归 (需要根提示)dnssec-enable yes;dnssec-validation auto;         // 如果上游服务器支持并返回DNSSEC数据,此服务器可以验证// 如果上游服务器自己做验证,这里可以设为 no,但 auto 更安全/* 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";include "/etc/crypto-policies/back-ends/bind.config";
};logging {channel default_debug {file "data/named.run";severity dynamic;};
};// 如果 forward only,则不需要根提示文件。
// 如果 forward first,则需要根提示文件。
// zone "." IN {
//     type hint;
//     file "named.ca";
// };// 通常转发服务器不定义其他 master 或 slave 区域
// include "/etc/named.rfc1912.zones";
include "/etc/named.root.key"; // 即使是 forward only,也建议保留,以备将来更改

注意事项:

  • forwarders { ... }; 列表指定了将查询转发到的DNS服务器。
  • forward only; 确保服务器只进行转发。如果希望在转发失败时尝试自己递归,则使用 forward first; (此时需要 named.ca 文件)。
  • allow-queryallow-recursion 仍然需要严格限制。
  • 即使是转发服务器,它也会缓存从上游服务器获取的响应。
  • 选择可靠且快速的上游DNS服务器很重要。

混合角色:

BIND9 服务器可以同时扮演多种角色。例如:

  • 权威服务器 + 递归/缓存服务器:
    • 为自己的域名 (example.com) 提供权威应答。
    • 为内部网络客户端提供对外部域名的递归查询和缓存。
    • 配置:
      • options 部分设置 recursion yes;allow-recursion { <internal_network>; };
      • 定义自己的 master 区域 (如 example.com)。
      • 包含根提示 zone "." IN { type hint; file "named.ca"; };

总结关键点:

  • 权威服务器: recursion no;, 定义 master 区域。
  • 递归/缓存服务器: recursion yes;, allow-recursion 严格限制, 需要 named.ca
  • 转发服务器: recursion yes;, forwarders { ... };, forward only; (或 first), allow-recursion 严格限制。

在配置任何角色时,安全性(特别是限制查询和递归来源)和正确的区域文件(对于权威服务器)是首要考虑的。务必在更改配置后使用 named-checkconfnamed-checkzone 进行检查,并仔细查看日志。

相关文章:

  • SpringSecurity基础入门
  • 使用Mathematica绘制一类矩阵的特征值图像
  • 使用F5-tts复刻音色
  • CVE-2017-4971源码分析与漏洞复现
  • Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析
  • idea如何让文件夹分层显示,而不是圆点分割
  • 【牛客-输入输出练习】
  • 安全工具配置
  • STM32外设应用详解——从基础到高级应用的全面指南
  • 基于NLP技术的客户投诉与需求文本分类方法研究
  • 大语言模型的评估指标
  • 差动讯号(2):奇模与偶模
  • RedissonClient主要功能概述
  • 公路水运安全员C证用途及重要性
  • MySQL:to many connections连接数过多
  • 【数据结构 -- AVL树】用golang实现AVL树
  • 商标撤三要求越来越高,一些注意!
  • 73.矩阵置零
  • 云原生架构下的企业 DevOps 治理实践:挑战、策略与落地路径
  • Git Hooks 和 自动生成 Commit Message
  • 甘肃白银煤矿透水事故最新进展:3名被困矿工已无生命体征
  • 重庆一男大学生掉进化粪池死亡,重庆对外经贸学院:以学校通报为准
  • 张核子“限高”次日即被解除,前员工的执行款3个月后仍未到账
  • 花旗回应减员传闻:持续评估人力资源战略,将为受影响的个人提供支持
  • 上海迪士尼蜘蛛侠主题园区正式动工,毗邻“疯狂动物城”
  • 九江银行落地首单畜牧业转型金融业务,助推传统农业绿色智能