本指南将使用 BIND (Berkeley Internet Name Daemon),这是在 Linux 上最常用、最强大的 DNS 服务器软件。

重要前提:使用 CentOS 6.5 的风险
在开始之前,请务必了解:
- 停止安全更新:CentOS 6.5 的生命周期早已结束,官方不再提供任何安全补丁,将其连接到互联网会使您的系统极易受到攻击。
- 软件包老旧:您将安装的软件包版本非常旧,可能存在已知的漏洞和功能限制。
- 仅限学习和测试:强烈建议仅在隔离的测试环境中进行此操作,切勿用于任何生产环境。
第一步:安装 BIND DNS 服务器
通过 SSH 登录到您的 CentOS 6.5 服务器。
-
更新系统软件包列表(可选,但推荐)
yum check-update
-
安装 BIND 及其相关工具 我们需要安装
bind(服务器核心)、bind-utils(客户端查询工具,如dig,nslookup) 和bind-chroot(将 BIND 运行在一个 chroot 监狱中,增强安全性)。
(图片来源网络,侵删)yum install bind bind-utils bind-chroot -y
安装过程中,系统可能会提示您导入 GPG 密钥,输入
y确认即可。
第二步:配置 BIND
BIND 的主要配置文件是 named.conf,使用 chroot 后,实际的工作目录会变为 /var/named/chroot/,所以配置文件路径也会相应改变。
-
进入配置目录
cd /var/named/chroot/etc
-
备份原始主配置文件 这是一个好习惯,以防配置出错可以恢复。
(图片来源网络,侵删)cp named.conf named.conf.original
-
编辑主配置文件
named.conf使用vi或nano编辑器打开文件。vi named.conf
删除或注释掉文件中所有以 开头的默认行,然后添加以下基本配置,这个配置将告诉 BIND 从哪里加载区域文件。
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { // 在 chroot 环境中,这些路径是相对于 /var/named/chroot/ 的 directory "/var/named"; // 区域文件存放的目录 // 允许哪些主机查询我们的 DNS 服务器 // localhost 允许本机查询 // 192.168.1.0/24 允许局域网内的主机查询 (请根据您的网段修改) allow-query { localhost; 192.168.1.0/24; }; // 允许哪些主机进行 DNS 递归查询 (通常只信任内网) allow-recursion { localhost; 192.168.1.0/24; }; // 防止 DNS 放大攻击 version "not currently used"; recursion yes; }; // 定义一个日志文件,记录 DNS 查询信息 logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; // 将本机定义为根域的 DNS 服务器(用于缓存) zone "." IN { type hint; file "named.ca"; }; // 将 localhost 的反向解析指向 named.localhost zone "localhost" IN { type master; file "named.localhost"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; }; // --- 在这里添加您自己的正向和反向区域 --- // 示例:假设我们的域名是 example.com,网段是 192.168.1.0/24 zone "example.com" { type master; file "example.com.zone"; // 正向区域文件名 }; zone "1.168.192.in-addr.arpa" { type master; file "192.168.1.zone"; // 反向区域文件名 };配置说明:
allow-query: 定义了可以向我们这个 DNS 服务器发起查询请求的客户端 IP 地址范围,为了安全,不要设置为any;。zone "example.com": 定义了一个名为example.com的正向区域。zone "1.168.192.in-addr.arpa": 定义了一个反向区域,用于根据 IP 地址查询域名。168.192.in-addr.arpa是168.1.x的标准 DNS 反向写法。
第三步:创建区域文件
我们需要为刚才在 named.conf 中定义的区域创建数据文件,这些文件也存放在 /var/named/chroot/var/named/ 目录下。
创建正向区域文件 (example.com.zone)
cd /var/named/chroot/var/named vi example.com.zone
$TTL 1D ; 1天的生存时间
@ IN SOA ns1.example.com. admin.example.com. (
2025051501 ; 序列号 (每次修改区域后必须递增)
1H ; 刷新间隔 (1小时)
10M ; 重试间隔 (10分钟)
1W ; 过期时间 (1周)
3H ) ; 负缓存时间 (3小时)
IN NS ns1.example.com. ; 定义此域的权威名称服务器
IN MX 10 mail.example.com. ; 定义邮件交换记录
; 定义主机记录 (A记录)
ns1 IN A 192.168.1.10 ; DNS 服务器自身的 IP
www IN A 192.168.1.20 ; Web 服务器的 IP
mail IN A 192.168.1.30 ; 邮件服务器的 IP
创建反向区域文件 (168.1.zone)
vi 192.168.1.zone
$TTL 1D
@ IN SOA ns1.example.com. admin.example.com. (
2025051501
1H
10M
1W
3H )
IN NS ns1.example.com.
; 定义指针记录
10 IN PTR ns1.example.com.
20 IN PTR www.example.com.
30 IN PTR mail.example.com.
文件权限:BIND 进程 (named) 需要能够读取这些文件,确保它们的属主是 named,并且组也是 named。
chown named:named example.com.zone 192.168.1.zone
第四步:启动和测试 DNS 服务
-
启动 BIND 服务
service named start
-
设置开机自启
chkconfig named on
-
检查服务状态
service named status
如果看到
named (pid 1234) is running...,则表示服务已成功启动。 -
防火墙设置 CentOS 6.5 默认使用
iptables防火墙,需要开放 TCP 和 UDP 的 53 端口。# 添加规则 iptables -I INPUT -p tcp --dport 53 -j ACCEPT iptables -I INPUT -p udp --dport 53 -j ACCEPT # 保存规则 service iptables save # 或者 /etc/init.d/iptables save
-
测试 DNS 解析
在服务器上或同一局域网内的另一台 Linux 机器上,临时将 DNS 服务器指向你的新 DNS:
# 编辑 /etc/resolv.conf vi /etc/resolv.conf
添加或修改为:
nameserver 192.168.1.10 # 替换为你的 DNS 服务器 IP使用
dig命令测试:# 测试正向解析 dig @192.168.1.10 www.example.com # 测试
