在 Linux 上搭建 DNS 服务器(BIND9)
BIND9(Berkeley Internet Name Domain)是一个开源的 DNS(Domain Name System)服务器软件,它为域名解析提供了强大的功能,广泛应用于 Linux 和 Unix 系统中。以下是如何在 Linux 上安装和配置 BIND9 DNS 服务器的详细步骤。
1. 安装 BIND9
在大多数 Linux 发行版中,BIND9 都可以通过包管理器来安装。
1.1 安装 BIND9(以 Debian/Ubuntu 为例)
sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils
1.2 安装 BIND9(以 CentOS/RHEL 为例)
sudo yum install bind bind-utils
安装完毕后,BIND9 服务会自动启动。
2. 配置 BIND9
BIND9 的配置文件通常位于 /etc/bind
目录下,具体的配置文件包括:
/etc/bind/named.conf
:主配置文件,包含其他配置文件的引用。/etc/bind/named.conf.local
:用于定义本地区域(如自定义域名解析)。/etc/bind/named.conf.options
:设置 DNS 服务的全局选项。/etc/bind/db.local
:默认的 DNS 解析文件模板。/etc/bind/db.127.0.0
、/etc/bind/db.0.0.127
:本地回环接口的配置。
3. 配置全局选项
- 编辑
named.conf.options
配置文件,定义 DNS 服务器的全局选项,如允许的查询源、转发 DNS 等。
sudo nano /etc/bind/named.conf.options
在该文件中,通常需要配置以下几个部分:
options {
directory "/var/cache/bind"; # 设置 BIND 数据库目录
// 控制转发
forwarders {
8.8.8.8; # Google DNS
8.8.4.4; # Google DNS
};
allow-query { any; }; # 允许所有外部主机查询
listen-on { any; }; # 允许 BIND 监听所有网络接口
listen-on-v6 { any; };
recursion yes; # 允许递归查询
};
forwarders
:配置向其他 DNS 服务器转发请求。allow-query
:控制允许哪些源 IP 地址发起查询,any
表示允许所有地址。listen-on
和listen-on-v6
:指定 BIND 监听的地址和端口。
4. 配置本地 DNS 区域(区域文件)
BIND9 配置文件分为多个部分,主要包括:
named.conf.local
:通常用于定义本地 DNS 区域。
例如,创建一个本地域名 example.com
的解析区域配置。
4.1 编辑 named.conf.local
配置文件
sudo nano /etc/bind/named.conf.local
添加如下内容:
zone "example.com" {
type master;
file "/etc/bind/db.example.com"; # 定义区域文件
};
4.2 创建区域文件
接下来,需要创建指定的区域文件 /etc/bind/db.example.com
来设置域名的解析记录。
sudo nano /etc/bind/db.example.com
一个典型的 db.example.com
文件内容如下:
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
2021081001 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; Name Servers
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A Records
@ IN A 192.168.1.100 ; example.com 指向 192.168.1.100
ns1 IN A 192.168.1.101 ; ns1.example.com 指向 192.168.1.101
ns2 IN A 192.168.1.102 ; ns2.example.com 指向 192.168.1.102
; MX Record
@ IN MX 10 mail.example.com.
; CNAME Record
www IN CNAME example.com. ; www.example.com 指向 example.com
$TTL
:指定所有记录的默认有效时间。SOA
:开始授权(Start of Authority)记录,包含主 DNS 服务器的名称、管理员邮件地址(使用.
替换@
)等信息。NS
:域名服务器记录,指定example.com
的权威 DNS 服务器。A
:地址记录,将域名映射到 IP 地址。MX
:邮件交换记录,指定邮件服务器。CNAME
:别名记录,www.example.com
指向example.com
。
5. 启动 BIND9 服务
完成所有配置后,重新启动 BIND9 服务,以使更改生效。
sudo systemctl restart bind9
6. 测试 DNS 服务器
- 使用
dig
命令测试 DNS 查询
可以使用 dig
命令来测试 DNS 解析是否成功。例如,查询 example.com
:
dig @localhost example.com
你应该看到类似下面的输出,表明 DNS 查询成功:
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost example.com
;; global options: +cmd
;; connection timed out; no servers could be reached
如果能正常解析,并返回配置中的 IP 地址,则说明配置正确。
- 检查 BIND9 状态
你还可以通过以下命令检查 BIND9 服务的状态,确保它正在运行并且没有错误。
sudo systemctl status bind9
7. 设置防火墙
确保防火墙允许 DNS 查询(默认端口为 53)。如果使用 ufw
(Uncomplicated Firewall),可以运行以下命令来开放 53 端口:
sudo ufw allow 53
对于 firewalld
,使用以下命令:
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload
8. 设置系统 DNS 解析
如果希望使用你刚才配置的 DNS 服务器来解析其他域名,可以在系统的 /etc/resolv.conf
文件中添加 DNS 服务器地址。编辑文件并添加:
nameserver 192.168.1.100 # 指向你本地的 DNS 服务器 IP 地址
总结
通过以上步骤,你已经成功在 Linux 上搭建并配置了 BIND9 DNS 服务器。你可以根据实际需求修改 DNS 区域文件、配置转发器等。此外,定期检查 DNS 服务的运行状态、日志文件,确保其稳定和安全运行。
发表回复