Linux---网络服务---DHCP原理与配置理论+实验

    技术2025-06-14  23

    文章目录

    一:了解DHCP服务1.1:DHCP概述1.2:DHCP的优点1.3:DHCP分配方式 二:DHCP的工组原理2.1:DHCP的租约过程(重点)2.2:DHCP租约详解(重点)2.21:客户机发送IP请求:发送DHCP discover广播2.22:服务器收到客户机的请求响应发送:DHCP offer广播2.23:客户机选项IP地址:发送DHCP requsest广播2.24:服务器确定租约:发送DHCP ACK广播2.25:重新登录 三:使用DHCP动态配置主机地址3.1:DHCP服务3.2:可分配的地址信息主要包括(重要)3.3安装DHCP服务器3.4:dhcpd.conf的内容构成3.5:全局设置,作用于整个DHCP服务器3.6:subnet网段声明,作用整个网段3.7:host主机声明,作用于单个主机实验:配置DHCP实验:2:测试DHCP全局跟子段两者DNS地址冲突首先会分配哪个?实验3:服务器固定给客户机分配IP

    一:了解DHCP服务

    1.1:DHCP概述

    DHCP服务器的作用是2113为客户机分配IP地址。

    DHCP方式对上网的用户进行临时的地bai址分配。也就是你的电脑连上du网,DHCP服务器才从地址池里临时分配一个IP地址给你,每次上网分配的IP地址可能会不一样,这跟当时IP地址资源有关。

    DHCP也可用于直接为服务器和桌面计算机分配地址,并且通过一个PPP代理,也可为拨号及宽带主机,以及住宅NAT网关和路由器分配地址。DHCP一般不适用于使用在无边际路由器和DNS服务器上。

    1.2:DHCP的优点

    internet是目前世界用户最多的服务之一,有几亿人在使用internet。由于上网时间的不确定性以及使用人员的技术水平不同,为每位用户分配一个固定的IP地址,不仅造成了IP地址的浪费,也会为ISP服务商来带来高额的维护成本。

    减少管理员的工作量避免输入错误的可能避免IP地址冲突当更改IP地址段时,不仅要重新配置每个用户的IP地址提高了IP地址的利用率方便客户端的配置

    1.3:DHCP分配方式

    自动分配(Automatic allocation)

    手动分配(Manual Allocation)

    动态分配(Dynamic Allocation)

    自动分配是当DHCP客户端第一次成功的从DHCP服务器获取一个IP地址后,就永久的使用这个IP地址。

    手动分配是由DHCP服务器管理员专门指定的IP地址

    动态分配是当客户端第一次从DHCP服务器获取到IP地址后,并非永久使用该地址,每次使用完后,DHCP客户端就需要释放这个IP,供其他客户端使用。

    第三种是最常见的使用形式。

    二:DHCP的工组原理

    2.1:DHCP的租约过程(重点)

    1:discover 请求ip地址 客户-----> 服务端 广播 2:offer 服务器回应可用ip信息(可用ip,子网掩码,网关,dns,租约期限) 服务器---> 客户机端广播 3:request 客户端请求确认可用ip 客户-----> 服务端 广播 特殊情况:如果offer中的ip被占用 直接回应noack 4:ack 服务端确认ip可用 服务端----> 客户 广播 租约期限 假如8天 租约期限过半 第5天续约 服务器挂了没有DHCP就会获取169.254.0.0/24 有DHCP会自动discover

    2.2:DHCP租约详解(重点)

    2.21:客户机发送IP请求:发送DHCP discover广播

    当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址此时DHCP客户机以广播方式发送DHCP discover发现信息来寻找DHCP服务器因为自己没有IP地址,所以源IP地址为:0.0.0.0 也不知道DHCP的IP地址就发送255.255.255.255广播去寻找

    2.22:服务器收到客户机的请求响应发送:DHCP offer广播

    当DHCP服务器接收到来自客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机.如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP offer的消息中,然后DHCP服务器就广播一则DHCP offer消息(服务端是固定静态IP,客户端没有地址就会发送广播给客户端) 客户机仍没有IP地址,所以发送广播

    2.23:客户机选项IP地址:发送DHCP requsest广播

    DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机 第一个DHCP offer表示:若局域网中同时存在两个DHCP,那么客户机根据收到DHCP offer的顺序来确定使用哪个DHCP服务器的地址 客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天) 一般是剩余一般的时间就会自动续约

    2.24:服务器确定租约:发送DHCP ACK广播

    DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息

    当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化

    此时服务器发出的仍旧是广播,因为客户机还没有IP地址

    2.25:重新登录

    DHCP客户机每次重新登录网络时,不需要在发送DHCP的discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息

    DHCP服务器收到请求后,检查IP地址资源池

    1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机

    2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。

    这里补充一点:当DHCP服务器想客户机出租的IP到期限是10天,那么到达5天的时候就要

    更新租约,也就是说到达续约的一半时候就要更新租约.

    客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约

    若DHCP服务器宕机,客户机租约到期后,会自动释放地址,然后使用169.254.0.0–169.254.255.255网段的地址. 这边169.254.0.0是不能用的.

    三:使用DHCP动态配置主机地址

    3.1:DHCP服务

    为大量客户机自动分配地址,提供集中管理

    减轻管理和维护成本、提高网络配置效率

    3.2:可分配的地址信息主要包括(重要)

    网卡IP地址、子网掩码

    对应的网络地址、广播地址

    默认网关地址

    DNS服务器地址

    3.3安装DHCP服务器

    DHCP服务器软件 centos镜像中的dhcp…rpm dhcp软件包的主要文件 主配置文件:/etc/dhcpd.conf 执行程序:/usr/sbin/dhcpd,/usr/sbin/dhcrelay 执行参数配置:/etc/sysconfig/dhcpd

    3.4:dhcpd.conf的内容构成

    3.5:全局设置,作用于整个DHCP服务器

    ddns-update-style none: ##禁用DNS动态更新 不关闭DNC更新 IP会一直变化 default-lease-time 21600; ##默认的租约期限 max-lease-time 43200; ##最大的租约期限 option domain-name"domain.org"; ##域名”domain.ory“ option domain-name-servers 202.106.0.20; ##分配域名:给dns

    3.6:subnet网段声明,作用整个网段

    参数:设置用于分配的IP地址池option subnet-mask 参数:设置客户机的子网掩码option routers 参数:设置客户机的默认网关地址 [root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf 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; }

    3.7:host主机声明,作用于单个主机

    hardware ethernet 参数:指定对应主机的MAC地址fixed-address参数:指定为该主机保留的IP地址

    查看租约文件

    启动DHCP

    查看租约文件 /var/lib/dhcpd/dhcpd.lease

    [root@localhost ~]# vim /var/lib/dhcpd/dhcpd.leases 或者 [root@localhost ~]# less /var/lib/dhcpd/dhcpd.leases 或者其他的

    实验:配置DHCP

    [root@shuai ~]# setenforce 0 ##设置SELinux 成为permissive模式 临时关闭selinux的 [root@shuai ~]# iptables -F ##清空防火墙 [root@shuai ~]# systemctl status firewalld ##查看防火墙状态 ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 日 2020-06-21 21:46:25 CST; 1 weeks 4 days ago Docs: man:firewalld(1) Main PID: 8741 (firewalld) Tasks: 2 CGroup: /system.slice/firewalld.service └─8741 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 6月 21 21:46:25 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon... 6月 21 21:46:25 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.

    安装DHCP包

    [root@shuai ~]# yum install dhcp* -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00 extras | 2.9 kB 00:00 updates | 2.9 kB 00:00 正在解决依赖关系 --> 正在检查事务 ---> 软件包 dhcp.x86_64.12.4.2.5-79.el7.centos 将被 安装 --> 正在处理依赖关系 libisc-export.so.169()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要 --> 正在处理依赖关系 libdns-export.so.1102()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要 ---> 软件包 dhcp-common.x86_64.12.4.2.5-68.el7.centos.1 将被 升级 已安装: dhcp.x86_64 12:4.2.5-79.el7.centos dhcp-devel.x86_64 12:4.2.5-79.el7.centos 作为依赖被安装: bind-export-libs.x86_64 32:9.11.4-16.P2.el7_8.6 更新完毕: dhcp-common.x86_64 12:4.2.5-79.el7.centos dhcp-libs.x86_64 12:4.2.5-79.el7.centos 作为依赖被升级: dhclient.x86_64 12:4.2.5-79.el7.centos 完毕!

    下一步进行两台主机的网络调配:配成同一个网络模式vmnet1,此时vmnet1相当于交换机

    编辑-----虚拟网络首选项

    [root@shuai ~]# rpm -q dhcp ##查看dhcp安装 dhcp-4.2.5-79.el7.centos.x86_64 [root@shuai ~]# rpm -qc dhcp ##查看dhcp配置 /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf /etc/openldap/schema/dhcp.schema /etc/sysconfig/dhcpd /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd6.leases [root@shuai ~]# cd /etc/dhcp ##进入dhcp目录 [root@shuai dhcp]# ll ##查看dhcp列表 发现里面有dhcpd.conf 总用量 8 drwxr-xr-x. 2 root root 37 4月 2 21:29 dhclient.d drwxr-xr-x. 2 root root 28 7月 3 16:26 dhclient-exit-hooks.d -rw-r--r--. 1 root root 120 4月 2 21:29 dhcpd6.conf -rw-r--r--. 1 root root 117 4月 2 21:29 dhcpd.conf drwxr-x---. 2 root dhcpd 28 7月 3 16:26 scripts

    [root@shuai dhcp]# vim dhcpd.conf ###编辑dhcpd.conf

    [root@shuai dhcp]#cp /usr/share/doc/dhcp*/dhcpd.conf.example ##这边把*换成”-“tab补全 会跳出 dhcp-4.2.5/ dhcp-common-4.2.5/ dhcp-devel-4.2.5/ [root@shuai dhcp]# cp /usr/share/doc/dhcp-/dhcpd.conf.example dhcp-4.2.5/ dhcp-common-4.2.5/ dhcp-devel-4.2.5/ [root@shuai dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcd.conf ##复制文件dhcd.conf cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes ##这边提示是否覆盖源文件 这边选择”yes“

    配置静态网卡

    [root@shuai dhcp]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=“static” ##设置静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=86503bd2-47b6-4518-8a5f-63e4de03d11e DEVICE=ens33 ONBOOT=yes ”开启“ IPADDR=192.168.138.100 ##设置IP地址 PREFIX=24##子网掩码 GATEWAY=192.168.138.1 ##设置网关 ~ :wq保存退出 [root@shuai dhcp]# service network restart ##配置完重启网卡 Restarting network (via systemctl): [ 确定 ] [root@shuai dhcp]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.138.100 netmask 255.255.255.0 broadcast 192.168.138.255 inet6 fe80::fce1:77f:7a9:b103 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:84:c1:e3 txqueuelen 1000 (Ethernet) RX packets 134 bytes 15864 (15.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 353 bytes 34790 (33.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 100220 bytes 8487504 (8.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 100220 bytes 8487504 (8.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:95:60:04 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    配置dhcp文件

    [root@shuai dhcp]# vim /etc/dhcp/dhcpd.conf ##进入dhcp编辑 进去今后 :set nu设置行号 1 # dhcpd.conf 2 # 3 # Sample configuration file for ISC dhcpd 4 # 5 6 # option definitions common to all supported networks... 7 option domain-name "example.org"; 8 option domain-name-servers ns1.example.org, ns2.example.org; ####ns1.example.org, ns2.example.org;删除换成8.8.8.8; 8 option domain-name-servers 8.8.8.8; ####分配一个DNS 地址 9 10 default-lease-time 600; ###默认租约 11 max-lease-time 7200; ##最大租约 12 13 # Use this to enble / disable dynamic dns updates globally. 14 #ddns-update-style none; 15 16 # If this DHCP server is the official DHCP server for the local 17 # network, the authoritative directive should be uncommented. 18 #authoritative; 19 20 # Use this to send dhcp log messages to a different log file (you also 21 # have to hack syslog.conf to complete the redirection). 22 log-facility local7; 23 24 # No service will be given on this subnet, but declaring it helps the 25 # DHCP server to understand the network topology. 26 27 subnet 10.152.187.0 netmask 255.255.255.0 { ##这边地址是空的我们给他分配一下 28 } 27 subnet 192.168.138.0 netmask 255.255.255.0 { ##这边配置网段跟子网掩码 28 range 192.168.138.100 192.168.138.200; ##配置地址池 子选项range前面空两格 后面的分号一定不能漏掉 很多小伙伴粗心大意 漏掉就配置起不来 29 option routers 192.168.138.1; ##这边配置网关 :wq保存退出 [root@shuai ~]# systemctl start dhcpd ##重启dhcpd服务 [root@shuai ~]# netstat -nuap ##查看服务相关进程

    下一步查看客户端能不能获取

    打开客户机网络设置一下自动获取IP地址

    已经获取到DHCP的IP

    实验:2:测试DHCP全局跟子段两者DNS地址冲突首先会分配哪个?

    [root@localhost ~]# vim /etc/dhcp/dhcpd.conf ##编辑配置文件

    :wq ##保存退出

    [root@localhost ~]# systemctl restart dhcpd ##重启dhcpd服务 [root@localhost ~]# netstat -nuap Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:5353 0.0.0.0:* 8610/avahi-daemon: udp 0 0 192.168.122.1:53 0.0.0.0:* 9679/dnsmasq udp 0 0 0.0.0.0:67 0.0.0.0:* 18584/dhcpd udp 0 0 0.0.0.0:67 0.0.0.0:* 9679/dnsmasq udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:45311 0.0.0.0:* 8610/avahi-daemon: udp 0 0 127.0.0.1:323 0.0.0.0:* 8654/chronyd udp 0 0 0.0.0.0:720 0.0.0.0:* 8602/rpcbind udp6 0 0 :::111 :::* 1/systemd udp6 0 0 ::1:323 :::* 8654/chronyd udp6 0 0 :::720 :::* 8602/rpcbind

    下一步进入客户机

    先释放地址ipconfig /release

    然后在获取ipconfig /renew

    实验结果当DHCP在全局跟子段地址同时冲突时会首先分配子段的地址

    实验3:服务器固定给客户机分配IP

    获取服务器的MAC地址

    这边我们就直接复制

    打开dhcp配置文件

    [root@localhost ~]# vim /etc/dhcp/dhcpd.conf

    进入直接/ fix查找

    配置完成在重启dhcpd服务都是相同的步骤

    最后去客户机获取地址就行

    感谢观看,不足之处多多指教

    Processed: 0.013, SQL: 9