DHCP服务配置和DNS域名解析
DHCP 服务介绍
在大型网络中,系统静态分配IP地址面临问题:
- 确保不要同时在多个系统上使用同一个地址。
- 部署新系统通常需要手动分配其IP地址。在云环境中,实例的网络是自动化配置的。
动态主机配置协议(DHCP-Dynamic Host Configuration Protocol)提供了一种自动配置网络参数的方法,例如IP地址,默认网关,DNS服务器和域或NTP服务器。在网络中部署DHCP服务器,您可以集中控制这些参数。
DHCP有两种协议:
- 用于IPv4网络的 DHCPv4。
- 用于IPv6网络的 DHCPv6。
本文只介绍DHCPv4。
部署 DHCP 服务器
要配置DHCPv4服务器,请首先使用ip addr
命令确认您的网络接口配置是否指定了BROADCAST地址。
bash
[root@server ~ 21:23:01]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::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 1000
link/ether 00:0c:29:e1:56:ec brd ff:ff:ff:ff:ff:ff
inet 10.1.8.10/24 brd 10.1.8.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee1:56ec/64 scope link
valid_lft forever preferred_lft forever
服务器必须具有静态IP地址。
安装 DHCP 软件
bash
# 安装软件包
[root@server ~ 21:24:44]# yum install -y dhcp
# 配置防火墙,放行dhcp服务
[root@server ~ 21:25:43]# firewall-cmd --add-service=dhcp
[root@server ~ 21:26:01]# firewall-cmd --add-service=dhcp --permanent
配置 DHCP 服务器
dhcpd服务使用/etc/dhcp/dhcpd.conf
配置文件。 dhcp软件包提供/usr/share/doc/dhcp-*/dhcpd.conf.example 配置文件示例。
bash
[root@server ~ 21:26:13]# /bin/cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@server ~ 21:27:22]# vim /etc/dhcp/dhcpd.conf
典型的DHCP配置示例:
bash
subnet 10.1.8.0 netmask 255.255.255.0 {
range 10.1.8.101 10.1.8.130;
option domain-name-servers 223.5.5.5;
option domain-name "xiexin.cloud";
option routers 10.1.8.2;
option broadcast-address 10.1.8.255;
default-lease-time 600;
max-lease-time 7200;
}
配置说明:
- authoritative,指示服务器对其所管理的子网具有权威性。
- subnet,提供的子网详。
- range,指定服务器在该范围内分配IP地址。
- option routers,指定服务器提供默认网关地址。
- option domain-name-servers,指定服务器提供DNS名称服务器。
- option domain-search,指定服务器提供DNS域搜索列表。
- default-lease-time,提供网络信息默认租期,如果客户端不要求任何特定的租期。单位秒。
- max-lease-time,指示服务器可以从客户端请求接受的最大租期。单位秒。
客户端系统上的NetworkManager使用domain-name-servers 和domain-search 更新resolv.conf 文件中的nameserver 和search参数。
验证 DHCP 配置
bash
# 验证配置文件语法
[root@server ~ 21:32:05]# dhcpd -t
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
启用并启动服务
bash
# 启用并启动服务
[root@server ~ 21:35:19]# systemctl enable dhcpd --now
# 查看服务状态
[root@server ~ 21:35:53]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2025-08-06 21:21:04 CST; 14min ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 1023 (dhcpd)
Status: "Dispatching packets..."
CGroup: /system.slice/dhcpd.service
└─1023 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pi...
........
配置 DHCP 客户端
bash
# 添加一个自动获取ip连接,假设网卡设备名为ens192
[root@server ~ 21:38:13]# nmcli connection add con-name dynamic type ethernet ifname ens192
[root@server ~ 21:38:29]# nmcli connection up dynamic
# 验证
[root@client ~ 21:38:36]# ip addr show ens192
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:26:13:b5 brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 10.1.8.101/24 brd 10.1.8.255 scope global dynamic noprefixroute ens192
valid_lft 597sec preferred_lft 597sec
inet6 fe80::95db:2216:1a36:615/64 scope link noprefixroute
valid_lft forever preferred_lft forever
基于 MAC 地址预留IP地址
在配置文件中,host声明可以将MAC地址绑定到IP地址。 此配置对于始终为特定系统的网络接口提供相同的IP地址特别有用,尤其是Web或数据库系统之类的服务器。
客户端MAC地址查看
bash
[root@client ~ 21:38:56]# ip link show ens192
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:26:13:b5 brd ff:ff:ff:ff:ff:ff
altname enp11s0
在以下示例中,服务器始终为MAC地址是00:0c:29:26:13:b5
的系统分配10.1.8.20地址。
在/etc/dhcp/dhcpd.conf
最后添加如下内容:
bash
host client.linux.fun {
hardware ethernet 00:0c:29:26:13:b5;
fixed-address 10.1.8.30;
}
重启服务
bash
[root@server ~ 21:39:11]# systemctl restart dhcpd
客户端验证
bash
# 激活连接
[root@client ~ 21:39:23]# nmcli connection up dynamic
# 验证
[root@client ~ 21:39:29]# ip addr show ens192
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:26:13:b5 brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 10.1.8.30/24 brd 10.1.8.255 scope global dynamic noprefixroute ens192
valid_lft 245sec preferred_lft 245sec
inet6 fe80::95db:2216:1a36:615/64 scope link noprefixroute
valid_lft forever preferred_lft forever
DNS 服务介绍
DNS 服务介绍
DNS(Domain Name System,域名系统)服务是一种用于将域名转换为IP地址的分布式数据库服务。它是互联网的核心服务之一,使得用户能够通过易于记忆的域名来访问网站和其他网络服务,而无需记住复杂的IP地址。
DNS 也是一个存储网络主机和资源目录的分层命名系统。 目录中的信息将网络名称映射到不同资源记录。
- 根域:DNS层次结构最顶层,使用独立的"."表示。
- 顶级域:DNS层次结构第二层,例如**.com**,.net和**.org**等域。
- 二级域:DNS层次结构第三层,例如**laoma.cloud **和 redhat.com等域。由各个组织使用。
- 以此类推。

学习DNS层次结构前,首先要搞清楚DNS层次结构中一些术语,例如domain,subdomain和zone等。
Domain
domain 是 resource records 的集合,该集合以通⽤名结尾,表示 DNS 命名空间的整个⼦树,如 laoma.cloud。
top-level domain (TLD- 顶级域)由 Internet Assigned Numbers Authority(IANA-互联网号码分配机构)管理,并负责委派顶级域。
常见的TLD类型:
- Generic TLDs(gTLD-通用顶级域名),最初是按主题组织的,包括.com,.edu和.net等。
- Country code TLDs(ccTLD-国家代码顶级域名),根据ISO 3166-1标准在国家范围上组织的,并包括.us,.uk,.cn和.ru之类的域。
Subdomain
Subdomain 是另一个域的完整子树的域。 在讨论两个域之间的关系时使用此术语。 例如,lab.laoma.cloud 是laoma.cloud 的子域,而laoma.cloud 是**.com的子域。 我们也可以将 laoma.cloud称为第二级域,并将lab.laoma.cloud**称为第三级域。
Zone
Zone是特定名称服务器直接负责的域。 它可能是整个域,也可能只是域的一部分。Zone可以将部分或全部子域都委派给另一个名称服务器或多个名称服务器。
例如,root名称服务器对root zone具有权威性,但它们将.com域的职责委派给其他名称服务器,这些名称服务器为.com区域提供权威性应答。 这些服务器还可以继续将责任委派给其他名称服务器。
DNS 查询
DNS 查询分为以下几种类型:

DNS 资源记录
资源记录(Resource Record)是 DNS 数据库中的基本数据单位,用于描述域名与各种信息之间的关系。

主机和资源记录
⼀个主机,无论是客户端还是服务器,都具有以下 DNS 资源记录:
-
⼀个或多个A或AAAA记录
-
用于将其IP地址反向映射到名称的PTR记录
-
⼀个或多个CNAME记录(可选)
DNS zone 还具有以下资源记录:
-
唯一的 SOA 记录
-
每个权威名称服务器的 NS 记录
-
⼀个或多个MX记录(可选)
-
用于在域中查找服务的⼀个或多个SRV记录(可选)
配置权威名称服务器
权威名称服务器架构
什么是权威名称服务器?
权威名称服务器 是 DNS 系统中的核心角色,负责一个或多个域(zone)的最终解析权,它可以:
-
保存域名 → IP 的真实记录(A、CNAME 等)
-
对该域的查询给出权威答案
-
不会再向其他服务器转发请求
权威 DNS 服务器的基本组成
主服务器(Primary / Master)
-
也叫"权威源"。
-
管理员手动编写 zone 文件,保存所有资源记录。
-
是域的配置和数据中心。
-
通常使用 type master 配置。
从服务器(Secondary / Slave)
-
通过 zone transfer(区域传送) 从主服务器同步数据。
-
不直接编辑 zone 文件,只读并响应查询。
-
起到容灾备份、负载均衡作用。
-
通常使用 type slave 配置。
安装 BIND
通过安装bind 软件包来安装BIND。 名称服务器本身作为named服务运行。 bind包将HTML和PDF格式的BIND文档在安装在/usr/share/doc/bind/目录。
bash
[root@server ~ 21:54:49]# yum install -y bind bind-utils
软件包说明:
- bind,服务器软件包。
- bind-utils,bind工具软件包。
bind软件包默认将服务配置为基本的递归缓存名称服务器。 它被配置为localhost 、相关域和地址的primary服务器,以减轻根名称服务器的负担。 此默认配置还限制了对本地主机上程序的访问。 它侦听IPv4和IPv6环回接口的端口53 UDP/TCP(127.0.0.1和:: 1)上的连接。
配置 BIND
named主要配置文件是**/etc/named.conf**。 该文件控制BIND的基本操作,由root 用户(named 组)拥有,具有八进制权限0640 ,并且具有named_conf_t SELinux类型。
配置文件还指定了每个区域的配置文件位置,这些文件通常保存在**/var/named**中。
配置DNS服务器需要执行以下步骤:
- 配置地址匹配列表。
- 配置named侦听的IP地址。
- 配置客户端的访问控制。
- 配置zone。
- 编写区域文件。
定义地址匹配列表
在/etc/named.conf文件的开头,可以使用acl指令定义地址匹配列表。 acl指令不是用于控制客户端对服务器的访问,而是使用它们来定义IP地址和网络列表。
它们提供别名,可以与访问控制指令和其他配置选项一起使用,并使更新配置文件更加容易。
条目可以是完整的IP地址或网络,用尾点(10.1.8.)或CIDR表示法(192.168.0/24或2001:db8::/32)表示,也可以使用先前定义的地址匹配列表的名称。
请考虑以下ACL定义:
bash
[root@server ~ 21:54:52]# vim /etc/named.conf
acl trusted-nets { 192.168.10.0/24; 192.168.20.0/24; };
acl classroom { 10.1.8.0/24; };
在其值中使用classroom的任何指令都将与10.1.8.0/24网络和192.168.1.21中的主机匹配。acl语句定义的地址集可以被多个指令引用。
named中内置了四个预定义的ACL:
ACL | Description |
---|---|
none | Matches no hosts. |
any | Matches all hosts. |
localhost | Matches all IP addresses of the DNS server. |
localnets | Matches all hosts from the DNS server's local subnets. |
配置 named 侦听的IP地址
我们可以在/etc/named.conf文件options 块中指定许多全局设置。listen-on 和listen-on-v6指令,指定了命名监听的接口和端口。
- listen-on选项采用以分号分隔的IPv4地址列表。
- listen-on-v6使用IPv6地址。
bash
[root@server ~ 21:56:35]# vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1;10.1.8.10; };
listen-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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost;10.1.8.0/24; };
.......
配置 zone
bash
[root@server ~ 22:00:23]# vim /etc/named.conf
......
# 最后添加如下内容
zone "xiexin.cloud" IN {
type master;
file "xiexin.cloud.zone";
};
zone "8.1.10.in-addr.arpa" IN {
type master;
file "10.1.8.zone";
};
配置说明:
- type,指定服务器角色。
- file ,指定相对路径名。 相对路径由 options 块中的 directory 指令设置。
创建区域文件
辅助区域文件应保存在/var/named/slaves中。辅助服务器启动时,会将其缓存的区域版本与主服务器上的当前版本进行比较:如果区域文件版本是最新的,则使用该区域文件; 如果区域文件版本不是最新的或文件不存在,则named执行区域传输并将结果缓存在该文件中。
BIND 应该能够读取这些区域文件,但不能写入它们。 这些文件应归root 用户和named组所有,以便守护程序在某种程度上受到损害时不能更改它们。
bash
[root@server ~ 22:02:52]# touch /var/named/xiexin.cloud.zone /var/named/10.1.8.zone
[root@server ~ 22:02:59]# chmod 640 /var/named/*.zone
[root@server ~ 22:03:10]# chown root:named /var/named/*.zone
# 如果系统开启了selinux功能,执行下面命令设置文件标签
[root@server ~ 22:03:24]# chcon -t named_zone_t /var/named/*.zone
添加记录
正向记录,将名称映射到IP地址和其他记录。该区域文件必须具有:
- SOA记录。
- 每个公用名称服务器的NS记录。
- 该区域的其他A,AAAA,CNAME,MX,SRV和TXT记录。
示例:xiexin.cloud域
bash
[root@server ~ 22:03:28]# vim /var/named/xiexin.cloud.zone
bash
$TTL 3600
@ IN SOA dns.xiexin.cloud. root.xiexin.cloud. (
42 ; serial
3H ; secondary refresh
15M ; secondary retry
1W ; secondary timeout
15M ; minimum cache TTL for negative answers
)
IN NS dns.xiexin.cloud.
dns IN A 10.1.8.10
server IN A 10.1.8.10
student IN CNAME client.xiexin.cloud.
client IN A 10.1.8.11
www 30 IN A 10.1.8.200
@ IN MX 10 mail.xiexin.cloud.
mail IN A 10.1.8.253
示例说明:
- @字符代表区域的名称,避免重复键入,并且在某些情况下允许重复使用。
- 区域文件中的SOA记录与前面的示例中的SOA记录是等效的。
- 如果记录的名称为空,则其值与前面的记录相同。
因此,在前面的示例中:
- 第一个记录是laoma.cloud.的SOA记录
- 接下来的记录是laoma.cloud.的NS记录
- 然后有一个dns的A记录。
- 然后有一个server的A记录。
- 然后有一个student的CNAME记录。
- 然后有一个client的A记录。
- 然后有一个域的MX记录。
- 然后有一个mail的A记录。
任何不以点号结尾的名称均被视为部分主机名,应将区域名称添加为完全合格的域名。 换句话说,server等效于server.laoma.cloud.
。
反向记录,将IP地址映射到主机名。该区域文件必须具有:
- SOA记录
- NS记录
- PTR记录。
示例:8.1.10.inaddr.arpa区域
bash
[root@server ~ 22:05:16]# vim /var/named/10.1.8.zone
bash
$TTL 3600
@ IN SOA dns.xiexin.cloud. root.xiexin.cloud. (
42 ; serial
3H ; secondary refresh
15M ; secondary retry
1W ; secondary timeout
15M ; minimum cache TTL for negative answers
)
IN NS dns.xiexin.cloud.
10 IN PTR server.xiexin.cloud.
10 IN PTR dns.xiexin.cloud.
11 IN PTR client.xiexin.cloud.
11 IN PTR student.xiexin.cloud.
200 IN PTR www.xiexin.cloud.
253 IN PTR mail.xiexin.cloud.
IP地址的"名称"不需要包括其余的域名,1代替1.8.1.10.in-addr.arpa.。
运行 BIND 和 客户端测试
bash
# 启动服务
[root@server named 15:14:20]# systemctl enable named --now
[root@client ~ 15:29:46]# nmcli connection delete ens36-dhcp
成功删除连接 "ens36-dhcp" (e0d06ed6-eaa6-49fd-93a3-a755c7dd51ce)。
# 测试
# 方式1:配置客户端 DNS
[root@client ~ 15:30:08]# nmcli connection modify ens33 ipv4.dns 10.1.8.10
[root@client ~ 15:30:35]# nmcli connection up ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/7)
[root@client ~ 15:30:41]# cat /etc/resolv.conf
# Generated by NetworkManager
search xiexin.cloud
nameserver 10.1.8.10
[root@client ~ 15:36:56]# ping student
PING client.xiexin.cloud (10.1.8.11) 56(84) bytes of data.
64 bytes from client.xiexin.cloud (10.1.8.11): icmp_seq=1 ttl=64 time=0.009 ms
64 bytes from client.xiexin.cloud (10.1.8.11): icmp_seq=2 ttl=64 time=0.031 ms
# 方式2:dig工具
[root@client ~ 16:12:38]# yum install -y bind-utils
[root@client ~ 16:15:18]# dig @10.1.8.10 student.xiexin.cloud.
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> @10.1.8.10 student.xiexin.cloud.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62303
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;student.xiexin.cloud. IN A
;; ANSWER SECTION:
student.xiexin.cloud. 3600 IN CNAME client.xiexin.cloud.
client.xiexin.cloud. 3600 IN A 10.1.8.11
;; AUTHORITY SECTION:
xiexin.cloud. 3600 IN NS dns.xiexin.cloud.
;; ADDITIONAL SECTION:
dns.xiexin.cloud. 3600 IN A 10.1.8.10
;; Query time: 0 msec
;; SERVER: 10.1.8.10#53(10.1.8.10)
;; WHEN: 三 8月 06 16:16:39 CST 2025
;; MSG SIZE rcvd: 118
额外实践:域名解析与 Apache 网站部署
操作环境及设备
bash
要有一个自己的域名,比如:xiexin.cloud
还要有公网服务器
远程工具xshell
默认端口
网站根目录 /www/xiexin.cloud
操作步骤
- 域名解析配置

-
使用 Xshell 连接服务器
-
在服务器中创建网站目录与首页文件
bash
cd /www
mkdir xiexin.cloud
echo 'Welcome to xiexin site' > xiexin.cloud/index.html
/www/xiexin.cloud/是你的网站目录,index.html是首页文件
- 配置 Apache 虚拟主机
bash
# 首先进入配置目录
cd /etc/httpd/conf.d/
vim vhost-xiexin.cloud.conf
.....
<VirtualHost *:80>
DocumentRoot "/www/xiexin.cloud"
ServerName www.yuxb.cloud
<Directory "/www/xiexin.cloud">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
</VirtualHost>
- 重启 Apache 服务
bash
systemctl restart httpd
- 浏览器访问测试
bash
访问地址:www.xiexin.cloud:xxx