当前位置: 首页 > news >正文

DHCP Server

简介

动态主机配置协议 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。

使用UDP协议,C/S模式。

dhcp服务器使用 67/UDP,dhcp客户端使用 68/UDP。

分配IP方式

  • 将一个IP地址固定分配给一个客户端
  • 随机地将地址永久性分配给客户端
  • 随机地将地址分配给客户端使用一段时间(常用

地址的有效使用时间段称为租用期,租用期满之前,客户端必须向服务器请求继续租用。服务器接受请求后才能继续使用,否则无条件放弃

二八原则

避免单台DHCP服务器宕机,客户端将无法获取IP地址,通常有多台DHCP服务器;然而DHCP服务器之间没有监督机制,无法保证分配地址没有冲突,可使用两台DHCP服务器。

若主机A侧有200台主机,主机B侧有200台主机,DHCP服务器各自按二八原则划分管控的动态IP范围,DHCP A:10.0.0.1~10.0.0.160和192.168.0.161~192.168.0.200,DHCP B:10.0.0.161~10.0.0.200和192.168.0.1~192.168.0.160;主机A获取10网段IP,若DHCP A宕机,可通过DHCP中继获取DHCP B中的10网段IP;主机B同理

DHCP中继

默认情况下,路由器隔离广播包,不会将收到的广播包从一个子网发送到另一个子网。当DHCP服务器和客户端不在同一个子网时,充当客户端默认网关的路由器将广播包发送到DHCP服务器所在的子网,这一功能就称为DHCP中继(DHCP Relay)

DHCP工作过程

DHCP在工作过程中涉及到的报文种类及其作用如下:

1、DHCP DISCOVER:客户端开始DHCP过程的第一个报文,是请求IP地址和其它配置参数的广播报文。

2、DHCP OFFER:服务器对DHCP DISCOVER报文的响应,是包含有效IP地址及配置的单播(或广播)报文。

3、DHCP REQUEST:客户端对DHCP OFFER报文的响应,表示接受相关配置。客户端续延IP地址租期时也会发出该报文。

4、DHCP DECLINE:当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。

5、DHCP ACK :服务器对客户端的DHCP REQUEST报文的确认响应报文。客户端收到此报文后,才真正获得了IP地址和相关的配置信息。

6、DHCP NAK:服务器对客户端的DHCP REQUEST报文的拒绝响应报文。客户端收到此报文后,会重新开始新的DHCP过程。

7、DHCP RELEASE:客户端主动释放服务器分配的IP地址。当服务器收到此报文后,则回收该IP地址,并可以将其分配给其它的客户端。

8、DHCP INFORM:客户端获得IP地址后,发送此报文请求获取服务器的其它一些网络配置信息,如DNS等。

续租

  1. 在使用租期过去50%时刻处, 客户端向服务器发送单播DHCP REQUEST报文续延租期。
  2. 如果收到服务器的DHCP ACK报文,则租期相应向前延长,续租成功。如果没有收到DHCP ACK报文,则客户端继续使用这个IP地址。在使用租期过去87.5%时刻处,向服务器发送广播DHCP REQUEST报文续延租期。
  3. 如果收到服务器的DHCP ACK报文,则租期相应向前延长,续租成功。如果没有收到DHCP ACK报文,则客户端继续使用这个IP地址。在使用租期到期时,客户端自动放弃使用这个IP地址,并开始新的DHCP过程。

实现

软件包

服务端

dhcp-server(centos8中)、dhcp(centos7及之前)

/usr/sbin/dhcpddhcp服务主程序
/etc/dhcp/dhcpd.confdhcp服务配置文件
/usr/share/doc/dhcp-server/dhcpd.conf.exampledhcp配置文件模板
/usr/lib/systemd/system/dhcpd.servicedhcp服务service文件
/var/lib/dhcpd/dhcpd.leases地址分配记录

客户端

dhcp-client

/usr/sbin/dhclient客户端程序
/var/lib/dhclient自动获取的IP信息

配置文件

查看dhcp配置文件模版

[root@wenzi ~]# vim /usr/share/doc/dhcp-server/dhcpd.conf.example
#指定客户端默认的域,局部或全局
option domain-name "example.org";
#指定客户端默认的DNS,局部或全局
option domain-name-servers ns1.example.org, ns2.example.org;#最小租期时间,单位 秒
default-lease-time 600;
#最长租期时间  单位 秒
max-lease-time 7200;#通过配置syslog.conf定义日志文件存放何处
log-facility local7;#在这个子网上不提供服务,但是声明它可以帮助DHCP服务器理解网络拓扑
subnet 10.152.187.0 netmask 255.255.255.0 {
}#这是一个非常基本的子网声明
subnet 10.254.239.0 netmask 255.255.255.224 {#客户端获取动态IP的范围,可有多个range,但IP范围不能重叠range 10.254.239.10 10.254.239.20;#为客户端指定默认网关option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}#这个声明允许BOOTP(DHCP协议前身)客户端获取动态地址,我们不建议这样做。
subnet 10.254.239.32 netmask 255.255.255.224 {range dynamic-bootp 10.254.239.40 10.254.239.60;option broadcast-address 10.254.239.31;option routers rtr-239-32-1.example.org;
}#针对单独子网配置
subnet 10.5.5.0 netmask 255.255.255.224 {range 10.5.5.26 10.5.5.30;option domain-name-servers ns1.internal.example.org;option domain-name "internal.example.org";option routers 10.5.5.1;#广播地址option broadcast-address 10.5.5.31;default-lease-time 600;max-lease-time 7200;
}#通过host 任意名 {} 配置
host passacaglia {#单个客户端主机MAC地址hardware ethernet 0:0:c0:5d:bd:95;#获取bootloader启动文件的名称filename "vmunix.passacaglia";#去 toccata.example.com 主机获取 vmunix.passacaglia 文件server-name "toccata.example.com";
}#通过host 任意名 {} 配置单个客户端主机使得IP和MAC地址绑定,固定IP
host fantasia {hardware ethernet 08:00:07:26:c0:a5;#固定客户端主机的IP地址fixed-address fantasia.example.com;
}#您可以声明一类客户端,然后基于此进行地址分配
#下面的示例显示了某个类中的所有客户端,获取10.17.224/24子网上的地址,所有其它客户端获取10.0.29/24 #子网上的地址的情况。
class "foo" {match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
#告知是否为一些子网络分享相同网络
shared-network 224-29 {subnet 10.17.224.0 netmask 255.255.255.0 {option routers rtr-224.example.org;}subnet 10.0.29.0 netmask 255.255.255.0 {option routers rtr-29.example.org;}pool {allow members of "foo";range 10.17.224.10 10.17.224.250;}pool {deny members of "foo";range 10.0.29.10 10.0.29.230;}
}

具体使用见http://t.csdn.cn/b36rQ

http://www.lryc.cn/news/126336.html

相关文章:

  • DMR+PoC宽窄融合互通解决方案
  • Springboot定时执行任务
  • 【Apollo】阿波罗自动驾驶:塑造自动驾驶技术的未来
  • JavaEE初阶:多线程 - Thread 类的基本用法
  • 编写 loading、加密解密 发布NPM依赖包,并实施落地使用
  • 【剑指Offer 57】和为s的连续正数序列,Java解密。
  • 深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例
  • 麦肯锡发布《2023年度科技报告》!
  • JAVASE---数组的定义与使用
  • 211、仿真-基于51单片机土壤湿度智能盆栽灌溉报警Proteus仿真设计(程序+Proteus仿真+配套资料等)
  • 记录TensorRT8.5.0安装
  • flutter ListView 滚动到最后一个items位置
  • WMS:SurfaceView绘制显示
  • 【Spring系列篇--关于IOC的详解】
  • __ob__: Observer 后缀的数组的取值方式
  • 时序预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络时间序列预测
  • Java基础知识点
  • 攻防世界-web-fileclude
  • 【100天精通python】Day36:GUI界面编程_高级功能操作和示例
  • 无涯教程-Perl - sub函数
  • wpf控件上移下移,调整子集控件显示顺序
  • cesium学习记录08-鼠标绘制多边形
  • rocketMq启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_171\lib\dt.jar;C:\Program]
  • Linux touch 命令指南大全
  • 华为网络篇 RIPv2的基础配置-25
  • fastadmin 下拉多级分类
  • 时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)
  • RabbitMQ工作流程详解
  • LabVIEW使用图像处理进行交通控制性能分析
  • CentOS 7 下 Keepalived + Nginx 实现双机高可用