在许多企业的遗留环境中,CentOS 6 依然扮演着重要的角色,尽管其生命周期(EOL)早已结束,但在某些特定场景下,我们仍需在其上部署关键服务,其中就包括核心的网络服务——DNS(域名系统),BIND(Berkeley Internet Name Domain)作为互联网上最广泛使用的DNS软件,其守护进程名为 named
,本文将详细介绍如何在 CentOS 6 系统上安装、配置和管理一个基本的 named
服务。
安装 BIND 软件
在 CentOS 6 上,我们可以使用 yum
包管理器来轻松安装 BIND 及其相关工具,打开终端,执行以下命令:
yum install bind bind-utils -y
bind
:这是主要的软件包,包含了named
守护进程和核心库文件。bind-utils
:这个包提供了非常有用的客户端工具,如dig
、nslookup
、host
等,用于查询和测试DNS服务器。
安装完成后,相关的配置文件和目录会自动创建,主配置文件位于 /etc/named.conf
,区域文件通常存放在 /var/named/
目录下。
核心配置文件解析
配置 named
服务主要涉及两个层面的文件:主配置文件和区域数据文件。
主配置文件 /etc/named.conf
这是 named
服务的“大脑”,定义了服务器的全局行为、访问控制以及它所负责解析的各个区域,一个基础的配置文件结构如下:
options { listen-on port 53 { any; }; // 监听在所有网络接口的53端口 listen-on-v6 port 53 { ::1; }; directory "/var/named"; // 指定区域文件的存放目录 dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; // 允许任何客户端进行查询 recursion yes; // 允许递归查询(作为缓存DNS服务器时需要) /* 如果需要转发所有无法解析的请求到上游DNS服务器,可以配置forwarders */ forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-enable yes; dnssec-validation yes; }; /* 日志配置 */ logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; /* 区域定义 */ zone "." IN { type hint; file "named.ca"; // 根提示文件 }; /* 在这里定义我们自己的权威解析区域 */ include "/etc/named.rfc1912.zones";
关键指令说明:
listen-on
:定义服务器监听的IP地址和端口。{ any; }
表示监听所有接口。directory
:指定所有区域文件的默认存储路径。allow-query
:定义哪些客户端可以向此DNS服务器发起查询请求。{ any; }
表示允许所有,生产环境中建议根据需要限制。recursion
:是否允许递归查询,如果此服务器仅为内部网络提供权威解析,应设为no
以提高安全性。forwarders
:配置转发器,当服务器无法自己解析一个域名时,它会将请求转发给这里指定的DNS服务器。
区域文件
区域文件包含了具体的DNS资源记录,负责将域名映射到IP地址(正向解析)或将IP地址映射回域名(反向解析)。
常见的DNS资源记录类型如下表所示:
记录类型 | 名称 | 功能 |
---|---|---|
A | Address Record | 将主机名解析为IPv4地址 |
AAAA | Quad-A Record | 将主机名解析为IPv6地址 |
CNAME | Canonical Name Record | 创建主机名的别名 |
MX | Mail Exchanger Record | 指定负责处理域邮件的邮件服务器 |
NS | Name Server Record | 指定域的权威DNS服务器 |
PTR | Pointer Record | 将IP地址反向解析为主机名 |
SOA | Start of Authority Record | 标志着一个区域的开始,包含区域管理信息 |
配置实例:搭建一个权威DNS服务器
假设我们要为域 internal.net
搭建一个权威DNS服务器,负责解析该域下的主机,并为 168.10.0/24
网段提供反向解析。
定义区域
编辑 /etc/named.rfc1912.zones
文件,在末尾添加我们自己的区域定义:
zone "internal.net" IN { type master; file "internal.net.zone"; allow-update { none; }; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.zone"; allow-update { none; }; };
type master
:表明这是主区域服务器。file
:指定了该区域的数据文件名。
创建正向区域文件
在 /var/named/
目录下创建 internal.net.zone
文件:
touch /var/named/internal.net.zone
如下:
$TTL 86400 @ IN SOA ns1.internal.net. admin.internal.net. ( 2025102701 ; Serial (YYYYMMDDNN) 3600 ; Refresh (1 hour) 1800 ; Retry (30 minutes) 604800 ; Expire (1 week) 86400 ) ; Minimum TTL (1 day) IN NS ns1.internal.net. ns1 IN A 192.168.10.10 www IN A 192.168.10.20 mail IN A 192.168.10.30 IN MX 10 mail.internal.net.
SOA记录详解:
ns1.internal.net.
:主DNS服务器的主机名。admin.internal.net.
:管理员邮箱(注意符号用代替)。Serial
:序列号,每次修改此文件后都必须递增,否则辅助服务器不会更新。Refresh
:辅助服务器检查更新的间隔。Retry
:辅助服务器重试连接的间隔。Expire
:辅助服务器在无法联系主服务器后,停止响应查询的时间。Minimum TTL
:默认的缓存时间。
创建反向区域文件
在 /var/named/
目录下创建 168.10.zone
文件:
touch /var/named/192.168.10.zone
如下:
$TTL 86400 @ IN SOA ns1.internal.net. admin.internal.net. ( 2025102701 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL IN NS ns1.internal.net. 10 IN PTR ns1.internal.net. 20 IN PTR www.internal.net. 30 IN PTR mail.internal.net.
注意,反向解析文件中,我们只写IP地址的最后一部分。
设置权限与SELinux
确保 named
用户对区域文件有读写权限:
chown root:named /var/named/*.zone chmod 640 /var/named/*.zone
检查并调整SELinux上下文,防止其阻止 named
读取文件:
chcon -t named_zone_t /var/named/internal.net.zone chcon -t named_zone_t /var/named/192.168.10.zone
配置防火墙
CentOS 6 默认使用 iptables
作为防火墙,需要开放DNS服务的53端口(TCP和UDP):
iptables -I INPUT -p udp --dport 53 -j ACCEPT iptables -I INPUT -p tcp --dport 53 -j ACCEPT service iptables save
启动服务并设置开机自启
service named start chkconfig named on
可以使用 service named status
检查服务状态,或查看 /var/log/messages
来排查启动错误。
测试DNS服务器
使用 dig
命令从本地或另一台客户端机器进行测试:
# 正向解析测试 dig @192.168.10.10 www.internal.net # 反向解析测试 dig @192.168.10.10 -x 192.168.10.20
如果返回的 ANSWER SECTION
中包含正确的解析结果,则说明配置成功。
相关问答FAQs
问题1:我修改了区域文件,但DNS解析结果没有更新,这是为什么?
解答: 这是最常见的配置问题之一,主要有两个原因:
- 序列号未递增:每次修改区域文件后,必须增加SOA记录中的序列号(Serial),如果序列号没有变化,
named
服务(尤其是辅助服务器)会认为文件没有更新,从而不会重新加载。 - 未重新加载配置:修改完文件后,需要让
named
服务重新加载配置,可以执行service named reload
或rndc reload
命令,这个命令比restart
更温和,它只会重新加载配置和区域文件,而不会中断整个服务。
问题2:我的DNS服务器只能在本地查询,从其他机器无法访问,该怎么办?
解答: 这个问题通常由两个因素导致:
- 防火墙拦截:请检查服务器的
iptables
防火墙规则,确保已经放行了UDP和TCP的53端口,可以使用iptables -L -n
命令查看当前规则。 :检查 /etc/named.conf
文件中的listen-on
和allow-query
指令。listen-on
是否设置为监听在服务器的公网IP或{ any; }
?allow-query
是否限制了查询来源的IP地址范围?如果希望所有机器都能查询,应将其设置为{ any; }
(请注意安全风险)。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复