三、DHCP 网络服务

3.1 DHCP 简介

DHCP(Dynamic Host Configuration Protocol:动态主机配置协议)是一个工做在应用层的局域网网络协议,数据传输时使用 UDP 不可靠传输协议工做,一般被应用在大型的局域网络环境中,主要做用是集中的管理、分配网络资源,使网络环境中的主机能动态的得到 IP 地址、Gateway地址、DNS 服务器地址等信息,并可以提高地址的使用率。小程序

3.2 DHCP 工做原理(租约四部曲+续租)

在这里插入图片描述

3.2.1 DHCP 客户端进行 IP 请求

当一个 DHCP 客户机启动时,会自动将本身的 IP 地址配置成 0.0.0.0,因为使用 0.0.0.0 不能进行正常通讯,因此客户机就必须经过 DHCP 服务器来获取一个合法的地址。因为客户机不知道 DHCP 服务器的 IP 地址,因此**它使用 0.0.0.0 的地址做为源地址,使用 255.255.255.255 做为目标地址。使用 UDP 67 端口做为目的端口来广播请求 IP 地址信息。**广播信息 DHCP Discover 中包含了 DHCP 客户机的 MAC 地址和计算机名,以便使用 DHCP 服务器能肯定是哪一个客户机发送的请求。vim

3.2.2 DHCP 服务器相应请求

当 DHCP 服务器接收到客户机请求 IP 地址的信息时,它就在本身的 IP 地址池中查找是否有合法的 IP 地址提供给客户机。若是有,DHCP 服务器就将此 IP 地址作上标记,加入到 DHCP OFFER 的消息中,而后 DHCP 服务器就广播一则包括下列信息的 DHCP OFFER 消息。centos

DHCP 客户机的 MAC 地址:DHCP 服务器提供的合法 IP 地址;子网掩码;默认网关(路由);租约的期限;DHCP 服务器的IP地址-MAC
由于DHCP 客户机尚未 IP 地址,因此 DHCP 服务器使用本身的 IP 地址做为源地址,使用 255.255.255.255 做为目标地址,使用 UDP 68 端口做为源端口来广播 DHCP OFFER信息。
bash

3.2.3 DHCP 客户机选择 IP

DHCP 客户机从接收到的第一个 DHCP OFFER 消息中选择 IP 地址,发出 IP 地址的 DHCP 服务器将该地址保留,这样该地址就不能提供给另外一个 DHCP 客户机。当客户机从第一个 DHCP 服务器接收 DHCP OFFER 并选择IP地址后,DHCP 租约的第三个过程发生。客户机将DHCP REQUEST 消息光波导全部的 DHCP 服务器,代表它接收提供的内容。DHCP REQUEST 消息包括为客户机提供IP 配置的服务器的服务表示(IP地址)。DHCP 服务器查看服务器标识符字段,以肯定它本身是否被选择为指定的客户机提供IP地址,若是那些 DHCP OFFER 被拒绝,则 DHCP 服务器会取消提供并保留其 IP 地址以用于下一个 IP 租约请求。服务器

在客户机选择 IP 的过程当中,虽然客户机选择了 IP 地址,可是尚未配置 IP 地址,而在一个网络中可能有几个 DHCP 服务器,因此客户机仍然使用 0.0.0.0 的地址做为源地址,使用 255.255.255.255 做为目标地址,使用 UDP 67 端口做为目标的端口来广播 DHCP REQUEST 信息。网络

3.2.4 DHCP 服务器确认租约

服务确认租约,也称为 DHCPACK/DHCPNAK。dom

DHCP 服务器接收到 DHCPREQUEST 消息后,以 DHCPACK 消息的形式向客户机广播成功的确认,该消息包含有IP地址的有效租约和其余可能配置的信息。虽然服务器确认了客户机的租约请求,可是客户机尚未收到服务器的 DHCPACK 消息,因此服务器仍然使用本身的IP地址做为源地址,使用 UDP67 端口做为源端口,使用 255.255.255.255 做为目标地址,使用 UDP68 端口做为目的端口来广播DHCPACK 信息。当客户机收到 DHCPACK 消息时,它就配置了IP地址,完成了TCP/IP的初始化。编辑器

3.2.5 DHCP 客户机续租

在这里插入图片描述

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

若是在租期过去50%的时候尚未更新,则DHCP客户机将在租期过去87.5%的时候在此向其提供IP地址的DHCP服务器联系。若是还不成功。到租约的100%时候,DHCP 客户机必须放弃这个IP地址,从新申请。若是此时无DHCP 服务器可用,DHCP 客户机会使用169.254.0.0/16中随机的一个地址,而且每隔5分钟再进行尝试。测试

3.3 DHCP 服务搭建

3.3.1 环境准备

主机名 服务 IP
test1 dhcp 客户端 ??
test2 dhcp 服务端 192.168.117.131
  • 两台主机,网络为 nat 模式
  • 关闭防火墙
iptables -F
	setenforce 0
  • 注:若是您用的是 VMware 虚拟机,还请关闭虚拟网络编辑器的 DHCP 功能

3.3.2 DHCP 相关信息

  • 软件名
dhcp:DHCP 服务软件包
	dhcp-common:DHCP 命令软件包
  • 服务名
dhcpd:DHCP 服务名
	dhcrelay:DHCP 中继服务名
  • 端口号
udp 67:客户端的目标端口,用来向服务端请求 DHCP
	udp	68:服务端的源端口,用来向客户端回复数据包
  • 配置文件
/etc/dhcp/dhcpd.conf:默认为空文件,须要导入模板文件
	/usr/share/doc/dhcp-4.*.*/dhcp.conf.sample:DHCP 的模板配置文件
	/etc/sysconfig/shcrelay:中继配置文件

3.3.3 DHCP 配置文件详解

subnet 10.5.5.0 netmask 255.255.255.224 { 
#声明要分配的网段和子网掩码
  range 10.5.5.26 10.5.5.30;
#声明可用的IP地址
  option domain-name-servers ns1.internal.example.org;
#设置DNS域
  option domain-name "internal.example.org";
#设置DNS服务器地址
  option routers 10.5.5.1;
#默认网关的地址
  option broadcast-address 10.5.5.31;
#广播地址
  default-lease-time 600;
#默认租约(s)
  max-lease-time 7200;
#最大租约(s)
}
host fantasia { 
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}
#给某个主机设置固定的IP地址

3.4 DHCP 实验部署

3.4.1 DHCP 基本功能

#查看 dhcp 和 dhcp-common rpm包有没有安装
	[root@test2 ~]# rpm -q dhcp
	未安装软件包 dhcp 
	[root@test2 ~]# rpm -q dhcp-common
	dhcp-common-4.2.5-68.el7.centos.1.x86_64
#安装 DHCP
	[root@test2 ~]# yum install -y dhcp
#生成配置文件:将模板文件粘贴到配置文件
	[root@test2 ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#修改配置文件
#将配置文件的前几个 subnet 声明注释掉,修改最后一个 subnet
	[root@test2 ~]# vim /etc/dhcp/dhcpd.conf 
	subnet 192.168.117.0 netmask 255.255.255.0 { 
	#dhcp 服务器所在网段
	  range 192.168.117.200 192.168.117.210;
	# 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;
	}
#重启 dhcp 服务
	[root@test2 ~]# systemctl restart dhcpd
DHCP 功能测试
#另外一台主机开启 IP 自动获取功能
	[root@test1 ~]# nmtui
  • 编辑链接 ---- 回车键
    在这里插入图片描述
  • 网卡名 ens33 ---- 回车键
    在这里插入图片描述
  • 光标移动到“手动” ---- 按回车键改成“自动”
    在这里插入图片描述
  • 光标下移到“肯定” ---- 按回车键,完成配置
    在这里插入图片描述
#重启网卡并查看IP
	[root@test1 ~]# systemctl restart network
	[root@test1 ~]# ip a
客户端成功获取服务端地址池中的 IP

在这里插入图片描述

DHCP 服务端查看 IP 租约日志
[root@test2 ~]# tail -10 /var/log/messages 
Oct 14 00:04:34 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: DHCPACK on 192.168.117.200 to 00:0c:29:80:3b:35 (test1) via ens33
Oct 14 00:08:29 test2 dhcpd: DHCPREQUEST for 192.168.117.200 from 00:0c:29:80:3b:35 (test1) via ens33
Oct 14 00:08:29 test2 dhcpd: ns1.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: DHCPACK on 192.168.117.200 to 00:0c:29:80:3b:35 (test1) via ens33

3.4.2 固定地址分配

#获取客户机的 mac 地址
	[root@test1 ~]# ip a | awk 'NR==8 {print $2}'
	00:0c:29:80:3b:35
#在实验3.4.1 的基础上,编辑 DHCP 服务器的配置文件并重启服务
	[root@test2 ~]# vim /etc/dhcp/dhcpd.conf
	host fantasia { 
	  hardware ethernet 00:0c:29:80:3b:35;
	  #客户端网卡 mac 地址
	  fixed-address 192.168.117.205;
	  #指定客户端 IP
	} 
	[root@test2 ~]# systemctl restart dhcpd
#重启 DHCP 客户机的网卡并查看IP
	[root@test1 ~]# systemctl restart network
客户端成功获取服务端地址池中的指定 IP:192.168.117.205

在这里插入图片描述

DHCP 服务端查看 IP 租约日志
[root@test2 ~]# tail -10 /var/log/messages 
Oct 14 22:00:45 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: DHCPOFFER on 192.168.117.205 to 00:0c:29:80:3b:35 via ens33
Oct 14 22:00:45 test2 dhcpd: Dynamic and static leases present for 192.168.117.205.
Oct 14 22:00:45 test2 dhcpd: Remove host declaration fantasia or remove 192.168.117.205
Oct 14 22:00:45 test2 dhcpd: from the dynamic address pool for 192.168.117.0/24
Oct 14 22:00:45 test2 dhcpd: DHCPREQUEST for 192.168.117.205 (192.168.117.131) from 00:0c:29:80:3b:35 via ens33
Oct 14 22:00:45 test2 dhcpd: DHCPACK on 192.168.117.205 to 00:0c:29:80:3b:35 via ens33
Oct 14 22:01:01 test2 systemd: Started Session 2 of user root.

3.4.3 超级做用域(同一局域网)

超级做用域介绍

DHCP 服务器可为单个网络上的客户端提供多个做用域租约地址。
在这里插入图片描述

实验环境准备

准备三台服务器并处于同一网络模式,一个 DHCP 服务器,两个客户端

主机名 服务 IP
dhcp-client1 DHCP 客户端 ??
dhcp-client2 DHCP 客户端 ??
dhcp-server DHCP 服务端 192.168.117.2
实验步骤
#设置 DHCP 服务器的单臂路由所需子网卡
	[root@dhcp-server ~]# cd /etc/sysconfig/network-scripts/
	[root@dhcp-server network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1
#编辑这个文件修改网卡名和 IP 地址
	[root@dhcp-server network-scripts]# vim ifcfg-ens33:1
	NAME=ens33
	DEVICE=ens33:1
	ONBOOT=yes
	BOOTPROTO=none
	IPADDR="192.168.100.132"
	NETMASK=255.255.255.0
	GATEWAY=192.168.117.2
	DNS1=192.168.117.2
#重启网卡并查看IP
	[root@dhcp-server network-scripts]# systemctl restart network
	[root@dhcp-server network-scripts]# ip a
	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
	2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:05:c5:49 brd ff:ff:ff:ff:ff:ff
    inet 192.168.117.132/24 brd 192.168.117.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.132/24 brd 192.168.100.255 scope global noprefixroute ens33:1
    #子 IP 配置成功
       valid_lft forever preferred_lft forever
#开启内核路由转发功能
	[root@dhcp-server ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
#刷新内核参数
	[root@dhcp-server ~]# sysctl -p
	net.ipv4.ip_forward = 1
#安装 DHCP 服务
	[root@dhcp-server ~]# yum install -y dhcp
#生成配置文件
	[root@dhcp-server ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
#修改配置文件
	[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf 
	shared-network 100-117 { 
	  subnet 192.168.117.0 netmask 255.255.255.0 { 
	    option routers 192.168.117.132;
	    range 192.168.117.10;
	  }
	  subnet 192.168.100.0 netmask 255.255.255.0 { 
	    option routers 192.168.100.132;
	    range 192.168.100.10 192.168.100.20;
	  }
	}
#重启 DHCP 服务
	[root@dhcp-server ~]# systemctl restart dhcpd
#dhcp 客户端开启 IP 自动获取功能(详见:3.4.1)
#dhcp-client1 重启网卡,并查看IP
	[root@dhcp-client1 ~]# ifdown ens33;ifup ens33
	成功断开设备 'ens33'。
	链接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/9)

在这里插入图片描述

#dhcp-client2 重启网卡,并查看IP
	[root@dhcp-client2 ~]# ifdown ens33;ifup ens33
	成功断开设备 'ens33'。
	链接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/9)

在这里插入图片描述

#测试两个客户端可否通讯
[root@dhcp-client1 ~]# ping 192.168.117.10
PING 192.168.117.10 (192.168.117.10) 56(84) bytes of data.
64 bytes from 192.168.117.10: icmp_seq=1 ttl=64 time=0.645 ms
64 bytes from 192.168.117.10: icmp_seq=2 ttl=64 time=0.330 ms
64 bytes from 192.168.117.10: icmp_seq=3 ttl=64 time=0.393 ms
64 bytes from 192.168.117.10: icmp_seq=4 ttl=64 time=0.366 ms

3.4.4 DHCP 中继

DHCP 中继介绍

DHCP Relay(DHCPR)中继是一个小程序,能够实如今不一样子网和物理网段之间处理和转发 dhcp 信息的功能。
在这里插入图片描述

环境准备(VMware 虚拟机)
主机名 服务 网络链接模式 IP
dhcp-server DHCP 服务端 VMnet8 192.168.117.130
router DHCP 中继 VMnet8 + VMnet9 192.168.117.131 + 192.168.200.100
dhcp-client 外网客户端 VMnet8 + VMnet9 ??
关闭防火墙(……略……)
VMware 虚拟网络配置
  • 打开虚拟网络编辑器,添加虚拟网段 VMnet8 和 VMnet9,关闭 DHCP 功能
    在这里插入图片描述
    在这里插入图片描述

DHCP 服务器网络配置

在这里插入图片描述

DHCP 中继网络配置
  • DHCP 中继端在添加一块网络适配器,网络分别处于 VMnet8 和 VMnet9
    在这里插入图片描述
外网客户端网络配置
  • dhcp-client 端在添加一块网络适配器,网络分别处于 VMnet8 和 VMnet9
    在这里插入图片描述
配置 DHCP 服务端
#将DHCP服务器的网关地址改成为DHCP中继的 IP:192.168.117.131(VMnet8 的IP地址)
	[root@dhcp-server ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
	GATEWAY=192.168.117.131
#安装 DHCP 服务
	[root@dhcp-server ~]# yum install -y dhcp
#修改配置文件
	[root@dhcp-server ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
	[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf 
	#生明两个 subnet,其余配置能够不作操做或删除
	subnet 192.168.117.0 netmask 255.255.255.0 { 
	  range 192.168.117.200 192.168.117.250;
	  option routers 192.168.117.131;
	  #路由IP为 DHCP 中继服务器 VMnet8 IP
	}
	subnet 192.168.200.0 netmask 255.255.255.0 { 
	  range 192.168.200.200 192.168.200.250;
	  option routers 192.168.200.100 ;
	  #路由IP为 DHCP 中继服务器 VMnet9 IP
	}
#重启 DHCP 服务和网卡
	[root@dhcp-server ~]# systemctl restart dhcpd network
配置 DHCP 中继
#配置网络(在原有网络基础上配置 192.168.200 段的 IP)
	[root@router network-scripts]# cd /etc/sysconfig/network-scripts/
	[root@router network-scripts]# \cp -af ifcfg-ens33 ifcfg-ens37
	[root@router network-scripts]# vim ifcfg-ens37
	#只保留如下配置文件便可
	DEVICE=ens37
	NAME=ens37
	ONBOOT=yes
	BOOTPROTO=none
	IPADDR="192.168.200.100"
#重启网络网卡
	[root@router network-scripts]# systemctl restart network
#查看 IP 以下

在这里插入图片描述

#安装 DHCP 服务
	[root@router network-scripts]# yum install -y dhcp
#开启 DHCP 中继功能,指定 DHCP 服务器的地址
	[root@router ~]# dhcrelay -i ens33 -i ens37 192.168.117.130
	Dropped all unnecessary capabilities.
	Internet Systems Consortium DHCP Relay Agent 4.2.5
	Copyright 2004-2013 Internet Systems Consortium.
	All rights reserved.
	For info, please visit https://www.isc.org/software/dhcp/
	Listening on LPF/ens33:1/00:0c:29:b4:a8:04
	Sending on   LPF/ens33:1/00:0c:29:b4:a8:04
	Listening on LPF/ens37/00:0c:29:b4:a8:0e
	Sending on   LPF/ens37/00:0c:29:b4:a8:0e
	Listening on LPF/ens33/00:0c:29:b4:a8:04
	Sending on   LPF/ens33/00:0c:29:b4:a8:04
	Sending on   Socket/fallback
#开启内核路由转发功能
	[root@router network-scripts]# vim /etc/sysctl.conf 
	net.ipv4.ip_forward=1
#刷新内核参数
	[root@router network-scripts]# sysctl -p
	net.ipv4.ip_forward = 1
配置外网客户端
  • IP 改成自动获取(详:3.4.1)
[root@dhcp-client ~]# nmtui
  • 查看主机 IP
[root@dhcp-client ~]# ip a
  • IP 地址获取成功
    在这里插入图片描述
IP 地址获取失败可能缘由
  • 请检查您的网络适配器设置。
  • 请检查防火墙是否关闭。
  • 检查 dhcp-sever 和 router 主机的网络连通性,注意 dhcp-server 网关地址指向。
  • 检查 dhcp-server 中 DHCP 服务配置文件。
相关文章
相关标签/搜索