在Linux系统中架设DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器实现之一,以下将详细介绍在Linux环境下架设DNS服务器的完整步骤,包括环境准备、安装配置、区域文件管理、安全设置及测试验证等内容。

环境准备与安装
首先需要一台运行Linux发行版的计算机,推荐使用Ubuntu、CentOS等主流系统,确保服务器具有静态IP地址,例如设置IP为192.168.1.100,子网掩码255.255.255.0,网关192.168.1.1,以Ubuntu为例,更新系统软件包列表后安装BIND9:
sudo apt update sudo apt install bind9 bind9utils bind9-doc
安装完成后,BIND服务会自动启动,可通过systemctl status bind9检查服务状态。
主配置文件修改
BIND的主配置文件位于/etc/bind/named.conf.options,主要配置全局选项如监听地址、转发器等,编辑该文件,添加以下内容:
options {
directory "/var/cache/bind";
recursion yes;
allow-query { any; }; # 允许所有查询,生产环境应限制为特定网段
forwarders { 8.8.8.8; 114.114.114.114; }; # 指定上游DNS服务器
dnssec-validation auto;
listen-on { 127.0.0.1; 192.168.1.100; }; # 监听本地和服务器IP
};
保存后执行sudo named-checkconf检查配置语法是否正确。

正向与反向区域配置
区域文件用于定义域名与IP的映射关系,首先在/etc/bind/named.conf.local中声明区域:
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};
创建正向区域文件/etc/bind/db.example.com如下:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025101501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS ns1.example.com.
IN A 192.168.1.100
ns1 IN A 192.168.1.100
www IN A 192.168.1.101
创建反向区域文件/etc/bind/db.192.168.1如下:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025101501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum
IN NS ns1.example.com.
100 IN PTR ns1.example.com.
101 IN PTR www.example.com.
注意每条记录的末尾需以分号结尾,序列号(Serial)修改后需递增。
权限与启动服务
确保区域文件所有者为bind用户,权限设置为644:
sudo chown bind:bind /etc/bind/db.* sudo chmod 644 /etc/bind/db.*
重启BIND服务加载新配置:
sudo systemctl restart bind9 sudo systemctl enable bind9
安全加固措施
为提高安全性,建议采取以下措施:
- 限制查询范围:在
named.conf.options中将allow-query设置为特定网段,如{ 192.168.1.0/24; } - 启用DNSSEC:在区域配置中添加
dnssec-policy default;并生成密钥对 - 防止区域传输:添加
allow-transfer { none; };或仅允许指定服务器 - 使用TSIG认证:在区域间传输时配置共享密钥
- 日志监控:在
named.conf.options中配置日志输出到指定文件
测试与验证
使用dig或nslookup工具测试DNS解析功能:
dig @192.168.1.100 www.example.com dig -x 192.168.1.101
若返回正确的A记录和PTR记录,说明配置成功,也可通过systemctl status bind9查看服务日志,排查错误。
常见问题与解决方案
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 无法解析域名 | 防火墙阻止53端口 | 检查ufw/iptables规则,允许DNS流量 |
| 区域传输失败 | 权限或配置错误 | 检查allow-transfer设置及区域文件权限 |
| 提示"REFUSED"错误 | recursion未启用或查询被拒绝 | 检查options中的recursion和allow-query配置 |
相关问答FAQs
Q1: 如何为子域名(如test.example.com)添加DNS记录?
A1: 在正向区域文件db.example.com中添加记录,例如test IN A 192.168.1.102,然后递增序列号并重启BIND服务即可,确保记录格式正确,末尾分号不能遗漏。
Q2: 修改DNS配置后如何确保生效?
A2: 首先使用named-checkconf和named-checkzone检查配置语法,例如named-checkzone example.com /etc/bind/db.example.com,确认无误后重启BIND服务,或使用rndc reload动态重载配置,无需中断服务。
