目录

个人用云计算学习笔记-16DHCP-服务器

个人用云计算学习笔记 –16(DHCP 服务器)

DHCP 服务器知识点整理

一、DHCP 服务基础

1. 服务背景与作用

  • 静态 IP 分配问题:在大型网络中,静态分配 IP 需避免地址重复,且新系统需手动配置,云环境中难以满足自动化需求。
  • DHCP 核心功能:动态主机配置协议(DHCP)自动分配网络参数,包括 IP 地址、默认网关、DNS 服务器、域及 NTP 服务器,实现集中化管理。
  • 协议版本:分为用于 IPv4 的 DHCPv4 和用于 IPv6 的 DHCPv6,本文重点讲解 DHCPv4。

2. DHCP 通信过程

DHCP 客户端与服务器的交互分为初始分配和租约续约两个阶段,共 6 个关键步骤:

阶段步骤详细描述
初始 IP 分配1. 客户端发送 DISCOVER客户端通过网卡发送DHCPDISCOVER数据包到广播地址255.255.255.255,因路由器默认不转发该广播,服务器需与客户端同物理网络(或配置 DHCP 中继)
2. 服务器响应 OFFER服务器接收DHCPDISCOVER后,发送DHCPOFFER数据包,包含自身 IP、分配给客户端的 IP、租约期限及其他网络参数(网关、DNS 等)
3. 客户端发送 REQUEST客户端收到DHCPOFFER后,广播DHCPREQUEST数据包,指定接受某台服务器的 IP(解决多服务器环境下的选择问题)
4. 服务器发送 ACK服务器接收DHCPREQUEST后,发送DHCPACK数据包,确认客户端对 IP 的独占使用权至租约到期
租约续约5. 客户端发起续约请求租约到期前,客户端发送DHCPREQUEST(renew)数据包请求续约
6. 服务器确认续约服务器响应DHCPACK(renew)数据包,同意客户端继续使用 IP(共 3 次续约机会)

https://i-blog.csdnimg.cn/direct/bbefc54d10724511b0455fbdad1e44bc.png

3. 多 DHCP 服务器机制

  • 部署建议:同一物理网络不建议部署多台 DHCP 服务器,单台即可满足需求。

  • 多服务器交互:

    • 客户端可能收到多台服务器的DHCPOFFER,仅接受一台并通过DHCPREQUEST指定,其他服务器释放预留 IP。
    • 服务器权威性影响续约:非权威服务器忽略未知 IP 的DHCPREQUEST;权威服务器若发现 IP 不在自身管理范围,会发送DHCPNAK,客户端需重新申请 IP。
    • 默认配置:DHCP 服务器默认非权威,避免接管其他权威服务器的 IP。

二、DHCP 服务器部署与配置

1. 部署前提

  • 网络接口要求:使用ip addr命令确认服务器网络接口配置BROADCAST地址(例:ens160接口的brd 10.1.8.255)。
  • 静态 IP 要求:DHCP 服务器必须配置静态 IP,避免自身 IP 动态变化导致服务异常。

2. 安装与防火墙配置

# 1. 安装DHCP服务包
[root@server~]# dnf install -y dhcp-server

# 2. 防火墙放行DHCP服务(临时+永久)
[root@server~]# firewall-cmd --add-service=dhcp
[root@server~]# firewall-cmd --add-service=dhcp --permanent

3. 核心配置(/etc/dhcp/dhcpd.conf)

(1)配置文件来源
  • 系统提供示例文件:

    /usr/share/doc/dhcp-*/dhcpd.conf.example

    可复制为正式配置文件:

    [root@server~]# cp /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
(2)典型配置示例与说明
[root@server ~ 10:25:51]# vim /etc/dhcp/dhcpd.conf
# 域名
option domain-name "qy.cloud";

# DNS 服务器
option domain-name-servers 223.6.6.6, 223.5.5.5;

# 默认租约时间
default-lease-time 600;

# 最大租约时间
max-lease-time 7200;

# 日志级别
log-facility local7;

# 配置 DHCP 池
subnet 10.1.8.0 netmask 255.255.255.0 {
  range 10.1.8.101 10.1.8.130;
  #option domain-name-servers ns1.internal.example.org;
  #option domain-name "internal.example.org";
  option routers 10.1.8.2;
  option broadcast-address 10.1.8.255;
  #default-lease-time 600;
  #max-lease-time 7200;
}

# 根据Mac地址配置固定IP
host client.laoma.cloud {
  hardware ethernet 00:0c:29:2f:9a:06;
  fixed-address 10.1.8.100;
}

4. 配置验证与服务启停

# 1. 验证配置文件语法(返回0表示无错误)
[root@server~]# dhcpd -t
[root@server~]# echo $?  # 检查返回值

# 2. 启用并启动服务
[root@server~]# systemctl enable dhcpd --now

# 3. 查看服务状态
[root@server~]# systemctl status dhcpd

三、DHCP 客户端配置与验证

1. 客户端配置(Linux 系统)

# 1. 添加自动获取IP的网络连接(指定接口ens192)
[root@client~]# nmcli connection add con-name dynamic type ethernet ifname ens192

# 2. 激活该连接
[root@client~]# nmcli connection up dynamic

2. 客户端验证

# 查看接口IP配置(确认获取到DHCP分配的IP)
[root@client~]# ip addr show ens192

# 示例输出(关键信息):
# inet 10.1.8.150/24 brd 10.1.8.255 scope global dynamic noprefixroute ens192
# valid_lft 597sec preferred_lft 597sec(租约剩余时间)

四、基于 MAC 地址的 IP 预留

1. 应用场景

为特定设备(如 Web 服务器、数据库服务器)分配固定 IP,确保其网络地址稳定。

2. 配置步骤

(1)获取客户端 MAC 地址
[root@client~]# ip link show ens192  # 查看ens192接口MAC
# 示例输出:link/ether 00:0c:29:ba:fd:88 brd ff:ff:ff:ff:ff:ff
(2)配置 IP 预留(修改服务器 dhcpd.conf)

/etc/dhcp/dhcpd.conf末尾添加:

host client.linux.fun {  # 自定义主机名
    hardware ethernet 00:0c:29:ba:fd:88;  # 客户端MAC地址
    fixed-address 10.1.8.30;              # 预留的固定IP
}
(3)重启服务与验证
# 服务器重启DHCP服务
[root@server~]# systemctl restart dhcpd

# 客户端重新激活连接并验证
[root@client~]# nmcli connection up dynamic
[root@client~]# ip addr show ens192  # 确认IP为10.1.8.30

五、DHCP 中继服务器

1. 中继作用

解决 DHCP 客户端与服务器跨广播域(如不同子网、VLAN)的通信问题:客户端广播的DHCPDISCOVER会被三层设备丢弃,中继代理可转发 DHCP 报文。

2. 工作原理

中继在客户端与服务器间转发报文,将客户端的广播报文转为单播发送给服务器,服务器响应的单播报文经中继转发给客户端,交互仍遵循 “发现 - 提供 - 请求 - 确认” 四阶段。

3. 中继部署(以 Linux 为例)

(1)实验环境
主机名IP 地址虚拟网络角色
dhcp-server.linux.fun10.1.8.10/24vmnet8DHCP 服务器
dhcp-relay.linux.fun10.1.8.20/24、10.1.1.20/24vmnet8、vmnet1DHCP 中继
dhcp-client.linux.fun自动获取vmnet1DHCP 客户端
(2)服务器端配置(dhcp-server)
  1. 配置双子网地址池:在/etc/dhcp/dhcpd.conf中添加10.1.1.0/24子网配置(参考前文 “典型配置”)。

  2. 配置路由

    :确保服务器能访问中继的

    10.1.1.20
    [root@dhcp-server~]# nmcli connection modify ens160 ipv4.routes '10.1.1.20/32 10.1.8.20'
    [root@dhcp-server~]# nmcli connection up ens160
(3)中继端配置(dhcp-relay)
  1. 安装中继服务

    [root@dhcp-relay~]# dnf install -y dhcp-relay
  2. 修改中继服务配置

    # 复制服务文件并编辑
    [root@dhcp-relay~]# cp /usr/lib/systemd/system/dhcrelay.service /etc/systemd/system/dhcrelay.service
    [root@dhcp-relay~]# vim /etc/systemd/system/dhcrelay.service
    # 修改ExecStart,指定DHCP服务器IP:
    ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.8.10
  3. 启用中继服务

    [root@dhcp-relay~]# systemctl enable dhcrelay.service --now
  4. 开启路由转发

    [root@dhcp-relay~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    [root@dhcp-relay~]# sysctl -p /etc/sysctl.conf  # 生效配置
(4)客户端测试

同 “DHCP 客户端配置与验证” 步骤,确认客户端能跨网段获取 IP。

六、轻量级 DHCP 工具(Dnsmasq)

1. 工具特点

集 DNS 缓存、DHCP 服务器、DHCP 中继、TFTP 服务器于一体,轻量易配置,适用于个人或小型网络。

2. 安装与核心配置

(1)安装 Dnsmasq
[root@server~]# dnf install -y dnsmasq
(2)关键配置(/etc/dnsmasq.conf)
# 1. IP地址池:10.1.8.50-150,掩码24,租约12小时
dhcp-range=10.1.8.50,10.1.8.150,255.255.255.0,12h

# 2. MAC绑定固定IP(租约45分钟)
dhcp-host=00:0c:29:ba:fd:88,10.1.8.30,45m

# 3. 配置网关
dhcp-option=option:router,10.1.8.2

# 4. 配置DNS服务器
dhcp-option=option:dns-server,218.2.135.1

# 5. 配置域搜索列表
dhcp-option=option:domain-search,linux.fun,example.com

# 6. 配置NTP服务器(可选)
dhcp-option=option:ntp-server,1.2.3.4,1.2.3.5

3. Dnsmasq 作为 DHCP 中继

在中继主机(dhcp-relay)的/etc/dnsmasq.conf中添加:

# 转发10.1.1.20接口的DHCP请求到10.1.8.10(DHCP服务器)
dhcp-relay=10.1.1.20,10.1.8.10

启用服务并开启路由转发(同前文 “中继端配置” 步骤)。

4. 客户端验证

同 “DHCP 客户端配置与验证”,可通过route -n(查看网关)、cat /etc/resolv.conf(查看 DNS)进一步确认配置生效。