在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
指令正确无误。