DHCP服务详解(原理+搭建)

DHCP服务详解(原理+搭建)文章目录详解 DNS 服务的搭建与解析参考阅读前言一 工作原理 1 1 租约四部曲 1 2 续租二 DHCP 服务器的搭建 2 1 配置文件 2 2 搭建步骤 基础 IP 池 固定 IP 进阶 超级作用域 高级 DHCP 中继 2 3 总结详解 DNS 服务的搭建与解析参考阅读之前写过一个 RedHat7 2 下 DNS 服务的搭建 文章总体来说介绍比较详细 但是理论过多 没有对真实的场景进行应用 此篇算是一个归纳汇总 Linux 系统下 DHCP 服务器的搭建 概念 环境演示 还在被虚拟机的网络模式搞得晕头转向 来这里瞧瞧吧

详解DNS服务的搭建与解析

在这里插入图片描述

参考阅读

之前写过一个Red Hat7.2下DNS服务的搭建,文章总体来说介绍比较详细,但是理论过多,没有对真实的场景进行应用;此篇算是一个归纳汇总

Linux系统下DHCP服务器的搭建(概念+环境演示)

还在被虚拟机的网络模式搞得晕头转向?来这里瞧瞧吧~

基于Linux下常见服务的搭建

Linux汇总

前言

​ DHCP(Dynamic Host Configuration Protocol,动态主机配置协议 )是一个局域网的网络协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求

​ DHCP是一个应用层协议。使用UDP67端口作为源端口回应应答消息给主机,使用UDP68端口作为目的端口来广播信息,即DHCP服务器回应应答消息给主机的68号端口当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

一、工作原理

总体分为租约续租两个方面

1.1 租约四部曲

四个数据包

在这里插入图片描述

工作过程简单解释

1、首先,客户端向DHCP服务器发送一个DHCPdiscover的报文(广播发送,可以理解为海投简历)

2、服务器端对客户端回应DHCPoffer (单播回应,可以理解为企业提供offer)

3、客户端向服务器发送DHCPrequest(广播发送,可以理解为告诉那些收到我的简历的企业,我不去你们那里)

4、服务器端向客户端回复一个DHCPack(单播回应,可以理解为企业与求职者的确认关系)

总结:
客户端发送的报文都是广播包,第一次的广播是为了让所有的企业看到自己,第二次广播是为了告诉其他企业自己已签到offer

​ 由于目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。一般情况下,假设租约时间是T小时,那么客户端程序在0.5T时会主动向DHCP服务器发出重新要求网络参数的数据包。如果这次数据包请求没有成功,那么在0.875T后还会再次发送数据包一次。

正因如此,所以服务器端会启动port67监听客户端请求,而客户端会启动port68主动向服务器请求。

1.2 续租

在这里插入图片描述

情景:

DHCP客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCPREQUEST消息包;如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%

如果在租期过去50%的时候没有更新,则DHCP客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系;如果还不成功,到租约的100%时候,DHCP客户机必须放弃这个IP地址,重新申请

如果此时并没有DHCP可用,DHCP客户机会使用169.254.0.0/16中随机一个地址,并且每隔5min在进行尝试

二、DHCP服务器的搭建

关于DHCP服务器的搭建总体分为以下几个步骤

1、关闭虚拟机中自带的DHCP功能;关闭防火墙;关闭SELinux 2、挂载光盘、配置yum源 3、使用yum安装软件 3、修改配置文件 4、启动服务进行测试 

2.1 配置文件

在说配置文件之前,先看看软件的安装

在这里插入图片描述

注意:当软件安装后,主配置文件中默认是没有内容的

在这里插入图片描述

主配置文件

/etc/dhcp/dhcpd.conf 

模板配置文件

/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample 

中继配置文件

/etc/sysconfig/dhcrelay 

关于配置文件中需要修改的内容进行解释

subnet192.168.10.0 netmask 255.255.255.0 { 
    #声明要分配的网段和子网掩码 range 192.168.10.3 192.168.10.254; #声明可用IP地址池 option domain-name "yichen.com"; #设置DNS域 option domain-name-servers 8.8.8.8 ; #设置DNS服务器地址 option routers 192.168.10.2; #默认网关的地址 option broadcast-address 192.168.10.255; #广播地址(可不写) default-lease-time 600; #默认租约(s) max-lease-time 7200; #最大租约(s) } 

一点说明:

IP地址池为什么从3开始是因为,1被windows下的网卡使用,2被网关使用

2.2 搭建步骤

下面将根据三个真实的实验环境中对DHCP的搭建做一个详细的说明与配置

【基础—IP池/固定IP】

实验环境

Centos 6.8两台 分别为DHCP Server、Client 网络模式均为仅主机模式,用到的网卡是自定义的VM10 

实验设计

在这里插入图片描述

详细步骤

1、首先关闭虚拟机自带的DHCP功能;防火墙、SENLinux

在这里插入图片描述

service iptables stop setenforce 0 

2、安装软件

yum -y install dhcp dhcp-common 

3、修改主配置文件

  • 先将模板文件复制成主配置文件
  • 然后修改主配置文件中的内容,并备份
    cp -a /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf cp -a /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak 

4、修改主配置文件中的内容;删除或注释掉其他不需要的subnet,配置需要的subnet

在这里插入图片描述

5、重启服务后测试

[root@localhost ~]# service dhcpd restart 关闭 dhcpd: [确定] 正在启动 dhcpd: [确定] 

在客户端上进行IP的获取,留意以下MAC地址,一会检查日志文件会用到

在这里插入图片描述

简单解释一下

  1. 首先服务器收到客户端的discover请求,即discover
  2. 服务器将101这个地址分配给请求的客户端,即offer
  3. 服务器收到客户端的这个地址的请求,即request
  4. 服务器发送一个这个地址的确认,即ack

对于固定IP的配置其实就是修改主配置文件中的内容即可

需求:如果一个客户端不想在IP池中被分配IP,而是想要一个固定的IP

步骤:

1、首先,要获取到这个客户端的网卡的MAC地址;在客户端上使用ifconfig命令即可获得

在这里插入图片描述


2、修改DHCP服务器的主配置文件

在这里插入图片描述

hardware ethernet 后书写网卡的MAC地址 fixed-address 后书写想要分配的固定IP;可以是IP池的也可以是池外的,但一定要在DHCP能力范围内的 

3、重启服务测试即可;可见与预期一致

[root@localhost ~]# service dhcpd restart 关闭 dhcpd: [确定] 正在启动 dhcpd: [确定] 

在这里插入图片描述

【进阶—超级作用域】

场景:C段网络中只可以容纳253台主机,而我的需求比这个还大时就需要扩大DHCP服务器对这个网段的作用域;前提是网段不变,要是能用B段的直接用就行了,不存在扩大作用域的说法

目的:为不同段的网络做DHCP功能

实验环境

Centos 6.8三台 分别为DHCP Server、Client1、Client2 网络模式均为仅主机模式,用到的网卡是自定义的VM10 

实验设计

在这里插入图片描述

实验步骤

1、关闭防火墙、Senlinux、虚拟机的网卡这几步跟第一个实验相同

2、在DHCP服务器上开启子网卡;复制网卡的配置文件即可

[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ls ifcfg-eth1 ifdown-ib ifdown-routes ifup-eth ifup-plusb ifup-wireless ifcfg-eth1:1 ifdown-ippp ifdown-sit ifup-ib ifup-post init.ipv6-global ifcfg-lo ifdown-ipv6 ifdown-tunnel ifup-ippp ifup-ppp net.hotplug ifdown ifdown-isdn ifup ifup-ipv6 ifup-routes network-functions ifdown-bnep ifdown-post ifup-aliases ifup-isdn ifup-sit network-functions-ipv6 ifdown-eth ifdown-ppp ifup-bnep ifup-plip ifup-tunnel [root@localhost network-scripts]# 

在子网卡的配置文件中,不需要删除MAC、UID,因为这是一个子网卡,只需修改一下IP即可

在这里插入图片描述

开启DHCP服务器的路由转发功能并使其生效

[root@localhost ~]# sysctl -p net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax =  kernel.shmall =  [root@localhost ~]#  

3、修改主配置文件

删除或注释掉其他不需要的subnet;shared-network后的 10-20自定义即可

在这里插入图片描述

4、重启服务后,使用两个客户机进行测试,可见与预期相符,分别分配到了10和20段的IP

在这里插入图片描述

在这里插入图片描述


【高级—DHCP中继】

DHCP中继被称为DHCP Relay;是为了实现不同子网和物理网段之间处理和转发dhcp信息

实验环境

Centos 6.8四台 分别为DHCP Server、DHCP中继、Client1、Client2 网络模式均为仅主机模式,用到的网卡是自定义的VM10 

注意,使用两个客户机来代称一类客户机

实验设计

在这里插入图片描述

实验步骤

0、对于网卡的配置与设置,自定义网卡即可,不做过多赘述

1、关闭防火墙、SELinux、虚拟机的DHCP功能

2、检查IP地址的配置,如下所示,可见与预期相符

在这里插入图片描述

3、安装软件、修改主配置文件

yum -y install dhcp 

主配置文件中对于不需要的subnet删除或注释即可;然后配置所需的subnet

在这里插入图片描述

重启服务

[root@localhost ~]# service dhcpd restart 正在启动 dhcpd: [确定] 

4、配置DHCP中继服务器

  • 配置网卡
    eth0:192.168.10.20 eth1:100.100.100.20 
  • 安装软件
    yum -y install dhcp 
  • 修改主配置文件
    vim /etc/sysconfig/dhcrelay 将自己的两个网卡接口与DHCP服务器的IP地址标明 

在这里插入图片描述

  • 开启路由转发并使其生效
    [root@localhost ~]# vim /etc/sysctl.conf  [root@localhost ~]# sysctl -p net.ipv4.ip_forward = 1 
  • 开启中继服务
    [root@localhost ~]# service dhcrelay start 正在启动 dhcrelay: [确定] 

5、客户端进行测试

VM10的客户机

在这里插入图片描述

VM7的客户机

在这里插入图片描述

可见,与预期相符


2.3 总结

  • 根据不同的DHCP域的需求来部署配置不同的DHCP服务器
  • 扩大作用域与否要针对客户机是否在一个子网中
  • 关于DHCP的攻击与防护如下

    浅谈DHCP欺骗攻击

    《协议栈攻击》思维导图


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206156.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:20
下一篇 2026年3月19日 下午4:20


相关推荐

  • 全网最全Nano Banana Pro使用教程!包含提示词,国内4k/0.09 API接入教程

    全网最全Nano Banana Pro使用教程!包含提示词,国内4k/0.09 API接入教程

    2026年3月13日
    2
  • 海量存储系列下–转载,值得一读

    海量存储系列下–转载,值得一读

    2021年8月30日
    74
  • 自动定时执行任务、定时任务执行的几种实现方法

    自动定时执行任务、定时任务执行的几种实现方法自动定时执行任务,常见的方法有三种:Windows任务计划程序WindowsService定时执行软件(例如:定时执行专家)这三种方法大多数人都用过,我在这里只做一个比较简单的介绍和小结,

    2022年7月2日
    32
  • 数据库中间件详解

    数据库中间件详解数据库中间件详解原创 田守枝田守枝的技术博客 3 月 24 日 1 数据库拆分过程及挑战互联网当下的数据库拆分过程基本遵循的顺序是 垂直拆分 读写分离 分库分表 水平拆分 每个拆分过程都能解决业务上的一些问题 但同时也面临了一些挑战 1 1 垂直拆分对于一个刚上线的互联网项目来说 由于前期活跃用户数量并不多 并发量也相对较小 所以此时企业一般都会选择将所有数据存

    2026年3月19日
    3
  • 2019安装k8s详细教程

    2019安装k8s详细教程前言学习 k8s 的第一步肯定是安装进行实操 但是对于生产环境搭建一个高可用的 k8s 集群其实还是有点挑战难度的 特别是非专业运维开发人员 因为要涉及到的方面很多 默认配置都不能用于生产环境 性能调优 安全验证等等都是必不可少的 对于入门者来说的话 第一步安装其实有时候已经把一些人挡在了门外 自己也是费了一点功夫 才搭建了在本地能测试的 k8s 集群 用来学习 其中遇到了一些坑 所以记录一下 希望能帮助

    2026年3月18日
    3
  • linux node升级_linux系统升级到指定版本

    linux node升级_linux系统升级到指定版本问题在docker容器中启动node项目,但不希望每次都要npmi,所以要把源代码采用挂载的方式,放在镜像中。需要在服务器中npmi,之后启动容器,结果报错了,原因是node版本不对。后来采用了先挂载安装包,后再启动容器。其实我们可以选择升级一下本地主机的node版本就方便多了升级nodenode-v 首先清理npm的缓存 npmcacheclean-f 安装版本管理工具 npminstall-gn 更新到最新的版本 nl..

    2025年6月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号