在Ubuntu系统中配置DNS服务器可以通过多种方式实现,包括使用系统内置的DNS服务(如systemdresolved)或安装专门的DNS软件(如BIND、dnsmasq等),以下将以BIND(Berkeley Internet Name Domain)为例,详细介绍在Ubuntu上配置DNS服务器的完整步骤,包括安装、配置、测试及常见问题处理。
安装BIND DNS服务器
更新系统软件包列表并安装BIND,打开终端,执行以下命令:
sudo apt update sudo apt install bind9 bind9utils bind9doc
安装完成后,BIND服务会自动启动,可以通过以下命令检查服务状态:
sudo systemctl status bind9
配置BIND DNS服务器
BIND的主配置文件位于/etc/bind/named.conf,而区域配置文件通常存放在/etc/bind/named.conf.local,以下以配置正向解析和反向解析为例进行说明。
配置正向解析区域
假设要配置域名为example.com,IP地址段为168.1.0/24,首先在/etc/bind/named.conf.local中添加正向区域声明:
sudo nano /etc/bind/named.conf.local
在文件末尾添加以下内容:
zone "example.com" {
type master;
file "/etc/bind/zones/db.example.com";
};
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 nano /etc/bind/zones/db.example.com ```如下(示例):
;
; BIND data file for example.com
;
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
@ IN A 192.168.1.1
ns1 IN A 192.168.1.1
www IN A 192.168.1.2
mail IN A 192.168.1.3
#### 3. 创建反向区域文件
复制反向区域模板文件并编辑:
```bash
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.1
sudo nano /etc/bind/zones/db.192.168.1
```如下:
;
; BIND reverse data file for 192.168.1.0/24
;
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
1 IN PTR ns1.example.com.
2 IN PTR www.example.com.
3 IN PTR mail.example.com.
#### 4. 配置BIND选项
编辑主配置文件`/etc/bind/named.conf.options`,设置监听地址和允许查询的客户端:
```bash
sudo nano /etc/bind/named.conf.options
在options块中添加以下内容:
listenon port 53 { any; }; // 监听所有接口
allowquery { any; }; // 允许所有客户端查询
allowrecursion { localhost; 192.168.1.0/24; }; // 允许递归查询的客户端
检查配置并重启服务
使用以下命令检查配置文件语法:
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服务器
使用nslookup测试
nslookup www.example.com nslookup 192.168.1.2
若返回正确的域名和IP,则配置成功。
使用dig测试
dig @localhost www.example.com
配置客户端DNS
在客户端设备上,将DNS服务器地址设置为Ubuntu服务器的IP(如168.1.1),然后测试域名解析。
常见问题处理
-
权限问题:确保区域文件权限正确,通常为
644,属主为bind:sudo chown bind:bind /etc/bind/zones/* sudo chmod 644 /etc/bind/zones/*
-
防火墙设置:若防火墙开启,需开放UDP/TCP 53端口:
sudo ufw allow 53
相关问答FAQs
Q1: 如何在Ubuntu上启用DNS over HTTPS (DoH)支持?
A1: BIND本身不直接支持DoH,但可通过结合dnscryptproxy或unbound实现,例如安装dnscryptproxy:
sudo apt install dnscryptproxy
编辑/etc/dnscryptproxy/dnscryptproxy.toml,启用require_dnssec并添加DoH服务器列表,然后重启服务:
sudo systemctl restart dnscryptproxy
最后将客户端DNS指向0.0.1:53即可。
Q2: 如何配置BIND作为DNS转发器?
A2: 在/etc/bind/named.conf.options中添加转发器配置:
forwarders {
8.8.8.8;
8.8.4.4;
};
forward only; // 仅转发,不递归查询
保存后重启BIND服务,所有非本地区域的查询将转发至指定的上游DNS服务器。
