在 Linux 系统上搭建 DNS 服务器通常使用 BIND(Berkeley Internet Name Domain) 软件,这是最常用的 DNS 服务器软件。BIND 提供了对域名解析(正向和反向)的支持。下面将介绍如何在 Linux 系统上安装并配置 BIND 服务器。
步骤 1:安装 BIND 软件
首先,确保你的系统是最新的,并且安装了 BIND。
1.1 在 Ubuntu/Debian 系统上安装 BIND
打开终端并执行以下命令:
sudo apt update
sudo apt install bind9 bind9utils bind9-doc
1.2 在 CentOS/RHEL 系统上安装 BIND
对于 CentOS 或 RHEL 系统,使用以下命令:
sudo yum install bind bind-utils
步骤 2:配置 BIND 服务器
BIND 的主配置文件是 /etc/bind/named.conf
(在 Ubuntu/Debian 中),或者 /etc/named.conf
(在 CentOS/RHEL 中)。我们将需要编辑这个文件来设置正向解析(domain-to-IP)和反向解析(IP-to-domain)。
2.1 配置主配置文件
编辑 BIND 配置文件:
sudo nano /etc/bind/named.conf.local # Ubuntu/Debian
对于 CentOS/RHEL:
sudo nano /etc/named.conf
在配置文件中添加区域文件(zone file)配置,配置主区域(正向解析区域)和反向区域(反向解析区域)。
例如,假设你要为 example.com
域名设置 DNS 服务:
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"; # 反向解析区文件
};
在这里:
example.com
是你设置的域名。1.168.192.in-addr.arpa
是192.168.1.x
网络的反向解析区域。/etc/bind/db.example.com
是正向解析区域的文件。/etc/bind/db.192
是反向解析区域的文件。
2.2 创建正向解析区域文件
为正向解析区域创建一个文件,路径为 /etc/bind/db.example.com
。你可以参考下面的内容:
sudo nano /etc/bind/db.example.com
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023051501 ; Serial
28800 ; Refresh
7200 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
IN NS ns2.example.com.
ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
@ IN A 192.168.1.100
www IN A 192.168.1.100
在这里:
@
是example.com
的域名。NS
指定了域名服务器(ns1.example.com
和ns2.example.com
)。A
记录将域名映射到 IP 地址(例如,将example.com
映射到192.168.1.100
)。
2.3 创建反向解析区域文件
接下来,创建反向解析区域文件 /etc/bind/db.192
:
sudo nano /etc/bind/db.192
反向解析区文件的内容示例如下:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023051501 ; Serial
28800 ; Refresh
7200 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
IN NS ns2.example.com.
10 IN PTR ns1.example.com.
11 IN PTR ns2.example.com.
100 IN PTR example.com.
在反向解析文件中:
PTR
记录用于 IP 地址到域名的反向映射。10
和11
是192.168.1.x
地址的反向解析映射。
2.4 配置允许的访问控制
在 BIND 配置文件中,设置允许哪些 IP 地址访问你的 DNS 服务器。确保添加以下内容:
编辑 /etc/bind/named.conf.options
文件:
sudo nano /etc/bind/named.conf.options
确保配置允许查询的源 IP 地址或子网(例如,允许所有本地网络的请求):
options {
directory "/var/cache/bind";
recursion yes;
allow-query { 192.168.1.0/24; }; # 允许来自 192.168.1.x 网络的查询
// 配置 DNS 服务器监听的地址
listen-on { 192.168.1.10; }; # 仅允许监听在 192.168.1.10 上
forwarders {
8.8.8.8; # Google DNS 转发
8.8.4.4; # Google DNS 转发
};
};
2.5 启动和测试 DNS 服务器
保存所有配置文件后,重启 BIND 服务以使配置生效。
在 Ubuntu/Debian 上重启 BIND 服务:
sudo systemctl restart bind9
在 CentOS/RHEL 上重启 BIND 服务:
sudo systemctl restart named
步骤 3:测试 DNS 配置
使用 dig
或 nslookup
来测试你的 DNS 配置是否成功。
- 测试正向解析:
dig @192.168.1.10 example.com
你应该看到类似于以下的输出:
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.10 example.com
;; ANSWER SECTION:
example.com. 86400 IN A 192.168.1.100
- 测试反向解析:
dig @192.168.1.10 -x 192.168.1.100
你应该看到类似于以下的输出:
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.10 -x 192.168.1.100
;; ANSWER SECTION:
100.1.168.192.in-addr.arpa. 86400 IN PTR example.com.
步骤 4:开启 DNS 转发(可选)
如果你想让 DNS 服务器能够查询外部域名,可以配置 转发。打开 /etc/bind/named.conf.options
,在 forwarders
部分添加转发地址(例如,Google DNS):
forwarders {
8.8.8.8;
8.8.4.4;
};
总结
通过以上步骤,你成功搭建了一个基础的 DNS 服务器。BIND 是一个非常强大的 DNS 服务器软件,可以用于正向解析、反向解析、DNS 转发等多种场景。你可以进一步配置缓存、访问控制、日志等高级功能,以满足不同的需求。
发表回复