Ubuntu搭建DNS服务器

本文介绍了DNS服务的基本原理及其在Ubuntu系统中的配置方法。首先对比了/etc/hosts文件与DNS服务的功能,随后详细解释了相关配置文件的作用,如/etc/resolv.conf和/etc/host.conf,并提供了BIND服务的安装及配置指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

其实在我们没有安装DNS服务之前,可以将/etc/hosts文件比作一个DNS服务配置文件,因为它实现和DNS类似。

之所以会独立出DNS服务,是因为因特网主机多,如果每个主机都靠/etc/hosts文件来维护主机名到ip的映射,那么工作量非常大,对本地更新、网络资源占用都很浪费,所以出现了DNS。

相关文件

/etc/host 本地的一个小"DNS"文件。

/etc/resolv.conf 用来指定DNS服务的地址,在没有自定义DNS地址时,发现其指向本机。如下:

root@jammg:/etc/bind# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
#nameserver 192.168.1.115

nameserver 127.0.0.1

所以,此时主机查找域名时或许是根据本地/etc/hosts.

/etc/host.conf 指定主机找哪个DNS解析的顺序.如下:

root@jammg:/etc/bind# cat /etc/host.conf
# The "order" line is only used by old versions of the C library.
order hosts,bind
multi on

所以,是先在本地搜索(hosts),然后再用bind指定的DNS区找(相关的查找信息在/etc/bind目录中)。


配置

Ubuntu15.10默认没有安装DNS 相关daemon,其中BIND是提供DNS服务的软件,安装:

#apt-get install bind9

那么,在/etc/bind下就有了DNS服务的相关配置文件,而named则是DNS服务主程序,在/usr/sbin目录下。


先来介绍一下/etc/bind目录下的文件:

root@jammg:/etc/bind# ls -la
总用量 68
drwxr-sr-x   2 root bind  4096  3月 31 11:45 .
drwxr-xr-x 150 root root 12288  3月 31 15:40 ..
-rw-r--r--   1 root root  2389  3月  8 22:59 bind.keys
-rw-r--r--   1 root root   237  3月  8 22:59 db.0
-rw-r--r--   1 root root   271  3月  8 22:59 db.127
-rw-r--r--   1 root root   237  3月  8 22:59 db.255
-rw-r--r--   1 root root   353  3月  8 22:59 db.empty
-rw-r--r--   1 root root   270  3月  8 22:59 db.local
-rw-r--r--   1 root root  3048  3月  8 22:59 db.root
-rw-r--r--   1 root bind   463  3月  8 22:59 named.conf
-rw-r--r--   1 root bind   490  3月  8 22:59 named.conf.default-zones
-rw-r--r--   1 root bind   165  3月  8 22:59 named.conf.local
-rw-r--r--   1 root bind   890  3月 31 00:28 named.conf.options
-rw-r-----   1 bind bind    77  3月 31 00:28 rndc.key
-rw-r--r--   1 root root  1317  3月  8 22:59 zones.rfc1918

其中,主要的是named.conf文件,它包括了DNS的重要配置信息,它有下面三个文件组成:

named.conf.default-zones
named.conf.local
named.conf.options

①named.conf.default-zones

包含了反解文件:db.0 db.127 正解文件:db.root db.local.

指定了DNS查找的配置信息,如db.local:

root@jammg:/etc/bind# cat db.local
;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.
@	IN	A	127.0.0.1
@	IN	AAAA	::1

@代表域名,在这里是local.(有个点)。

另外,db.root 包含了最顶层的域名和对应的地址,所有有需要的DNS都可以从这些地址得到其它域名的地址信息。

②named.conf.local暂时没用到

③named.conf.options

包含了一些设置信息,如设置为cache-only DNS,添加forwarding功能等。


测试

#dig +trace www.google.com @127.0.0.1

后面的@server就是指定使用本主机配置的DNS服务,如果返回如下信息则说明配置成功了。

www.google.com.		300	IN	A	216.58.197.100

第一次时,它是通过去找db.root配置文件的最顶层域名,由上到下一层层往下找到www.google.com的;第二次如果缓存还没过期则只需从本地获取结果。


关闭服务

#/etc/init.d/bind9 stop
还是关了本地的dns上网快点,毕竟目前只有最顶层的域名ip,要一层层找下来。


<think>好的,用户想在Ubuntu搭建DNS服务器,我需要根据提供的引用内容来整理步骤。首先,引用3提到DNS的正反向解析作用和安装软件,所以第一步应该是安装bind9。接下来,引用2提到了配置named.conf.options文件,添加forwarders,这部分需要详细说明。引用1和引用3都提到了配置DNS服务器,可能需要编辑named.conf.local来添加区域文件,然后创建正向和反向解析文件,如db.example.com和db.192。还要注意权限问题,比如检查语法和重启服务。最后,测试部分需要用dig或nslookup验证解析是否成功。需要确保步骤清晰,并且引用正确的来源。同时,用户可能需要配置防火墙,所以也要包含ufw的设置。还要提醒用户替换示例域名和IP为实际使用的。检查是否有遗漏的步骤,比如安装软件后的初始配置,或者日志文件的查看。总之,按照安装、配置主文件、区域文件、正反向解析、重启服务、防火墙和测试的顺序来组织回答,确保每个步骤都有对应的引用支持。</think>### 在 Ubuntu搭建 DNS 服务器的步骤 以下是基于 BIND9 在 Ubuntu 系统(如 22.04)上搭建 DNS 服务器的详细步骤: --- #### **1. 安装 BIND9 软件** 通过以下命令安装 BIND9(Berkeley Internet Name Domain): ```bash sudo apt update sudo apt install bind9 bind9-utils ``` BIND9 是当前最常用的 DNS 服务器软件,支持正向解析和反向解析[^3]。 --- #### **2. 配置主配置文件** - **修改 `named.conf.options`** 编辑文件 `/etc/bind/named.conf.options`,添加公共 DNS 作为转发器(例如 Google 的 8.8.8.8): ```bash sudo vim /etc/bind/named.conf.options ``` 在 `options` 块内添加: ```plaintext forwarders { 8.8.8.8; }; ``` 此配置可提升外网域名解析效率[^2]。 - **修改 `named.conf.local`** 编辑文件 `/etc/bind/named.conf.local`,添加自定义域名解析区域(以 `example.com` 和反向解析 `192.168.1.0/24` 为例): ```plaintext 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"; }; ``` --- #### **3. 创建正向解析文件** 创建并编辑正向解析文件 `/etc/bind/db.example.com`: ```plaintext $TTL 604800 @ IN SOA ns.example.com. admin.example.com. ( 2024022001 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns.example.com. ns IN A 192.168.1.100 www IN A 192.168.1.101 ``` - `SOA` 记录定义了域名的权威信息,`A` 记录将域名映射到 IP 地址[^3]。 --- #### **4. 创建反向解析文件** 创建并编辑反向解析文件 `/etc/bind/db.192`: ```plaintext $TTL 604800 @ IN SOA ns.example.com. admin.example.com. ( 2024022001 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns.example.com. 100 IN PTR ns.example.com. 101 IN PTR www.example.com. ``` - `PTR` 记录用于将 IP 地址反向解析为域名[^3]。 --- #### **5. 检查语法并重启服务** - 检查配置文件语法: ```bash sudo named-checkconf sudo named-checkzone example.com /etc/bind/db.example.com ``` - 重启 BIND9 服务: ```bash sudo systemctl restart bind9 ``` --- #### **6. 配置防火墙(可选)** 允许 DNS 服务的 UDP 53 端口: ```bash sudo ufw allow 53/udp ``` --- #### **7. 测试 DNS 解析** 使用 `dig` 或 `nslookup` 测试解析是否生效: ```bash dig @localhost www.example.com nslookup 192.168.1.101 ``` 若返回正确结果,说明 DNS 服务器已正常运行。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值