ubuntu 配置dns服务器

ubuntu 配置dns服务器

在Ubuntu系统中配置DNS服务器可以通过多种方式实现,包括使用系统内置的DNS服务(如systemd-resolved)或安装专门的DNS软件(如BIND、dnsmasq等),以下将以BIND(Berkeley Internet Name Domain...

优惠价格:¥ 0.00
当前位置:首页 > 数据库 > ubuntu 配置dns服务器
详情介绍

在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),然后测试域名解析。

常见问题处理

  1. 权限问题:确保区域文件权限正确,通常为644,属主为bind

    sudo chown bind:bind /etc/bind/zones/*
    sudo chmod 644 /etc/bind/zones/*
  2. 防火墙设置:若防火墙开启,需开放UDP/TCP 53端口:

    sudo ufw allow 53

相关问答FAQs

Q1: 如何在Ubuntu上启用DNS over HTTPS (DoH)支持?
A1: BIND本身不直接支持DoH,但可通过结合dnscryptproxyunbound实现,例如安装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服务器。

0