DHCP服务详解(原理+搭建)
文章目录
- 详解DNS服务的搭建与解析
- 参考阅读
- 前言
- 一、工作原理
- 1.1 租约四部曲
- 1.2 续租
- 二、DHCP服务器的搭建
- 2.1 配置文件
- 2.2 搭建步骤
- 【基础—IP池/固定IP】
- 【进阶—超级作用域】
- 【高级—DHCP中继】
- 2.3 总结
详解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.拥有真实物理网卡,或者连接广播域的真实物理网卡
2.该接口或者该物理网卡必须有一个合理的ip地址
一、工作原理
总体分为租约
与续租
两个方面
1.1 租约四部曲
四个数据包
客户端 Discover、Request
服务端 Offer、Ack
工作过程简单解释
1、首先,客户端向DHCP服务器发送一个DHCPdiscover的报文(广播发送,可以理解为海投简历)
2、服务器端对客户端回应DHCPoffer (单播回应,可以理解为企业提供offer)
3、客户端向服务器发送DHCPrequest(广播发送,可以理解为告诉那些收到我的简历的企业,我不去你们那里)
4、服务器端向客户端回复一个DHCPack(单播回应,可以理解为企业与求职者的确认关系)
总结:
客户端发送的报文都是广播包,第一次的广播是为了让所有的企业看到自己,第二次广播是为了告诉其他企业自己已签到offer
(1)客户端:利用广播数据包发送搜索DHCP服务器
若客户端网络设置使用DHCP协议取得IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包(discover)给所有物理网段内的计算机。因为客户端还不知道自己属于哪一个网络,所以该数据包的来源地址会为0.0.0.0,而目的地址则为255.255.255.255。一般主机接收到这个数据包之后会直接丢弃,若局域网内有DHCP服务器,则会开始后续行为。(2)服务器端:提供客户端网络相关的租约以供选择。(DHCP Offer)
DHCP服务器在监听到客户端发出的dhcp discover广播后,会针对这个客户端的硬件地址( MAC)与本身的设置数据进行下列工作:到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
若配置文件针对该MAC地址提供特定的固定IP时,则提供该固定的IP给客户端。
若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认。
由于局域网内可能并非仅有一台DHCP服务器,但客户端仅能接收一组网络参数租约,因此客户端只会挑选其中一个DHCP offer(通常是最先抵达的那个)。当决定好使用此服务器的网络参数租约后,客户端便开始使用这组网络参数来配置自己的网络环境。此外,客户端会发送一个dhcp request广播数据包给所有物理网段内的主机,告知已经接受该服务器的租约(此时若有两台以上的DHCP服务器,则这些没有被接受的服务器会收回该IP租约)。同时,客户端还会向网络发送一个ARP封包(免费ARP),查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCPDECLIENT包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。(4)服务器端:记录该次租约行为后并向客户端发送响应数据包信息以确认客户端的使用。
当服务器端收到客户端的确认选择后,服务器会回送确认的dhcp ack响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约,有以下几种情况:
客户端脱机:关闭网络接口、重新启动、关机等行为,都算是脱机状态,这个时候server端就会将该IP地址收回,并放到server的备用区中,以便日后使用。
客户端租约到期:dhcp server端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,server端就会将该IP收回,这个时候就会断线。但用户也可以向DHCP服务器再次要求分配IP。 由于目前的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地址,一会检查日志文件会用到
在服务器上检查日志文件
简单解释一下
- 首先服务器收到客户端的discover请求,即discover
- 服务器将101这个地址分配给请求的客户端,即offer
- 服务器收到客户端的这个地址的请求,即request
- 服务器发送一个这个地址的确认,即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 = 68719476736
kernel.shmall = 4294967296
[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欺骗攻击
《协议栈攻击》思维导图
DHCP服务详解(原理+搭建)相关推荐
- DNS服务详解(解析+搭建)
文章目录 详解DNS服务的搭建与解析 参考阅读 前言 一.解析过程 1.1 层级架构 1.2 解析过程 二.DNS服务器的搭建 2.1 配置文件 2.2 搭建步骤 [基础-DNS服务器] [进阶-主从 ...
- Linux DNS服务详解——DNS服务搭建细节
前几天,我陆续给大家介绍了DNS服务的相关内容,今天,我给大家补充介绍一下DNS服务中一些小问题. 前文链接: Linux DNS服务详解--DNS基础知识 Linux DNS服务详解--DNS实战配 ...
- 【入门】广电行业DNS、DHCP解决方案详解(三)——DNS部署架构及案例
[入门]广电行业DNS.DHCP解决方案详解(三)--DNS部署架构及案例 DNS系统部署架构 宽带业务DNS架构 互动业务DNS架构 案例介绍 案例一 案例二 本篇我们将先介绍DNS系统部署架构体系 ...
- Windows XP服务详解
Windows XP服务详解 微软的个人操作系统从Win98发展到WinXP,为什么突然变得那么消耗系统资源呢?以至于很多人都感觉WinXP只是高配置的电脑才能运行的操作系统,其实不然.WinXP ...
- 89-Spring Cloud 微服务详解
Spring Cloud 微服务详解 微服务架构: 在说明该架构之前,再次的说明互联网应用架构演进(虽然之前说明过了) 随着互联网的发展,用户群体逐渐扩大,网站的流量成倍增长,常规的单体架构已无法满足 ...
- h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台
SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...
- ftp linux包,图文详解Ubuntu搭建Ftp服务器的方法(包成功)
一.今天下午由于课程的要求不得已做了Ubuntu搭建Ftp服务器的实验,但是实验指导书还是N年前的技术,网上搜了一大把,都是模模糊糊的! 在百般困难中终于试验成功,特把经验分给大家 希望大家少走弯路! ...
- Linux服务详解(主要基于RedHat系的及Centos默认服务详解)(综合整理)
转自:http://blog.csdn.net/jj198981/article/details/7605558 acpid ACPI(全称 Advanced Configuration and Po ...
- Windows7 个人服务详解及优化
Windows7 个人服务详解及优化! 这是我个人根据网上提供的服务优化说明来修改的([]号里就是我自己设定的),我是以安装了卡巴斯基和金山网镖的前提下关闭一些系统自带的防火墙和安全的服务,家庭电脑使 ...
最新文章
- PHP curl_setopt函数用法介绍中篇
- Java 8 - 收集器Collectors_分组groupingBy
- 新加坡暂停建设新的数据中心
- 红米手机停在机器人这里_iQOO Z1和红米K30 至尊纪念版,谁更值得选择?
- Python3--文件读取、写入、追加及seek()方法的使用
- Eclipse For JavaSE安装、配置、测试
- 海洋分享lol皮肤插件_LOL战斗之夜客户端BUG频出服务器爆满!如何提前领取皮肤?...
- 速成pytorch学习——11天. 使用GPU训练模型
- LeetCode(868)——二进制间距(JavaScript)
- Halcon:基本例程
- 推理集 —— 特殊的工具
- 分布式锁没那么难,手把手教你实现 Redis 分布锁!|保姆级教程
- 2D Game Creation - 2D游戏开发基本流程
- Windows进行磁盘碎片化整理
- python 任意时间段内的工作日计算(剔除法定节假日和周末)
- 渲染性能优化之Culling 剔除
- 教程--免费为小程序接入客服机器人
- STM32F407 ADC+DMA+定时器 定时采样模拟量
- Qt 读取Excel表格数据 生成Excel表格并写入数据
- 监听器:统计在线人数
热门文章
- FFmpeg XAVC实现/XAVC编码标准调研 (1)
- Automatic Segmentation of Head and Neck Tumors and Nodal Metastases in PET-CT scans
- 税法之”增值税“ ”消费税“ ”车辆购置税“
- 安装cuda8.0时无法安装.net Framework 4.0 错误的解决
- 用Java编写程序,输入一个数,并且输出这个数以内的所有的水仙花数,所谓的水仙花数是值一个3位数,其各个位上数立方和等于其本身。
- Docker部署mqtt服务器(emqx),密码认证
- LIS3DH高通滤波器与加速度阈值中断
- 2022第七届中国少儿模特明星盛典 周口赛区 初赛圆满落幕
- 无线路由器连接上网,如何设置?
- C语言实验——打印数字图形