在Ubuntu系统中配置DNS服务器通常涉及使用BIND(Berkeley Internet Name Domain)软件,这是最常用且功能强大的DNS服务器实现之一,以下是详细的配置步骤,包括安装、配置主从服务器、区域文件管理以及常见问题处理。
安装BIND
首先更新系统软件包列表并安装BIND9:
sudo apt update sudo apt install bind9 bind9utils bind9doc
安装完成后,BIND服务会自动启动,可以通过以下命令检查服务状态:
sudo systemctl status bind9
主DNS服务器配置
-
编辑主配置文件
主配置文件位于/etc/bind/named.conf.options,主要配置全局选项如监听地址、允许查询的客户端等。options { directory "/var/cache/bind"; recursion yes; allowquery { localhost; 192.168.1.0/24; }; // 允许本地和内网查询 listenon { any; }; // 监听所有接口(生产环境建议指定具体IP) forwarders { 8.8.8.8; 8.8.4.4; }; // 转发非本域查询到公共DNS };保存后重启BIND服务:
sudo systemctl restart bind9。 -
创建区域文件
假设要配置正向区域example.com,首先在/etc/bind/named.conf.local中添加区域声明:zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; };类似地,反向区域(基于IP)的配置如下(假设内网网段为
168.1.0/24):zone "1.168.192.inaddr.arpa" { type master; file "/etc/bind/zones/db.192.168.1"; };创建区域文件目录并复制模板:
sudo mkdir p /etc/bind/zones sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.1
-
编辑正向区域文件
修改db.example.com内容如下:$TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 2025100101 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN A 192.168.1.10 ns1 IN A 192.168.1.10 www IN A 192.168.1.20 mail IN A 192.168.1.30SOA记录包含区域管理信息,Serial需在修改后递增。NS记录指定域名服务器,A记录将域名映射到IP。
-
编辑反向区域文件
修改db.192.168.1内容如下:$TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 2025100101 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. 10 IN PTR ns1.example.com. 20 IN PTR www.example.com. 30 IN PTR mail.example.com.PTR记录将IP反向解析为域名。
-
检查配置并重启服务
使用namedcheckconf检查主配置文件,namedcheckzone检查区域文件:sudo namedcheckconf sudo namedcheckzone example.com /etc/bind/zones/db.example.com sudo namedcheckzone 1.168.192.inaddr.arpa /etc/bind/zones/db.192.168.1
若无错误,重启BIND服务:
sudo systemctl restart bind9。
从DNS服务器配置
从服务器通过区域传输从主服务器同步数据,步骤如下:
- 在主服务器
/etc/bind/named.conf.local中添加允许从服务器传输的IP:zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; allowtransfer { 192.168.1.11; }; // 从服务器IP }; - 在从服务器上安装BIND后,编辑
/etc/bind/named.conf.local,声明从区域:zone "example.com" { type slave; file "/var/cache/bind/db.example.com"; masters { 192.168.1.10; }; // 主服务器IP }; - 重启从服务器BIND,区域文件会自动同步到
/var/cache/bind/。
防火墙与客户端配置
- 开放DNS端口
若使用UFW防火墙,允许DNS流量:sudo ufw allow 53/tcp sudo ufw allow 53/udp
- 配置客户端DNS
在客户端Ubuntu系统中,修改/etc/resolv.conf或通过Netplan/NetworkManager设置DNS为服务器IP(如168.1.10)。
日志与排错
- 查看BIND日志:
sudo tail f /var/log/syslog | grep named - 常见错误:
permission denied:检查区域文件权限(通常为640,属主root:bind)。zone loaded with errors:通过namedcheckzone检查区域文件语法。
相关问答FAQs
Q1: 如何在BIND中配置DNS转发?
A1: 在/etc/bind/named.conf.options的options块中添加forwarders选项,例如forwarders { 8.8.8.8; 114.114.114.114; };,表示所有非本域查询将转发到指定的公共DNS服务器,若仅转发特定域,可使用forwarders结合zone声明中的forward选项(如forward only)。
Q2: 如何测试DNS配置是否生效?
A2: 使用dig或nslookup工具测试。
- 查询正向记录:
dig @192.168.1.10 www.example.com - 查询反向记录:
dig @192.168.1.10 x 192.168.1.20 - 检查区域传输:
dig @192.168.1.10 example.com AXFR(需主服务器允许)
若返回正确结果,说明配置成功;若超时或错误,检查防火墙规则和BIND日志。
