Ubuntu Linux 如何部署DNS服务器
- 2025-10-28 21:33:00
- 丁国栋
- 原创 24
在 Ubuntu Linux 上部署 DNS 服务器并配置域名解析可以通过 BIND9(Berkeley Internet Name Domain)实现。
一、安装 BIND9
sudo apt update
sudo apt install bind9 bind9utils bind9-dnsutils -y
二、配置 BIND9 主配置文件
-
编辑主配置文件
/etc/bind/named.conf.options:sudo vim /etc/bind/named.conf.options添加以下内容(根据需求调整):
options { directory "/var/cache/bind"; recursion yes; // 允许递归查询(适用于本地客户端) allow-query { any; }; // 允许所有客户端查询(或限制为特定IP,如 192.168.1.0/24) forwarders { 119.29.29.29; 223.6.6.6; }; // 转发未知查询到公共DNS dnssec-validation auto; listen-on { any; }; // 监听所有接口 }; -
检查语法错误:
sudo named-checkconf
三、添加自定义域名(正向和反向解析)
1. 创建正向解析文件
假设域名为 example.com,编辑新文件:
sudo vim /etc/bind/db.example.com
内容示例:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025102801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
@ IN A 192.168.1.100 ; 域名指向的IP
ns1 IN A 192.168.1.100 ; DNS服务器记录
www IN A 192.168.1.101 ; 子域名解析
* IN A 192.168.1.102 ; 通配符解析
注:默认最小 TTL:1 秒。TTL 过小:客户端频繁查询,增加服务器负载。TTL 过大:变更生效延迟(需等待缓存过期)。
根据场景选择合理的 TTL:
| 场景 | 推荐 TTL | 说明 |
|---|---|---|
| 生产环境(稳定记录) | 86400(24 小时) |
适合极少变更的记录(如 NS 记录、主域名 A 记录)。 |
| 通用默认值 | 3600(1 小时) |
平衡缓存效率与变更灵活性。 |
| 频繁变更的记录 | 300(5 分钟) |
适用于测试环境或需要快速生效的变更(如 CDN、负载均衡)。 |
| 临时调试 | 60(1 分钟) |
快速验证变更,但会增加 DNS 服务器负载。 |
2. 创建反向解析文件(可选)
编辑反向解析文件(假设IP段为 192.168.1):
sudo vim /etc/bind/db.192.168.1
内容示例:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025102801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
100 IN PTR ns1.example.com. ; 192.168.1.100
101 IN PTR www.example.com. ; 192.168.1.101
在 BIND9 的正向解析文件(如 /etc/bind/db.example.com)中,SOA 记录中的邮件地址并不强制要求使用 example.com域名,但需要符合 DNS 标准格式: 1. 用点 '.' 替代 '@';2. 允许使用其他域名;3. 末尾必须带根域点(.)。SOA 记录中的邮件地址不必是 example.com,但必须符合 DNS 格式规范(用 .替代 @并补全根域点)。实际应用中,建议使用管理员真实邮箱以方便运维。
在 BIND9 的 DNS 配置中,SOA(Start of Authority)记录中的 Serial 字段是非常重要的,它用于标识 DNS 区域文件的版本号,确保 DNS 记录的变更能够被正确同步到从服务器(Slave DNS)和客户端缓存。Serial 必须递增以触发同步。推荐格式:YYYYMMDDNN(如 2025102801)。
注意: SOA 邮件地址是公开信息,若担心垃圾邮件,可使用专用邮箱(如 dns@example.com)。
注:明确指定的子域名记录优先级高于泛解析。泛解析(*)不匹配根域名(如 example.com),需单独配置根域名记录。反向解析(PTR记录)不支持通配符,必须为每个IP单独配置。
四、引用域配置文件
编辑 /etc/bind/named.conf.local:
sudo vim /etc/bind/named.conf.local
添加以下内容:
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
zone "1.168.192.in-addr.arpa" { // 反向解析区域(根据IP段调整)
type master;
file "/etc/bind/db.192.168.1";
};
五、检查配置语法
sudo named-checkzone example.com /etc/bind/db.example.com
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
sudo named-checkconf
六、重启 BIND9 并测试
sudo systemctl restart bind9
sudo systemctl enable bind9
测试解析结果
# 使用dig测试正向解析
dig @localhost ns1.example.com
# 测试反向解析
dig @localhost -x 192.168.1.100
七、客户端配置
将客户端的DNS服务器设置为Ubuntu服务器的IP地址(如 192.168.1.100),或在路由器中全局配置。
DNS 服务器自身的配置,以 netplan 为例:
network:
version: 2
renderer: networkd # 或 NetworkManager(Ubuntu Desktop)
ethernets:
eth0: # 替换为你的网卡名称(如 ens33、enp0s3)
dhcp4: true
dhcp4-overrides:
use-dns: false # 禁用 DHCP 提供的 DNS
nameservers:
addresses: [127.0.0.1] # 强制使用本地 DNS
使用 resolvectl status 查看当前 DNS 服务器配置。
常见问题
-
防火墙放行DNS端口(53):
sudo ufw allow 53/tcp sudo ufw allow 53/udp -
日志查看:
tail -f /var/log/syslog | grep named -
修改Serial:每次更新解析记录后,需递增SOA记录中的Serial(如
2025102801 → 2025102802)。如果没有从服务器,可以忽略。修改后建议使用命令rndc reload重载配置。