实验环境
| 环境类型 | 具体配置 |
|---|---|
| 操作系统 | CentOS 7 64 位 最小化安装版 |
| 硬件 / 虚拟机 | VMware Workstation(或 VirtualBox)虚拟机,配置双网卡(ens33:内网、ens36:外网) |
| 网络环境 | 内网网段:192.168.2.0/24(可自定义);外网可访问公网(DHCP 自动获取) |
| 软件依赖 | bind-9.x(DNS 服务核心)、bind-chroot(DNS 安全隔离)、bind-utils(DNS 测试工具) |
| 客户端环境 | Windows/Linux 客户端(用于测试 DNS 解析) |
实验目标
- 基础网络配置:完成 CentOS 7 双网卡(内网静态 IP、外网 NAT)的网络配置,确保内网互通且外网可访问。
- DNS 服务部署:安装并配置 bind DNS 服务,实现内网域名的正向解析(域名→IP)和反向解析(IP→域名)。
- 服务验证与调试:掌握 DNS 配置文件语法校验、服务启动 / 自启、防火墙 / SELinux 适配方法,确保 DNS 服务稳定运行。
- 跨端测试:在客户端配置自建 DNS 服务器,验证内网域名解析、反向解析及外网递归解析功能的可用性。
- 问题排查:掌握 DNS 配置、网络服务(network/NetworkManager)冲突、网卡配置异常等常见问题的排查方法。
实验原理
1. DNS 服务核心原理
DNS(域名系统)是互联网的核心服务,作用是将易记忆的域名(如web.centos7.com)转换为机器可识别的 IP 地址(如 192.168.1.101),分为正向解析(域名→IP)和反向解析(IP→域名)。
- BIND:Berkeley Internet Name Domain,是开源的 DNS 服务器软件,也是目前使用最广泛的 DNS 服务实现方案,支持递归查询、区域解析、DNSSEC 等核心功能。
- 区域文件:DNS 服务器的核心配置文件,分为正向区域文件(定义域名与 IP 的映射)和反向区域文件(定义 IP 与域名的映射),包含 SOA(起始授权机构)、NS(域名服务器)、A(地址记录)、PTR(指针记录)等关键记录类型。
2. 双网卡网络原理
- 内网网卡(ens33)配置静态 IP,作为 DNS 服务的对内提供服务的地址,确保内网客户端可访问;
- 外网网卡(ens36)通过 DHCP 获取 IP,实现 DNS 服务器的外网递归解析能力(可访问公网 DNS 获取外网域名解析结果);
- 网关与 DNS 配置:内网网卡指向内网网关,DNS1 配置为本机 IP(优先使用自建 DNS),DNS2 配置为公网 DNS(备用),确保解析优先级和容错性。
3. 服务运行与权限原理
- NetworkManager 与 network 冲突:CentOS 7 中 NetworkManager(动态网络管理)与传统 network 服务(静态网络配置)可能冲突,需择一停用以保证网络服务稳定。
- SELinux 与防火墙:SELinux 会限制 DNS 服务对配置文件的访问权限,防火墙默认拦截 53 端口(DNS 服务端口,UDP/TCP 均需放行),需针对性配置以确保服务可访问。
- 递归查询:DNS 服务器开启递归查询后,当解析外网域名(如www.baidu.com)时,会向公网根 DNS / 顶级 DNS 逐级查询,最终返回结果给客户端,实现外网域名解析能力。
4. 解析流程原理
- 正向解析:客户端向 DNS 服务器发起域名查询请求→DNS 服务器匹配正向区域文件中的 A 记录→返回对应 IP 地址;
- 反向解析:客户端向 DNS 服务器发起 IP 查询请求→DNS 服务器匹配反向区域文件中的 PTR 记录→返回对应域名;
- 递归解析:若查询的域名不在内网区域文件中,DNS 服务器自动向公网 DNS 发起查询,将结果返回给客户端。
实验步骤
一、配置内网静态固定 IP和外网nat
1.配置目标
我的虚拟机上有两个网卡,分别是ens33、ens36分别是负责内网连接和外网连接的网卡
2.配置过程
2.1查看网卡名称和IP信息
ip addr

2.2修改内网网卡配置文件
nano /etc/sysconfig/network-scripts/ifcfg-ens33 #修改内网网卡
完整配置模板
TYPE=Ethernet
BOOTPROTO=static # static静态,dhcp自动
NAME=ens33
DEVICE=ens33
ONBOOT=yes # 开机自启
IPADDR=192.168.100.133 # 固定本机IP
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.100.1 # 网关
DNS1=192.168.100.133 #内网的dns服务器就是我们内网网卡的ip
DNS2=114.114.114.114 # 公网备用DNS

2.3修改外网网卡配置
nano /etc/sysconfig/network-scripts/ifcfg-ens33 #修改内网网卡
完整配置模板
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens36
DEVICE=ens36
ONBOOT=yes
DNS1=114.114.114.114
DNS2=8.8.8.8

2.5配置完成后重启网络服务
systemctl restart network
2.6测试网卡配置是否联通
ping 192.168.2.1 #这个地址是我的内网网关地址
ping www.baidu.com #测试外网连通性

3.处理修改网卡过程中配置常见问题:
1.ping外网ping不同,原因是网卡文件没有配置好
[root@localhost network-scripts]# ping www.baidu.com
ping: www.baidu.com: Name or service not known
原因是很可能是网卡文件没有配置好
2.配置完后重启网络服务发现网卡没有地址,我这里是ens36网卡
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:ec:c3:29 brd ff:ff:ff:ff:ff:ffinet 192.168.100.134/24 brd 192.168.100.255 scope global dynamic ens33valid_lft 1752sec preferred_lft 1752secinet6 fe80::20c:29ff:feec:c329/64 scope link valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 00:0c:29:ec:c3:1f brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:5d:92:a1 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:5d:92:a1 brd ff:ff:ff:ff:ff:ff
[root@localhost network-scripts]#
- 报错解释信息如下:
qdisc noop:没有配置文件,系统不会自动拉起这块网卡
state DOWN:网卡物理关闭、未启用
-
原因是:
这里你的这个网卡可能是第一次开机后加的,后加的网卡很可能会没有生成配置文件。解决绝方法复制现有网卡模板修改成该网卡的配置,再重启网络。或者直接重装在第一次开机前就在设置加上这个网卡。

3.network工具与其他出现冲突
[root@localhost centos7]# systemctl restart network
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
最常见问题:NetworkManager 与 network 冲突
方案一:停用 NetworkManager,只用 network
# 停止并禁用NM
systemctl stop NetworkManager
systemctl disable NetworkManager
# 重启网络
systemctl restart network
方案二:停用 network,只用 NetworkManager
systemctl stop network
systemctl disable network
# 用nmcli配置静态IP,不再操作ifcfg文件
nmcli connection show
二、安装 DNS 服务 bind
1.配置目标
安装 bind 与相关工具,以及配置相关文件,以便局域网的DNS可以解析局域网内主机的域名请求
2.DNS配置过程
2.1安装bind相关工具
yum install bind bind-chroot bind-utils -y
2.2配置主配置文件/etc/named.conf
nano /etc/named.conf
修改关键参数(允许所有客户端查询,监听本机所有网卡):
options {listen-on port 53 { any; }; # 监听所有网卡,不只是127.0.0.1listen-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; }; # 允许任意内网机器使用DNSrecursion yes; # 开启递归查询(外网解析)dnssec-enable yes;dnssec-validation yes;path "/etc/named.root.key";
};# 正向、反向区域文件声明,末尾添加自定义域名
zone "centos7.com" IN {type master;file "centos7.com.zone";allow-update { none; };
};zone "2.168.192.in-addr.arpa" IN {type master;file "192.168.2.zone";allow-update { none; };
};
注意:centos7.coml替换你的根域名;2.168.192这里也要填写为你主机的IP网段(注意这里的格式倒序)。
2.3创建正向解析区域文件
cp /var/named/named.localhost /var/named/centos7.com.zone
chown named:named /var/named/centos7.com.zone
nano /var/named/centos7.com.zone
注意:这里的文件要和你上面的输入的名字保持一致
区域文件内容:
$TTL 1D
@ IN SOA dns.centos7.com. admin.centos7.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumIN NS dns.centos7com. ; 声明域名服务器NS记录
ns IN A 192.168.1.100 ; DNS服务器本机IP;自定义主机解析记录
web IN A 192.168.1.101 ; web服务器A记录
ftp IN A 192.168.1.102
这里我这几个域名对应的网站upload.centos7.con等都在我的这个主机上,这个映射自己根据情况来写。左侧为顶级域名右侧为映射的IP

2.4创建反向解析区域文件(IP 反查域名)
cp /var/named/named.loopback /var/named/192.168.2.zone
chown named:named /var/named/192.168.2.zone
nano /var/named/192.168.2.zone
反向文件内容:
$TTL 1D
@ IN SOA dns.centos7.com. admin.centos7.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimumIN NS dns.centos7.com.
100 IN PTR dns.centos7.com.
101 IN PTR web.centos7.com.
102 IN PTR ftp.centos7.com.
注意这里的100,101,102为主机地址的主机位

2.5校验配置语法(关键,报错直接启动失败)
# 校验主配置
named-checkconf
# 校验正向区域
named-checkzone centos7.com /var/named/centos7.com.zone
# 校验反向区域
named-checkzone 2.168.192.in-addr.arpa /var/named/192.168.2.zone

2.6启动并开机自启 named 服务
systemctl start named
systemctl enable named
systemctl status named
3.防火墙和关闭 SELinux配置
放行防火墙 DNS 端口(53 UDP/TCP)
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
# 查看放行规则
firewall-cmd --list-services
关闭 SELinux(否则解析权限报错)
临时关闭:
setenforce 0
永久关闭:
vi /etc/selinux/config
# 修改 SELINUX=disabled
4.DNS 服务器测试
- 本机测试
# 解析内网域名
nslookup pikachu.centos7.com 127.0.0.1
dig pikachu.centos7.com @127.0.0.1
# 反向解析IP
nslookup 192.168.2.128 127.0.0.1
# 测试外网递归解析
nslookup www.baidu.com 127.0.0.1

- 客户端使用自建 DNS
因为我虚拟主机的内网网卡为VMnet1,所以该主机用这个网卡和虚拟机信息交流

因此我要配置这个网卡的dns,在高级网络设置中对VMnet1进行配置

将该网卡的首选DNS改为DNS服务器的主机地址

利用命令来测试一下
nslookup pikachu.centos7.com

这里就是完整的配置教程