DHCP服务器

news2024/11/17 6:30:11

文章目录

  • DHCP服务器
    • DHCP的工作原理
      • DHCP服务器的用途
      • DHCP协议的工作方式
        • DHCP服务器给予客户端固定或动态的IP参数
        • 关于租约所造成的问题与租约期限
        • 多台DHCP服务器在同一物理网段的情况
      • 何时需要架设DHCP服务器
        • 使用DHCP的时机
        • 不建议使用DHCP主机的时机
    • DHCP服务器端的配置
      • 所需软件与文件结构
      • 主要配置文件/etc/dhcp/dhcpd.conf的语法
        • 全局设置
        • IP分配设置(动态或固定)
      • VMware DHCP服务器案例
        • 要求
        • 配置DHCP服务器
        • 配置其他客户端
        • 检查租约文件
  • 总结

DHCP服务器

DHCP的工作原理

DHCP服务器的用途

要说明DHCP之前要先配置好一个网络环境,是减速机可以顺利连上Internet,那么计算机里面就一定要有IP 地址、子网掩码、广播地址、默认网关地址、DNS 服务器地址 等网络参数才行。

其中IP 地址、子网掩码、广播地址、默认网关地址都可以在 /etc/sysconfig/network-scriptes/ifcfg-eth[0-n]这个文件里面定义,DNS服务器的地址则在 /etc/resolv.conf 文件中定义。配置好以后,那么连接计算机Internet就没有问题了。如果你家里面有3-4台计算机,你都可以手动来配置好所需要的网络参数,然后利用NAT服务器的功能,就可以连上Internet了。

那么假设你是网络管理员,所管理的计算机大概有100多台,那么怎么设置好100多台计算机呢?

(1)手动配置(累死你)

(2)叫一群人来帮你配置(去哪里找人?)

(3)利用一台主机来自动分配所有的网络参数给任何一台主机(省时省力)

很明显我们要选择第三种省时省力的方法。

DHCP(Dynamic Host Configuration Protocol)服务器最主要的工作,就算实现上面第三种方案,也就是自动地将网络参数正确地分配给网络中的每台计算机,让客户端的计算机可以在开机的时候就立即自动设置好参数值,这些参数可以包括(IP 地址、子网掩码、广播地址、默认网关地址、DNS 服务器地址)如此一来,身为管理员的你,只要注意这一台提供网络参数的主机是否出故障就可以了,其他计算机,DHCP就帮你搞定了。

DHCP协议的工作方式

DHCP通常是用于局域网内的一个通信协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求,所以DHCP服务器与客户端是应该在同一个物理网段内的。

整个DHCP数据包在服务器与客户端的交互情况如下

image-20230616141603423

客户端取得IP参数的程序可以简化如下:

(1)客户端:利用广播数据包发送搜索DHCP服务器的数据包

若客户端网络设置使用DHCP协议取得IP(在Windows内为“自动获取IP”),则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包给所有物理网段内的计算机。此数据包的目标IP会是255.255.255.255,所以一般主机接收到这个数据包后会直接给予丢弃,但若局域网内有DHCP服务器时,则会开始进行后续行为。

(2)服务器端:提供客户端网络相关的租约以供选择

DHCP服务器在接收到客户端的要求后,会针对这个客户端的硬件地址(MAC)与本身的设置数据来进行下列工作

  • 到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端
  • 若配置文件针对该MAC地址提供特定的固定IP(Static IP)时,则提供固定IP给客户端
  • 若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。

服务器端会针对客户端的要求提供一组网络参数租约给客户端选择,由于此时客户端尚未有IP,因此在服务器端响应的数据信息中,主要是针对客户端的MAC来给予回应的。此时服务器端会保留这个租约然后开始等待客户端的回应

(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认

在局域网内可能有多个DHCP服务器,但是客户端只能选择一组网络参数租约。客户端需要决定是否接受该服务器提供的网络参数。如果决定使用此服务器的网络参数租约,客户端将开始使用这组网络参数来配置自己的网络环境。此外,客户端还会发送一个广播数据包给局域网内的所有主机,告知它们已经接受了该服务器的租约。如果有两个以上的DHCP服务器提供租约,那么没有被接受的服务器会回收该IP租约。被接受的DHCP服务器会继续进行下一步操作。

(4)服务器端:记录该次租约行为并向客户端发送响应数据包信息以确认客户端的使用

当服务器端收到客户端确认的选择后,服务器会回送确认的响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约?有下面几种情况

  • 客户端脱机:关闭网络接口(ifdown)、重新启动(reboot)、关机(shutdown)等行为,皆算是脱机状态,这个时候Server会将该IP收回,并放到Server的备用区中,以便日后使用
  • 客户端租约到期:DHCP Server 端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,Server端会将该IP收回,这个时候就会造成断线。但用户也可以向DHCP服务器再次要求分配IP。

DHCP服务器给予客户端固定或动态的IP参数

上面第二部操作中,服务器会取比较客户端的MAC硬件地址,并判断该MAC是否需要给予一个固定的IP。

  • 固定(Static)IP

只要客户端计算机网卡不换掉,那么MAC肯定就不会改变,由于DHCP可以根据MAC来给予固定的IP参数租约,所以该计算机每次都能以一个固定的IP连上Internet。这种情况比较适合当这台客户端计算机需要用作网络内的一些服务器主机的情况(所以IP要固定)。

  • 动态(Dynamic)IP

Client端每次连上DHCP服务器所取得的IP都不是固定的,都是由DHCP服务器在未被使用的IP地址池中随机选中并提供的。

除非局域网内的计算有可能用来作为主机之用,必须设置未固定IP,否则使用动态IP的设置比较简单,而且在使用上具有很好的弹性。

关于租约所造成的问题与租约期限

观察完上面的DHCP工作模式后,会发现最后DHCP服务器还会给予几个租约期限,为什么需要这样的一个期限呢?其实设定期限还是有必要的,最大的好处就算可以避免IP被某些客户端一直占用着,但该客户端却是闲置的状态。

举例来说,我有150个IP,但是偏偏有200个用户,我们以餐馆为例,假设每个用户都着急吃饭,也就是说200个人同时干饭,有可能吗?当然不可能。肯定会有50个人无法干饭,只能等待别人吃完饭。

那怎么办?租约到期的方式就凸显出来了。那些已经占着位置吃完饭不走的,就会强迫它们离开,从而这个位置就被空了出来就可以提高等待的人使用。

DHCP协议为客户端分配的IP地址是有租约期限的,但这并不意味着你必须在到期前手动去重新申请新的IP地址。现在的DHCP客户端程序通常会根据租约时间自动重新申请更新租约时间,因此在租约到期之前,DHCP客户端程序已经自动更新了租约时间,所以你可以一直使用这个IP地址,除非DHCP服务器崩溃。

多台DHCP服务器在同一物理网段的情况

当你网络中又两台以上的DHCP服务器时,到底哪一台服务器会响应客户端计算机所发出的DHCP请求呢?因为网络上面,很多适合都是抢先得的,DHCP的响应也是如此。当Server1先响应,你使用的就算Server1所提供的网络参数,如果是Server2先响应,你就是使用Server2的参数来配置客户端PC。不过,前提是这些计算机被物理连接在一个物理网段中。

何时需要架设DHCP服务器

既然DHCP的好处是自动配置客户端,而且在移动设备的上网上面非常方便,那么是否代表你就一定要搭建一台DHCP呢?那也不一定。

使用DHCP的时机

  • 具有相当多移动设备的场合

例如公司内部很多笔记本电脑使用的场合。因为笔记本电脑本身就是移动性的设备如果每到一个地方都要去问别人这边的网络参数是什么,并且还需要担心是否会跟别人IP相冲突,这时DHCP就可以派上用场了。

  • 局域网内计算机的数量相当多的时候

当网络内的计算机的数量十分庞大,大到一个一个地单独知道它们配置网络参数,这时候为了避免麻烦,就需要搭建DHCP了。

不建议使用DHCP主机的时机

  • 在网络中的计算机,有很多机器其实是作为主机的用途,很少有用户需求,那么就没有必要架设DHCP
  • 像一般在家里,只有3~4台计算机时,架设DHCP只能拿来练习练习,没有多大效益
  • 当管理的网络当中,大多网卡都属于老旧型号不支持DHCP协议
  • 用户的计算机水平都很高时,那么也没有必要架设DHCP

上面提供的方案仅供参考,一件事有很多解决的方案,没有所谓的完全正确的方案

DHCP服务器端的配置

所需软件与文件结构

比较重要的配置文件如下:

  • /etc/dhcp/dhcpd.conf

这个就是DHCP服务器的主要配置文件,在某些Linux版本中这个文件不能不存在,所以如果确定已经安装了DHCP软件却找不到这个文件时,请手动自行创建它即可

  • /usr/sbin/dhcpd

这是启动整个dhcp daemon 的脚本文件。其实最详细的执行方式应该要使用man dhcpd来查阅

  • /var/lib/dhcp/dhcpd.leases

这个文件就算前面原理部分提到的租约,DHCP服务器端与客户端租约建立的其实与到期日就算记录在这个文件当中的。

主要配置文件/etc/dhcp/dhcpd.conf的语法

  • "#"为注释符号

  • 配置项目的语法形式主要是 " <参数代号> <配置内容>"

例如:

default-lease-time 259200;
  • 某些配置项目必须以option来定义,基本形式为 " option <参数代码> <配置内容> "

例如:

option domain-name "your.domain.name";

DHCP的IP分配方式可分为动态IP与固定IP,其中需要了解的是,如果需要分配固定IP的话,那么就必须要知道要设置成固定IP的那台计算机的硬件地址(MAC),可以使用arp、ifconfig、ip a来查看你网络接口的MAC。好了,那么需要设置的项目有哪些呢?其实dhcpd.conf 中的配置主要分为两大项目,一个是服务器允许的全局设置,一个是IP分配设置(动态或固定)

全局设置

每个项目的设置值大概有以下几项:

  • default-lease-time 时间:默认的租约时间

用户的计算机也能要求一段特定长度的租约时间,但若用户没有特别要求租约时间的话,那么就以此默认的租约时间。后面的时间参数默认为秒

  • max-lease-time 时间:最大租约时间

与上面的默认租约时间类似,不过,这个设置值是在规范用户所能要求的最大租约时间。也就是说,用户要求的租约时间若超过此设置值,则以此值为准

  • option domain-name-servers IP1、IP2

这个设置参数可以修改客户端的/etc/resolv.conf文件,即nameserver 后面接的DNS IP。特别注意设置参数最末尾为 servers (有s)

  • option routers 路由器的地址

设置 DHCP 服务器为客户端分配的默认网关(路由器)的 IP 地址。routers记得加上s

IP分配设置(动态或固定)

由于dhcpd主要是针对局域网分配IP参数的,因此在设置IP之前,我们需要指定一个局域网(即DHCP待分配地址的区域)才行。局域网的方式使用如下的参数

subnet NETWORK_IP netmask NETMASK_IP { .... }

我们知道局域网明确 network / netmask IP 这两个参数才行,例如之前谈过的 192.168.100.0 / 255.255.255.0 这样的设置值。上面设置值当中,subnet 与 netmask 是关键词,而大写部分就填上局域网参数。那再括号内还有什么参数需要设置呢?那就是到底IP是固定还动态的

  • range IP1 IP2

这个局域网当中,给予一个连续的IP地址段用来发放给客户端使用,IP1 IP2 指的是分配给客户端使用的 IP范围。例如:我想要分配 192.168.100.101到192.168.100.200 这个100个IP用来作为动态分配。那就是 range 192.168.100.101 192.168.100.200

  • host 主机名 { .... }

这个host就算指固定IP对应到固定MAC的设置值,主机名可以自己给予。不过再大括号内就需要指定MAC与固定的IP了。那这两个设置怎么设置呢?如下

    • hardware ethernet 硬件地址

    利用网卡上面的固定硬件地址来设置,就是该设置仅针对这个硬件地址有效的意思

    • fixed-address IP地址

    给予一个固定的IP地址

VMware DHCP服务器案例

要求

  • Linux 主机对内的eth34 IP设置为 192.168.200.254
  • 内部网段设置为192.168.200.0/24 ,且内部计算机的router为192.168.200.254,此外,DNS主机的IP为114.114.114.114和8.8.8.8
  • 每个用户默认租约为 3 天,最长为 6 天
  • 要分配的IP只有192.168.200.101到192.168.200.200 这几个,其他IP则保留下来
  • 设置DHCP客户端为固定IP地址,其MAC是00:0c:29:54:81:64,设置其主机名为csq,且IP为 192.168.200.50

使用软件:VMware

image-20230616212145575

image-20230616212221249

image-20230616212544017

配置DHCP服务器

  1. 防火墙放行规则(centos 7 以下使用iptable)
[root@localhost ~]# firewall-cmd --add-service=dhcpv6-client --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
  1. 安装 DHCP 服务器软件

没有DHCP服务的话就需要你需要下载

[root@localhost ~]# yum install -y dhcp
  1. 修改配置文件 /etc/dhcp/dhcpd.con
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 
# 1.整体环境设定
default-lease-time    259200;              # 默认租约为3天
max-lease-time        518400;              # 最大租约为6天
option routers        192.168.200.2;       # 设置网关地址
option domain-name    "user.csq";          # 给予一个域名
option domain-name-servers 114.114.114.114,8.8.8.8;
 # DNS的IP设置,这个设置值会修改客户端的/etc/resolv.conf 文件内容
# 2.关于动态分配的IP
subnet 192.168.200.0 netmask 255.255.255.0 {
       range 192.168.200.101 192.168.200.200;  # 分配的IP地址范围
# 3.关于固定的IP
       host csq {
         hardware ethernet 00:0c:29:54:81:64;  # 客户端网卡MAC地址
         fixed-address     192.168.200.50;     # 给予固定的IP地址
       }
                                           }
# 相关的设置参数的意义,man dhcpd
  1. 重启DHCP
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
  1. 查看端口

image-20230616235711357

配置其他客户端

和dhcp服务器使用同一个虚拟网卡,

设置网卡将获取IP地址的方式设置为dhcp

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens34 
# 每个人的网卡不一样,按照自己的网卡名字来
# 将里面的
# BOOTPROTO的值改为dhcp  去掉IPADDR、NETWORK网络参数等

重启

[root@localhost ~]# systemctl restart network

查看端口

image-20230617000127380

  • 查看IP

image-20230616221425256

如果再配置一个客户端的话,还是上述的做法,只需重启network

image-20230616233816503

检查租约文件

服务器端是记录在 /var/lib/dhcpd/dhcpd.leases

[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases
lease 192.168.200.101 {
  starts 5 2023/06/16 15:37:58;    # 租约开始的时间
  ends 1 2023/06/19 15:37:58;      # 租约结束的时间
  tstp 1 2023/06/19 15:37:58;
  cltt 5 2023/06/16 15:37:58;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:79:5e:45;   
  # 客户端网卡 固定IP网卡并不会显示只会显示动态IP的网卡信息
}

总结

  • DHCP可以为客户端计算机提供网络参数,使其他主机自动设置网络的功能
  • 通过DHCP的统一管理,在同一网络中很少出现IP冲突的情况
  • DHCP可以通过MAC的比对来提供 static IP(固定IP),一般通常向客户端分配动态IP
  • 除了静态动态IP之外,还可以提供租约行为的设置
  • 在租约期到期之前,客户端dhcp软件即会主动要求更新(越0.5、0.85倍租约时间左右)
  • DHCP可以提供MAC比对、动态IP的范围以及租约期限等,都是在dhcpd.conf这个文件当中设置
  • 租约信息 服务器端是记录在 /var/lib/dhcpd/dhcpd.leases

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

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

相关文章

Quantum Utility!IBM开辟“量子计算的实用时代”

光子盒研究院 今天&#xff0c;IBM&#xff08;纽约证券交易所股票代码&#xff1a;IBM&#xff09;宣布了一项新的突破&#xff0c;并发表在科学杂志《自然》的封面上。 ——团队首次证明了量子计算机可以在100多个量子比特的规模上产生精确的结果&#xff1b;并且至少在一种计…

Redis入门 - 基础通用指令

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis入门 - 基础通用指令 | CoderMast编程桅杆https://www.codermast.com/database/redis/base-commind.html 在正式介绍Redis数据结构及其操作指令之前&#xff0c;我们需要先掌握一些最基础的通用指令。 这些都是Redis…

鸟类识别Python,基于TensorFlow卷积神经网络【实战项目】

一、介绍 鸟类识别系统&#xff0c;使用Python作为主要开发语言&#xff0c;基于深度学习TensorFlow框架&#xff0c;搭建卷积神经网络算法。并通过对数据集进行训练&#xff0c;最后得到一个识别精度较高的模型。并基于Django框架&#xff0c;开发网页端操作平台&#xff0c;…

chatgpt赋能python:Python自动获取图片数据的方法

Python自动获取图片数据的方法 随着信息时代的到来&#xff0c;图像数据已经越来越重要。我们如何从互联网上获取大量的图片数据呢&#xff1f;Python提供了简单而直接的方法。本文将介绍如何使用Python自动获取图片数据&#xff0c;充分利用Python的编程能力&#xff0c;开展…

异常的相关知识

&#x1f4e2;博客主页&#xff1a;盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主&#x1f4e2;努力努力再努力嗷~~~✨ &#x1f4a1;大纲 ⭕总结了python中所有可能的异常情况&#xff0c;有异常不一定是坏事&#xff0c;有提醒作用 一、常见异常 &#x1f4a1;可以…

Midjourney命令列表Command List介绍

您可以通过键入命令与Discord上的Midjourney Bot进行交互。命令可以用来生成图像、更改默认设置、监看用户信息以及执行其他有用的任务。 Midjourney 命令可以在任何Bot Channel中使用&#xff0c;在允许 Midjourney Bot 运行的私有 Discord 服务器上使用&#xff0c;或者在与…

Java项目开发基本数据类型与封装数据类型的选择

问题 Java项目开发基本数据类型与封装数据类型的选择 详细问题 关于基本数据类型与封装数据类型的区别&#xff0c;作为面试经典题目已被熟知&#xff0c;但是&#xff0c;项目开发时&#xff0c;对于一个变量&#xff0c;是选择基本数据类型&#xff0c;还是封装数据类型&a…

【SpringBoot】SpringBoot案例 | Web后端开发

黑马2023JavaWeb的B站视频&#xff0c;还可以&#xff0c;学的大部分都是有用的东西。没有一上来还JDBC。 新建项目、更改application.properties配置&#xff1a; spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.datasource.urljdbc:mysql://localhost:…

定时任务执行时间设置详解

目录 前提实践举例定时任务执行时间设置详解定时器包含的子表达式和对应子表达式允许的值子表达式中特殊字符含义的解释和相应示例 前提 一般在处理业务过程中&#xff0c;都需要在特定的时间点执行特定的任务&#xff0c;尤其是业务复杂且执行时间很长&#xff0c;业务之间关…

java中的时间

一、JDK7的类 &#xff08;1&#xff09;Date 时间 &#xff08;2&#xff09;SimpleDateFormat 格式化时间 &#xff08;3&#xff09;Calendar 日历 格林尼治时间&#xff08;Greenwich Mean Time&#xff09;&#xff0c;简称GMT。 目前的世界标准时间&#xff08;UTC)以替换…

C++的友元函数、友元类、内部类

目录 1.友元函数 1.定义 2.注意 2.友元类 1.定义 3.内部类&#xff08;Java喜欢用&#xff0c;C不怎么用&#xff09; 1.定义 特性&#xff1a; 1.友元函数 1.定义 1.友元函数可访问类的私有和保护成员&#xff0c;但不是类的成员函数。 2.友元函数不能const修饰 3.…

Rust语言从入门到入坑——(4)Rust语法(上)

文章目录 0 引入1、基础语法1.1、变量1.2、常量1.3、重影 2、数据类型2.1、整形2.2、浮点型2.3、其他2.注释与打印2.1 注释2.2、打印 3、总结 0 引入 在这里我们需要介绍Rust语法&#xff0c;一共分三部分&#xff0c;第一部分是基础语言&#xff0c;和C语言类比&#xff0c;如…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目&#xff0c;检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

总结902

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.背诵前21篇短文&#xff0c;默写了10篇文章。…

智能视频无损放大-Topaz Video AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Video AI。 小编在很早之前也有了解过Topaz系列的软件&#xff0c;都是通过人工智能处理的&#xff0c;对小白新手们很适用&#xff0c;由于使用人工智能方面的软件或程序对硬件要求都比较高&#xff0c;因…

离散数学题目收集整理练习(期末过关进度70%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f31f;博主的其他文章&…

Linux运维监控学习笔记2

Zabbix监控本机&#xff1a; 配置->主机->将Zabbix Server的状态开启。 然后我们还需要在这台机器上安装agent。agent安装在被监控端&#xff0c;收集数据&#xff0c;与监控服务器交互。 # 列出系统上面所有软件名称 rpm -qa |grep zabbix-agent zabbix-agent-3.4.15-…

hello算法笔记之栈与队列

一、栈 遵循先入后出&#xff08;First In, Last Out&#xff09;原则的线性数据结构。 只能在栈顶添加或删除元素 链表实现形式&#xff1a; ①栈以链表形式实现&#xff1a; ②以数组形式实现 二、队列 遵循先入先出&#xff08;First In, First Out&#xff09;规则的线…

使用WinDbg分析Windows dump文件方法

需要使用WinDbg工具来分析windows系统产生的dump文件&#xff0c;此工具属于Windows SDK的一个组件&#xff0c;在微软官方网站可以下载&#xff08;链接&#xff09;。 在安装Windows SDK的过程中&#xff0c;可以选择只安装WinDbg&#xff08;Debugging Tools for Windows&a…

数据结构——图

文章目录 **一 图的基本概念****1 定义** **二 图的存储及基本操作****1 邻接矩阵法****2 邻接表法****3 十字链表****4 邻接多重表****5 图的基本操作** **三 图的遍历****1 广度优先搜索BFS****2 深度优先搜索DFS****3 图的遍历与连通性** **四 图的应用****1 最小生成树****…