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

news/2025/10/12 18:22:17/文章来源:https://www.cnblogs.com/tlnshuju/p/19136988

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

2025-10-12 18:20  tlnshuju  阅读(0)  评论(0)    收藏  举报

文章目录

  • DHCP 服务器知识点整理
    • 一、DHCP 服务基础
      • 1. 服务背景与作用
      • 2. DHCP 通信过程
      • 3. 多 DHCP 服务器机制
    • 二、DHCP 服务器部署与配置
      • 1. 部署前提
      • 2. 安装与防火墙配置
      • 3. 核心配置(/etc/dhcp/dhcpd.conf)
        • (1)配置文件来源
        • (2)典型配置示例与说明
      • 4. 配置验证与服务启停
    • 三、DHCP 客户端配置与验证
      • 1. 客户端配置(Linux 系统)
      • 2. 客户端验证
    • 四、基于 MAC 地址的 IP 预留
      • 1. 应用场景
      • 2. 配置步骤
        • (1)获取客户端 MAC 地址
        • (2)配置 IP 预留(修改服务器 dhcpd.conf)
        • (3)重启服务与验证
    • 五、DHCP 中继服务器
      • 1. 中继作用
      • 2. 工作原理
      • 3. 中继部署(以 Linux 为例)
        • (1)实验环境
        • (2)服务器端配置(dhcp-server)
        • (3)中继端配置(dhcp-relay)
        • (4)客户端测试
    • 六、轻量级 DHCP 工具(Dnsmasq)
      • 1. 工具特点
      • 2. 安装与核心配置
        • (1)安装 Dnsmasq
        • (2)关键配置(/etc/dnsmasq.conf)
      • 3. Dnsmasq 作为 DHCP 中继
      • 4. 客户端验证

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 次续约机会)

在这里插入图片描述

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)配置文件来源
(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)进一步确认配置生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03 数值类型拓展

数据类型拓展二进制0b八进制0十六进制0x 打印的结果默认为十进制浮点数拓展 #float 有限且离散,舍入误差,接近但不等于 #double #最好完全使用浮点数进行比较!!! #非要比较的话,有专用的类float f=0.1f; double d = 1…

python如何引用变量的名称

在Python中,引用变量的名称通常指的是动态地获取变量的标识符(即变量名)作为字符串。然而,需要注意的是,Python的变量更像是名字贴纸,贴在对象上,而不是容器。这种操作在一些特殊的场景下可能会用到,比如调试、…

Python GIL与No-GIL技术详解

Python的全局解释器锁(Global Interpreter Lock,简称GIL)是CPython解释器中最具争议和核心的设计之一。它深刻影响着Python的并发编程模型,也是许多开发者在使用Python进行多线程编程时遇到性能瓶颈的主要原因。Py…

题解:AT_abc288_h [ABC288Ex] A Nameless Counting Problem

用这个题总结一些互异容斥的 trick,参考了周子衡的论文。 题意:求出满足以下两个条件的长度为 \(N\) 的整数序列 \(A = (A_1, A_2, \ldots, A_N)\) 的个数,并对 \(998244353\) 取模。\(0 \leq A_1 \leq A_2 \leq \c…

2025 年 CBN 砂轮源头厂家最新推荐榜单:专业实力与客户满意度全景解析及选购指南

在航空航天零部件精密切削、电子芯片超精密研磨、汽车发动机关键部件加工等高端制造领域,CBN 砂轮作为核心耗材,其品质直接决定加工精度与生产效率。然而当前市场乱象频发:部分厂家技术薄弱,产品耐用性与精度稳定性…

JDK安装和卸载

新的快捷键 常用 shift+delete:永久删除文件 ctrl+shift+esc:打开任务管理器 alt+f4:关闭进程 ps:前阵子ow流行发一些图片表情和不同颜色字体的时候,很多人用来伪装系统提示引诱玩家按下alt+f4,结果真有人不知道…

Python定义一个User类的基本写法

定义一个类的基础语法如下: class User:# 初始化方法或者叫构造器def __init__(self, name, email):self.name = name # 实例变量name定义和赋值self.email = email # 实例变量email定义和赋值# 一个实例方法def gr…

Python飞快入门专业版(四十八):Python面向对象之多态:不同对象调用同一办法的不同达成(实战案例)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

10.12 CSP-S模拟30 改题记录

10.12 啥也不会场HZOJ 写在前面 貌似T3T4不太可改,遂先把前两题的写了。大概就是T1打表3小时没找到规律吧,喜提0pts。真是成也T1,败也T1。Dearest Darling My universe 亲爱的 亲爱的宇宙啊 날 데려가 줄래 能否带我…

ubuntu源码编译指定版本make

在Ubuntu系统中,源码编译是安装软件的一种高级方法,它允许用户针对特定的系统环境进行优化和定制。下面是一个针对Ubuntu平台从源码编译特定版本软件的详细流程,步骤旨在面向有一定Linux操作经验的用户。 准备工作安…

【LeetCode】274. H 指数

274. H 指数 题目 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指…

python之多态

多态 类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法:class Person(object):def __init__(self, name, gender):self.name = name…

Ubuntu系统部署Anaconda环境及Python语言的详细流程

Anaconda是一个流行的Python数据科学及机器学习平台,它聚集了许多用于科学计算、数据分析和机器学习的库。在Ubuntu系统中部署Anaconda环境涉及到下载、安装、设置环境变量以及使用conda创建和管理虚拟环境等几个步骤…

python之继承

继承特性,面向对象的三大特征之一。通过继承从其它类获取属性和方法 继承特性 # 一个类中有方法重复,但又不能实现全部功能 # 通过定义class 类名(父类):继承父类的所有属性和方法 class People:def __init__(self,n…

RK3568+MCU实时机器人解决方案 - 教程

RK3568+MCU实时机器人解决方案 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

做题记录 #2

A. ABC427G Takahashis Expectation 2 (6.5) 非常厉害的题目。 首先肯定考虑维护一个答案函数,初始为 \(y=x\),那么每次操作相当于用一条横线砍它,上面 -b 下面 +a。 考场上想了一个正确性其实不是很显然,感觉也不…

力扣 第455场周赛(A~D)

力扣 第455场周赛(A~D)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");A:出现次数能被 K 整除的元素总和 签到题,给一个整数数组nums和一个数k,计算nums…

深度学习开源书籍的技术解析

本文介绍了一本结合数学理论与编程实践的深度学习开源书籍,涵盖PyTorch和Tensor框架实现,通过Jupyter Notebook提供交互式学习体验,被多所高校采用为教材。深度学习著作的技术特色 《Dive into Deep Learning》是一…

c++自制游戏盒子

include<bits/stdc++.h> include <windows.h> include <stdio.h> include<conio.h> include<time.h> using namespace std; int x = 0; int* X = &x; char Void[10000] = "\0&…

向量库面试题

什么是向量数据库,和传统数据库相比有什么不同? “向量数据库是一类专门用于存储和检索高维向量数据的数据库。向量通常是从文本、图像、音频等非结构化数据通过 embedding 模型生成的高维浮点数组。 与传统数据库相…