温馨提示×

CentOS从零开始配置DNS服务器的指南

小樊
34
2025-12-31 11:07:47
栏目: 云计算

CentOS 从零搭建 BIND DNS 服务器指南

一 环境准备与安装

  • 准备一台固定 IP 的 CentOS 主机,建议为 CentOS 7/8。本文以示例域 example.com 与服务器 IP 192.168.180.188 演示,请按你的实际环境替换。
  • 安装 BIND 与工具:
    • 仅权威解析(推荐入门):yum install -y bind bind-utils
    • 需要 chroot 运行:yum install -y bind bind-chroot bind-utils
  • 启动与开机自启:
    • 常规:systemctl start named && systemctl enable named
    • chroot:systemctl start named-chroot && systemctl enable named-chroot
  • 防火墙放行 UDP/TCP 53
    • firewalld:firewall-cmd --add-service=dns --permanent && firewall-cmd --reload
    • 或:firewall-cmd --add-port=53/udp --permanent && firewall-cmd --add-port=53/tcp --permanent && firewall-cmd --reload
  • 说明:BIND 主进程名为 named,默认监听 53 端口;chroot 模式下配置文件与区域文件路径位于 /var/named/chroot/ 下。

二 主配置文件与区域声明

  • 编辑主配置 /etc/named.conf(建议先备份):
    • 关键项:
      • listen-on port 53 { any; };(监听所有 IPv4)
      • listen-on-v6 port 53 { ::1; };(按需开启 IPv6)
      • directory "/var/named";(区域文件目录)
      • allow-query { any; };(允许查询来源,生产环境请改为内网网段)
      • recursion yes;(作为缓存/转发器时开启;纯权威可关闭)
  • /etc/named.rfc1912.zones 末尾添加区域(示例域 example.com,网段 192.168.180.0/24):
    • 正向区域:
      zone "example.com" IN {
          type master;
          file "example.com.zone";
          allow-update { none; };
      };
      
    • 反向区域(注意网段反写):
      zone "180.168.192.in-addr.arpa" IN {
          type master;
          file "example.com.arpa";
          allow-update { none; };
      };
      
  • 语法检查:named-checkconf /etc/named.conf,无输出即正常。

三 区域文件与常见记录

  • 进入区域目录并复制模板:
    • cd /var/named
    • cp -p named.empty example.com.zone
    • cp -p named.empty example.com.arpa
  • 正向区域文件 example.com.zone(示例):
    $TTL 86400
    @   IN  SOA ns.example.com. admin.example.com. (
                2024100801  ; Serial(每次修改递增)
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400      ; Negative Cache TTL
                )
        IN  NS  ns.example.com.
        IN  MX  10 mail.example.com.
    
    ns      IN  A   192.168.180.188
    www     IN  A   192.168.180.189
    mail    IN  A   192.168.180.190
    ftp     IN  CNAME www.example.com.
    
  • 反向区域文件 example.com.arpa(示例):
    $TTL 86400
    @   IN  SOA ns.example.com. admin.example.com. (
                2024100801
                3600
                1800
                604800
                86400
                )
        IN  NS  ns.example.com.
    
    188 IN  PTR ns.example.com.
    189 IN  PTR www.example.com.
    190 IN  PTR mail.example.com.
    
  • 权限与属主(chroot 路径为 /var/named/chroot/ 时,请先 cd 到对应目录再改):
    • chown root:named example.com.zone example.com.arpa
    • chmod 644 example.com.zone example.com.arpa
  • 区域语法检查:
    • named-checkzone example.com /var/named/example.com.zone
    • named-checkzone 180.168.192.in-addr.arpa /var/named/example.com.arpa
  • 要点:
    • 所有 FQDN 必须以 点号“.” 结尾(如 ns.example.com.),否则会被自动补全当前域导致错误。
    • NS 记录后的主机名必须存在对应的 A/AAAA 记录。
    • MX 记录优先级数字越小优先级越高。

四 本机与客户端测试

  • 本机解析器指向本机 DNS:
    • 临时:echo "nameserver 127.0.0.1" > /etc/resolv.conf
    • 持久化(避免被 DHCP 覆盖):
      • NetworkManager:echo -e "[main]\ndns=none" >> /etc/NetworkManager/NetworkManager.conf && systemctl restart NetworkManager
      • 或写入网卡配置:echo "DNS1=192.168.180.188" >> /etc/sysconfig/network-scripts/ifcfg-ens33 && systemctl restart NetworkManager
  • 重启服务:
    • 常规:systemctl restart named
    • chroot:systemctl restart named-chroot
  • 解析测试:
    • 正向:dig @localhost www.example.com +short(应返回 192.168.180.189
    • 反向:dig @localhost -x 192.168.180.188 +short(应返回 ns.example.com.
    • 工具:nslookup www.example.comnslookup 192.168.180.188
  • 客户端测试:将客户端 /etc/resolv.confnameserver 指向 192.168.180.188 后执行上述 dig/nslookup。

五 进阶与安全建议

  • 主从复制(Slave):
    • 主:在 named.rfc1912.zones 为主域添加 allow-transfer { <从服务器IP>; };
    • 从:定义同区域 type slave; file "slaves/example.com.zone"; masters { <主服务器IP>; };,启动后自动从主同步。
  • 转发器模式(非权威、仅做解析转发):
    • options 中配置 forwarders { 223.5.5.5; 8.8.8.8; }; recursion yes; 并关闭或限制 allow-query 为内网。
  • 安全与权限:
    • 限制查询来源:allow-query { 192.168.180.0/24; };
    • 限制区域传输:allow-transfer { <从IP>; };
    • 启用 DNSSECdnssec-enable yes; dnssec-validation yes;(按需)。
  • chroot 与路径:使用 bind-chroot 时,主配置与区域文件位于 /var/named/chroot/,注意 named-checkconf/named-checkzonechown/chmod 的路径一致性。
  • 常见排错:
    • 服务起不来:systemctl status named -ljournalctl -xe 查看详细错误。
    • 配置语法:named-checkconfnamed-checkzone
    • 权限/属主:区域文件需 root:named 且权限 644
    • 防火墙/SELinux:放行 53 端口,必要时 setsebool -P named_write_master_zones on(视环境而定)。

0