在红帽Linux(如RHEL、CentOS、AlmaLinux、Rocky Linux等)上搭建DNS服务器,最常用的是使用BIND(Berkeley Internet Name Domain),以下是详细的搭建步骤:
一、安装BIND软件包
安装BIND及相关工具 sudo yum install bind bind-utils -y 或使用dnf(RHEL 8+) sudo dnf install bind bind-utils -y
二、配置主配置文件 named.conf
编辑主配置文件/etc/named.conf:
sudo vi /etc/named.conf
options {
listen-on port 53 { any; }; # 监听所有IP
listen-on-v6 port 53 { any; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; # 允许查询
recursion yes; # 允许递归查询
dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
根区域
zone "." IN {
type hint;
file "named.ca";
};
本地回环区域
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
自定义正向解析区域(示例:example.com)
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
自定义反向解析区域(示例:192.168.1.0/24)
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.rev";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";三、创建区域文件
sudo vi /var/named/example.com.zone示例:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name Servers
IN NS ns1.example.com.
IN NS ns2.example.com.
; A Records
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
www IN A 192.168.1.100
mail IN A 192.168.1.200
ftp IN CNAME www.example.com.
; MX Records
@ IN MX 10 mail.example.com.sudo vi /var/named/192.168.1.rev示例:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024010101
3600
1800
604800
86400 )
@ 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 www.example.com.
200 IN PTR mail.example.com.四、设置权限
修改文件所有权 sudo chown named:named /var/named/example.com.zone sudo chown named:named /var/named/192.168.1.rev 设置正确权限 sudo chmod 640 /var/named/*.zone sudo chmod 640 /var/named/*.rev
五、检查配置文件语法
检查主配置 sudo named-checkconf /etc/named.conf 检查正向区域文件 sudo named-checkzone example.com /var/named/example.com.zone 检查反向区域文件 sudo named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.rev
六、启动和启用服务
启动服务 sudo systemctl start named 设置开机自启 sudo systemctl enable named 查看服务状态 sudo systemctl status named
七、防火墙配置
开放DNS端口(53/tcp, 53/udp) sudo firewall-cmd --permanent --add-service=dns sudo firewall-cmd --reload 或直接开放端口 sudo firewall-cmd --permanent --add-port=53/tcp sudo firewall-cmd --permanent --add-port=53/udp sudo firewall-cmd --reload
八、客户端测试
测试正向解析 nslookup www.example.com 127.0.0.1 dig @127.0.0.1 www.example.com 测试反向解析 nslookup 192.168.1.100 127.0.0.1 dig -x 192.168.1.100 @127.0.0.1 测试递归查询 dig @127.0.0.1 google.com
九、配置系统使用自己的DNS
编辑/etc/resolv.conf:
sudo vi /etc/resolv.conf
添加:
nameserver 127.0.0.1
注意:在某些系统中,/etc/resolv.conf可能由NetworkManager管理,可以使用以下方法:
对于NetworkManager管理的系统 sudo nmcli con mod "连接名称" ipv4.dns "127.0.0.1" sudo nmcli con up "连接名称"
十、高级配置选项(可选)
在/etc/named.conf 的 options 部分添加:
forwarders {
8.8.8.8;
8.8.4.4;
};
forward only; # 或 forward first;在主服务器的zone配置中添加:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-transfer { 192.168.1.11; }; # 从服务器IP
};在从服务器的配置中添加:
zone "example.com" IN {
type slave;
file "slaves/example.com.zone";
masters { 192.168.1.10; }; # 主服务器IP
};十一、日志查看
查看BIND日志 sudo journalctl -u named -f 或查看特定日志文件 sudo tail -f /var/named/data/named.run
快速验证脚本
创建一个测试脚本dns_test.sh:
#!/bin/bash echo "=== DNS服务器状态 ===" systemctl status named --no-pager echo -e "\n=== 测试本地解析 ===" nslookup localhost 127.0.0.1 echo -e "\n=== 测试正向解析 ===" nslookup www.example.com 127.0.0.1 echo -e "\n=== 测试反向解析 ===" nslookup 192.168.1.100 127.0.0.1 echo -e "\n=== 检查端口监听 ===" netstat -tulpn | grep :53
给脚本执行权限并运行:
chmod +x dns_test.sh ./dns_test.sh
故障排除
1、服务启动失败
# 查看详细错误 sudo named-checkconf sudo journalctl -xe
2、无法解析
# 检查防火墙 sudo firewall-cmd --list-all # 检查SElinux sudo setsebool -P named_write_master_zones on
3、权限问题
# 恢复SELinux上下文 sudo restorecon -Rv /var/named
按照以上步骤,您应该可以在红帽Linux上成功搭建DNS服务器,根据实际需求调整区域文件和配置参数。
文章摘自:https://idc.huochengrm.cn/dns/24147.html
评论
沐雅琴
回复在红帽Linux上搭建DNS服务器,需安装bind软件包,配置bind配置文件,并启动bind服务。