安装BIND,编辑配置文件,定义正向/反向解析记录,重启服务
简易DNS服务器搭建指南
DNS基础概念
什么是DNS?
DNS(Domain Name System)是互联网的核心服务之一,负责将人类可读的域名(如www.example.com)转换为计算机可识别的IP地址(如192.168.1.1),它通过分布式数据库实现全球域名解析。
DNS工作原理
组件 | 功能 |
---|---|
客户端 | 发起域名解析请求 |
递归 resolver | 逐级查询并返回结果 |
权威服务器 | 存储特定域名的权威记录 |
缓存服务器 | 临时存储解析结果加速查询 |
常见DNS记录类型
记录类型 | 用途 | 示例 |
---|---|---|
A | 域名→IPv4地址 | example.com → 192.168.1.1 |
AAAA | 域名→IPv6地址 | example.com → 2001:db8::1 |
CNAME | 别名指向 | www.example.com → example.com |
MX | 邮件交换 | 指定邮件服务器优先级 |
NS | 命名服务器 | 指定域名权威服务器 |
TXT | 文本记录 | 存储任意字符串信息 |
搭建前准备
系统要求
- 推荐Linux系统(CentOS/Ubuntu/Debian)
- 最低配置:1核CPU/512MB内存/1GB存储空间
- 固定公网IP(非必须但推荐)
软件选择
软件名称 | 特点 | 适用场景 |
---|---|---|
BIND | 开源标准DNS软件 | 生产环境首选 |
dnsmasq | 轻量级DNS+DHCP | 小型网络/开发测试 |
Unbound | 高性能验证型DNS | 安全敏感环境 |
网络拓扑建议
[客户端] > [DNS服务器] > [上游DNS]
| |
局域网设备 公网解析
使用BIND搭建DNS服务器
安装BIND
Ubuntu/Debian系
sudo apt update sudo apt install bind9 bind9utils bind9doc y
CentOS/RHEL系
sudo yum install bind bindutils y
配置文件结构
/etc/bind/ # 主配置文件目录
├── named.conf # 主配置文件
├── db.* # 区域文件(ZONE文件)
└── keys/ # TSIG密钥目录
配置正向解析区
编辑/etc/bind/named.conf.local
:
zone "example.com" { type master; file "/etc/bind/db.example.com"; allowupdate { none; }; };
创建区域文件/etc/bind/db.example.com
:
$TTL 86400 ; 默认生存时间(秒) @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; 序列号 3600 ; 刷新间隔 1800 ; 重试间隔 1209600 ; 过期时间 86400 ) ; 最小TTL IN NS ns1.example.com. IN NS ns2.example.com. ns1 IN A 192.168.1.1 ns2 IN A 192.168.1.2 www IN A 192.168.1.100
配置反向解析区
编辑/etc/bind/named.conf.local
追加:
zone "1.168.192.inaddr.arpa" { type master; file "/etc/bind/db.192.168.1"; allowupdate { none; }; };
创建反向区域文件/etc/bind/db.192.168.1
:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; 序列号 3600 ; 刷新间隔 1800 ; 重试间隔 1209600 ; 过期时间 86400 ) ; 最小TTL IN NS ns1.example.com. IN NS ns2.example.com. 1 IN PTR ns1.example.com. 100 IN PTR www.example.com.
启动与测试
# 检查配置文件语法 sudo namedcheckconf /etc/bind/named.conf sudo namedcheckzone example.com /etc/bind/db.example.com # 启动服务 sudo systemctl restart bind9 # 测试解析 dig @localhost example.com nslookup www.example.com 127.0.0.1
高级配置选项
缓存设置
在named.conf
中配置:
options { forwarders { 8.8.8.8; # Google公共DNS 8.8.4.4; # Google备用DNS }; querycachesize 10000; # 缓存条目数 };
访问控制
zone "example.com" { type master; file "/etc/bind/db.example.com"; allowquery { 192.168.1.0/24; }; # 仅允许内网查询 };
TSIG签名认证
生成密钥:
sudo tsigkeygen a hmacmd5 b example.com c secret.key
配置named.conf
:
keys { "examplekey" { algorithm hmacmd5; secret "yourgeneratedsecretkey"; }; };
常见问题排查
无法解析的排查步骤
检查项 | 操作命令 | 预期结果 |
---|---|---|
服务状态 | systemctl status bind9 | active (running) |
配置文件 | namedcheckconf | 无语法错误 |
日志查看 | journalctl u bind9 | 无报错信息 |
防火墙规则 | sudo ufw status | 53端口开放 |
递归查询 | dig +trace example.com | 显示完整解析路径 |
性能优化建议
- 启用查询缓存(默认开启)
- 调整
maxcachesize
参数(默认1M) - 使用
allowqueryonzone
限制查询范围 - 部署分离视图(splithorizon)实现内外网分离
安全加固措施
最小化安装原则
移除不必要的功能模块:
sudo apt remove bind9doc bind9host y
限制递归查询
编辑named.conf.options
:
options { recursion yes; # 允许递归查询(内部网络) allowrecursion { 192.168.1.0/24; }; # 仅内网可递归 };
签名验证配置
zone "example.com" { type master; file "/etc/bind/db.example.com"; inlinesigning yes; # 启用DNSSEC签名 autodnssec maintain; # 自动维护NSEC记录 };
Q&A问答专栏
Q1:为什么配置了反向解析区但PTR查询仍然失败?
A:常见原因包括:
- 反向区域文件命名不符合规范(应为
db.<网络>
,如db.192.168.1
) - PTR记录未正确对应IP地址(需注意IP段与区域声明匹配)
- SOA记录中的NS记录与正向区域不一致
- BIND未加载反向区域配置(检查
named.conf.local
是否生效)
Q2:如何为新子域名添加A记录?
操作步骤:
- 编辑主区域文件
/etc/bind/db.example.com
,添加:subdomain IN A 192.168.1.200
- 更新SOA记录中的序列号(如从2023100101改为2023100102)
- 重新加载配置:
sudo systemctl reload bind9
- 验证新增记录:
dig subdomain.example.com @localhost
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/205113.html