CentOS7 配DNS需改/etc/resolv.conf,添nameserver项,存后重启网络/
CentOS 7 DNS 配置详解
背景介绍
域名系统(Domain Name System, DNS) 是互联网的核心基础设施之一,负责将人类可读的域名(如 www.example.com)转换为计算机使用的 IP 地址,在 CentOS 7 中,最常用的 DNS 服务软件是 BIND(Berkeley Internet Name Daemon),本文将全面讲解其安装、配置及优化方法。
环境准备与基础安装
✅ 前提条件
组件 | 作用 | 备注 |
---|---|---|
bind |
DNS 服务核心程序 | 需通过 YUM 安装 |
bindutils |
提供 dig , nslookup 等工具 |
用于调试和查询 |
静态 IP | 确保服务器拥有固定公网/内网IP | 动态 IP 会导致解析异常 |
主机名规范 | FQDN 应符合 RFC 标准 | 例:ns.yourdomain.com |
🔧 安装步骤
# 安装 BIND 及其工具集 sudo yum install bind bindutils y # 启动服务并设为开机自启 sudo systemctl start named sudo systemctl enable named
注意:若提示防火墙拦截,需执行
sudo firewallcmd addservice=dns permanent
并重载防火墙。
主配置文件解析 (/etc/named.conf
)
📌 全局配置段
指令 | 示例值 | 说明 |
---|---|---|
options { ... } |
listenon port 53; |
监听端口声明 |
directory "/var/named"; |
工作目录路径 | |
allowquery { any; }; |
允许所有客户端查询(生产环境建议限制特定网段) | |
logging { ... } |
channel default_log {...} |
日志输出配置,推荐写入独立文件 |
📜 区域定义示例(正向解析)
zone "example.com" IN { type master; file "example.com.zone"; allowupdate { none; }; // 禁止动态更新 };
📝 区域文件模板 (/var/named/example.com.zone
)
$TTL 86400 @ IN SOA ns.example.com. admin.example.com. ( 2023101001 ; Serial Number 3600 ; Refresh 1800 ; Retry 1209600 ; Expiry 86400 ) ; Negative Cache TTL ; Name Server Records @ IN NS ns.example.com. @ IN A 192.168.1.100 www IN A 192.168.1.100
关键字段说明:
$TTL
: 默认生存时间(秒)SOA
: 起始授权记录,包含序列号和刷新策略NS
: 指定权威 DNS 服务器A
: 主机名到 IPv4 地址映射
反向解析配置
🔄 反向区域文件示例 (/var/named/1.168.192.inaddr.arpa.zone
)
$TTL 86400 @ IN SOA ns.example.com. admin.example.com. ( 2023101001 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expiry 86400 ) ; Negative Cache TTL @ IN NS ns.example.com. 100 IN PTR ns.example.com.
注意事项:
- 反向区域命名规则为
X.Y.Z.inaddr.arpa
,X.Y.Z 是子网掩码反序PTR
记录实现 IP → 域名的逆向映射
主从 DNS 架构搭建
⚙️ 主服务器操作
- 生成加密密钥:
rndcconfgen k masterkey c keyfile.pem f KMKEY
- 修改主服务器配置:
# named.conf 新增 include "/etc/rndc.keys"; zone "example.com" { type master; file "example.com.zone"; allowtransfer { 192.168.1.200; }; # 从服务器 IP };
🔄 从服务器配置
- 复制主服务器的区域文件:
scp user@master:/var/named/example.com.zone ./slaves/
- 修改从服务器配置:
zone "example.com" { type slave; masters { 192.168.1.100; }; file "slave/example.com.zone"; };
客户端配置与测试
💻 Linux 客户端设置
编辑 /etc/resolv.conf
:
nameserver 192.168.1.100 # DNS 服务器 IP search example.com # 搜索域
🔍 常用测试命令
命令 | 功能 | 示例 |
---|---|---|
dig |
详细查询 DNS 记录 | dig @192.168.1.100 example.com |
nslookup |
交互式查询 | nslookup type=mx example.com |
host |
简单域名查询 | host www.example.com |
systemctl |
管理服务状态 | systemctl status named |
常见问题与解答
❓ 问题 1:DNS 服务启动失败怎么办?
解答:
- 检查配置文件语法错误:
namedcheckconf /etc/named.conf
- 查看日志文件:
tail f /var/log/messages
或journalctl u named
- 常见错误原因:
- 区域文件中缺少结尾分号
- SOA 记录格式不正确
- 权限不足(运行
sudo
)
❓ 问题 2:为何外网无法解析内部域名?
解答:
- 检查防火墙是否开放 UDP/TCP 53 端口
- 确认
allowquery
未限制外部 IP 段 - 检查路由器 NAT 规则是否转发 DNS 请求
- 验证注册商处的 NS 记录是否指向你的公网 IP
进阶优化建议
优化项 | 实施方法 | 预期效果 |
---|---|---|
缓存加速 | 增大 maxcachesize 值 |
提升重复查询响应速度 |
负载均衡 | 配置多个 NS 记录轮询 | 分散请求压力 |
安全防护 | 启用 DNSSEC 数字签名 | 防止伪造应答 |
性能监控 | 结合 Prometheus + Grafana | 实时可视化查询量统计 |
通过以上配置,您已掌握 CentOS 7 下 DNS 服务的完整部署流程,实际运维中需根据业务需求调整安全策略和性能参数,建议定期备份区域文件并