在CentOS上搭建DNS服务器是一个相对复杂但非常有意义的任务,DNS(Domain Name System,域名系统)是互联网中的一项基本服务,用于将人类可读的域名转换成计算机可理解的IP地址,以下是详细的步骤和相关配置,帮助你在CentOS上成功搭建一个内网DNS服务器。
一、安装BIND DNS服务器
1、更新系统软件包:
sudo yum update y
2、安装BIND及其工具:
sudo yum install bind bindutils bindchroot y
3、启动并设置开机自启:
sudo systemctl start named sudo systemctl enable named
二、配置BIND DNS服务器
1、修改主配置文件/etc/named.conf
:
sudo nano /etc/named.conf
添加或修改以下内容:
options { listenon port 53 { any; }; listenonv6 port 53 { ::1; }; directory "/var/named"; dumpfile "/var/named/data/cache_dump.db"; statisticsfile "/var/named/data/named_stats.txt"; memstatisticsfile "/var/named/data/named_mem_stats.txt"; recursingfile "/var/named/data/named.recursing"; allowquery { any; }; recursion yes; dnssecenable yes; dnssecvalidation yes; managedkeysdirectory "/var/named/dynamic"; pidfile "/run/named/named.pid"; sessionkeyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
2、创建正向解析区域文件:
sudo nano /etc/named.rfc1912.zones
在文件末尾追加以下内容:
zone "example.com" IN { type master; file "example.com.zone"; allowupdate { none; }; };
创建并编辑example.com.zone
文件:
sudo nano /var/named/example.com.zone
添加以下内容:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023091101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) NS ns1.example.com. A 192.168.1.100 www A 192.168.1.100
3、创建反向解析区域文件:
sudo nano /etc/named.rfc1912.zones
在文件末尾追加以下内容:
zone "1.168.192.inaddr.arpa" IN { type master; file "1.168.192.zone"; allowupdate { none; }; };
创建并编辑1.168.192.zone
文件:
sudo nano /var/named/1.168.192.zone
添加以下内容:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023091101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) NS ns1.example.com. PTR www.example.com.
三、防火墙配置及测试
1、关闭firewalld防火墙并安装iptables:
sudo systemctl stop firewalld.service sudo yum install iptablesservices y sudo systemctl enable iptables sudo systemctl start iptables
2、开放TCP和UDP端口53:
sudo iptables I INPUT p tcp dport 53 j ACCEPT sudo iptables I INPUT p udp dport 53 j ACCEPT sudo service iptables save sudo iptables L n v
3、重启BIND服务:
sudo systemctl restart named
4、测试DNS解析:
在客户端设备上,将DNS设置为指向你搭建的内网DNS服务器的IP地址,可以通过编辑/etc/resolv.conf
文件,将nameserver
的值修改为你的DNS服务器的IP地址,然后使用ping
或nslookup
命令测试域名解析是否正常工作。
ping www.example.com nslookup www.example.com
四、FAQs问答环节
Q1: 如何更改DNS服务器的监听地址?
A1: 你可以通过修改/etc/named.conf
文件中的listenon
指令来更改DNS服务器的监听地址,如果你想让DNS服务器仅监听特定的IP地址,可以将其改为:
listenon port 53 { 192.168.1.100; };
修改后,记得重启BIND服务以使更改生效:
sudo systemctl restart named
Q2: 如果遇到“connection refused”错误怎么办?
A2: “connection refused”错误通常意味着DNS服务器没有正确监听指定的端口或者防火墙规则阻止了连接,请按照以下步骤排查问题:
1、确保BIND服务已经启动并且正在运行:
sudo systemctl status named
2、确保防火墙允许TCP和UDP协议的53端口通过:
sudo iptables L n v | grep dport
3、如果防火墙规则不正确,可以使用以下命令重新配置:
sudo iptables I INPUT p tcp dport 53 j ACCEPT sudo iptables I INPUT p udp dport 53 j ACCEPT sudo service iptables save sudo systemctl restart iptables
4、确保DNS服务器配置文件中的listenon
指令正确无误。