Linux——DNS服务器正向解析搭建教程
系统:CentOS7
1. 安装BIND服务程序(安装YUM服务可看上一篇)
在 CentOS 上使用 yum
安装BIND服务程序:
sudo yum install bind -y
2. 配置正向解析
编辑主配置文件 /etc/named.conf
- 将
listen-on
和allow-query
改为any
,使DNS服务器监听所有接口,并允许所有主机查询。
配置示例:
options {
listen-on port 53 { any; }; # 监听所有网络接口
allow-query { any; }; # 允许所有主机进行查询
recursion yes; # 启用递归查询
};
定义正向解析区域 /etc/named.rfc1912.zones
- 添加域名的区域配置,并指定存放数据文件的路径。
allow-update
参数可根据需求设置为none
或允许更新。
配置示例:
zone "example.com" IN {
type master;
file "xample.com.zone";
allow-update { none; }; # 禁止动态更新
};
3. 创建正向解析数据文件
复制模板文件并编辑
-
你可以从系统自带的
named.localhost
模板文件复制一份新的区域数据文件:sudo cp -a /var/named/named.localhost /var/named/example.com.zone
<aside> 💡
在配置 named
服务时,务必使用 cp -a
复制关键配置文件,确保文件的权限和所有者不发生变化,避免服务无法正常运行。
问题原因:
复制文件时,如果没有使用 cp -a,文件的所有者和权限信息不会被保留,导致 named 进程(以 named 用户运行)无法访问文件。 比如从 root 用户复制出来的文件,其所有者默认为 root,这会导致 named 用户没有权限读取该文件,从而导致 DNS 解析服务失败。 解决办法:
使用 cp -a 来复制文件,以确保保留文件的所有者、权限、时间戳等信息。 cp -a 可以避免因权限和所有权变化导致的服务访问问题。
</aside>
编辑数据文件 /var/named/example.com.zone
- 修改内容以匹配你的域名和IP地址:
示例:
$TTL 86400
@ IN SOA example.com. root.example.com. (
2023100801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns.example.com.
ns IN A 192.168.1.10
www IN A 192.168.1.20
4. 防火墙和安全配置
清空 iptables
规则并关闭 firewalld
-
清空
iptables
的规则以确保防火墙不会阻止DNS流量:sudo iptables -F
-
停止并禁用
firewalld
服务,以确保防火墙不会干扰DNS请求:sudo systemctl stop firewalld.service sudo systemctl disable firewalld.service
关闭 SELinux
-
临时关闭 SELinux(仅在本次系统运行期间有效):
sudo setenforce 0
-
或者你也可以通过编辑
/etc/selinux/config
文件永久关闭 SELinux:sudo nano /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled
5. 重新启动BIND服务并配置为开机启动
重新启动BIND服务并设置为开机自启:
sudo systemctl restart named (启动服务)
sudo systemctl enable named (改为开机自启)
6. 设置网卡为仅主机模式
如果使用宿主机进行测试,将虚拟机的网卡设置为“仅主机模式(Host-Only)”,这样虚拟机和宿主机在同一网络环境中。
- 修改虚拟机的网络设置:
- 在虚拟机软件(如 VirtualBox 或 VMware)中,找到虚拟机的网络设置。
- 将虚拟机网卡的模式修改为 Host-Only Adapter(仅主机模式),使虚拟机和宿主机处于同一网络环境。
- 确保虚拟机和宿主机在同一子网中:
- 确认虚拟机和宿主机的 IP 地址在同一子网中。例如,虚拟机的 IP 地址为
192.168.56.101
,宿主机的 IP 地址为192.168.56.1
,确保它们可以通过同一子网进行通信。
- 确认虚拟机和宿主机的 IP 地址在同一子网中。例如,虚拟机的 IP 地址为
- 设置 DNS 解析:
- 修改宿主机的 vment1 网卡(对应虚拟机的 Host-Only 模式)的 DNS 地址,设置为虚拟机的 IP 地址。例如,将宿主机的 vment1 网卡的 DNS 设置为
192.168.56.101
(虚拟机的 IP 地址)。
- 修改宿主机的 vment1 网卡(对应虚拟机的 Host-Only 模式)的 DNS 地址,设置为虚拟机的 IP 地址。例如,将宿主机的 vment1 网卡的 DNS 设置为
- 禁用其他网卡(可选):
-
为了避免其他网络干扰,可以暂时禁用宿主机的其他网卡,确保仅通过 vment1 网卡(Host-Only 模式)进行通信和测试。
-
如果不想禁用其他网卡,可以在执行 DNS 查询时指定 DNS 服务器。使用
nslookup
工具时,通过命令指定虚拟机的 IP 地址作为 DNS 服务器:例如:nslookup <域名> <虚拟机的IP地址>
nslookup example.com 192.168.56.101
-
测试说明:
- 设置完成后,使用宿主机进行网络测试,如 Ping 或 nslookup,确保虚拟机和宿主机的网络通信顺畅。
- 如不禁用其他网卡,使用 nslookup 时明确指定 DNS 服务器以避免干扰。
7. 测试DNS解析
使用 nslookup
或 dig
工具测试
在虚拟机或宿主机上,使用 nslookup
或 dig
命令测试 DNS 解析:
nslookup www.example.com #需禁用其他使用中的网卡,如无线网卡、以太网卡
nslookup www.example.com 192.168.1.10 #明确指定DNS服务器
该命令将会发送域名 www.example.com
的解析请求到你的DNS服务器(IP:192.168.1.10),并返回相应的IP地址。