DHCP服务器
- DHCP(Dynamic Host configuration Protocol)动态主机配置协议
- DHCP协议可以为客户端自动发放TCP/IP参数信息
- ip地址,子网掩码,网关,DNS等信息
- 避免了一些繁琐的地址配置操作
使用DHCP的好处
- 减少管理员的工作量
- 避免输入错误的可能
- 避免IP地址冲突
- 当更新IP地址段时,不需要重新配置每个用户的IP地址
- 方便客户端的配置
DHCP的分配方式
- 自动分配:分配到一个IP地址后永久使用
- 手动分配:由DHCP管理员专门指定IP地址
- 动态分配:使用完后释放该IP,供其他客户端使用
DHCP工作原理
- 客户端需要寻求网络ip地址和其他网络参数,向网络中发送广播请求,客户端发出的请求名为DHCP DISCOVER。
- 如果广播网络中有可以分配ip地址的服务器,服务器会返回相应的应答,告诉客户端可以分配IP地址,服务器返回的包叫做DHCP OFFER包含ip地址,子网掩码,网关,DNS等信息。
- 客户端在收到服务器的DHCP OFFER包后,会广播DHCP REQUEST包,用以通知DHCP服务器和未选定的DHCP服务器。
- 服务端收到DHCP REQUEST后检查收到的包,如果包内的地址和所提供的地址一致,并且可用,证明客户端使用的事自己提供的地址,此时服务端会向客户端发送DHCP ACK包,如果包内的地址已被占用,则发送DHCP NOACK。
- 客户端在收到DHCP ACK包后,使用服务端给的ip地址,分配完成,如果收到DHCP NOACK包则重新广播DISCOVER。
DHCP租期时间
- 申请到IP地址后,DHCP客户端中会保存三个定时器,分别用来控制租期更新,租期重绑定和租期失效。DHCP服务器为DHCP客户端分配IP地址时会指定三个定时器的值。如果DHCP服务器没有指定定时器的值,DHCP客户端会使用缺省值,缺省租期为1天。默认情况下,还剩下50%的租期时,DHCP客户端开始租约更新过程,DHCP客户端向分配IP地址的服务器发送DHCP请求报文来申请延长IP地址的租期。DHCP服务器向客户端发送DHCP确认报文,给予DHCP客户端一个新的租期。
- DHCP客户端发送DHCP请求报文续租时,如果DHCP客户端没有收到DHCP服务器的DHCP应答报文。默认情况下,重绑定定时器在租期剩余12.5%的时候超时,超时后,DHCP客户端会认为原DHCP服务器不可用,开始重新发送DHCP请求报文。网络上任何一台DHCP服务器都可以应答DHCP确认或DHCP非确认报文。
- 如果收到DHCP确认报文,DHCP客户端重新进入绑定状态,复位租期更新定时器和重绑定定时器。如果收到DHCP非确认报文,DHCP客户端进入初始化状态。此时,DHCP客户端必须立刻停止使用现有IP地址,重新申请IP地址。
配置DHCP服务器
1.安装DHCP软件包 yum install dhcp* -y
2.安装完成后对主配置文件 /etc/dhcp/dhcpd.conf 进行修改
3.调整虚拟机的网络连接为仅主机模式(VMnet1),修改网络配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
4.修改完成后重启网络配置并验证
5.关闭安全防护,防火墙规则,启DHCP服务,并验证
6.重新开一台win10虚拟机,网络连接为仅主机模式(VMnet1)
7.为win10主机指定一个固定的IP地址
把win10主机的MAC地址添加到DHCP服务器的配置文件中,与指定的IP地址绑定
更改配置文件后需重启DHCP服务
[root@localhost ~]# systemctl restart dhcpd
回到win10主机上重新获取IP地址
DHCP中继原理
DHCP客户端使用IP广播来寻找同一网段上的DHCP服务器,当服务器和客户端处在不同网段DHCP客户使用IP广播来寻找同一网段上的DHCP服务器。当服务器和客户段处在不同网段,即被路由器分割开来时,路由器是不会转发这样广播包的。因此可能需要在每个网段上设置一个DHCP服务器,虽然DHCP只消耗很小的一部分资源的,但多个 DHCP服务器,毕竟要带来管理上的不方便。DHCP中继的使用使得一个DHCP服务器同时为多个网段服务成为可能。
DHCP中继的配置
实验环境
eNSP、CentOS 7.6
实验步骤
1.规划网络拓扑图并配置
LSW1上配置信息:
[sw1]dis cu
#
sysname sw1
#
vlan batch 10 20 100
#
interface Ethernet0/0/1
port link-type access
port default vlan 10
#
interface Ethernet0/0/2
port link-type access
port default vlan 20
#
interface Ethernet0/0/3
port link-type access
port default vlan 100
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 4094
#
return
[sw1]
LSW2上配置信息:
[SW2]dis cu
#
sysname SW2
#
vlan batch 10 20 100
#
dhcp enable
#
interface Vlanif1
#
interface Vlanif10
ip address 192.168.10.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.100.100
#
interface Vlanif20
ip address 192.168.20.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.100.100
#
interface Vlanif100
ip address 192.168.100.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 192.168.100.100
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 4094
#
return
[SW2]
cloud1上配置:
2.CentOS 7.6虚拟机中绑定VMnet2网卡,更改网络配置文件,重启网络
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::692f:adf0:b798:89bc prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:19:bd:1b txqueuelen 1000 (Ethernet)
RX packets 12896 bytes 15326779 (14.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2763 bytes 210133 (205.2 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 736 bytes 74640 (72.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 736 bytes 74640 (72.8 KiB)
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:53:c1:a5 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
[root@localhost ~]#
3.更改DHCP服务的配置文件
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
[root@localhost ~]# systemctl restart dhcpd
4.验证网络连通性
[root@localhost ~]# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=255 time=35.2 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=255 time=31.6 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=255 time=23.8 ms
64 bytes from 192.168.100.1: icmp_seq=4 ttl=255 time=38.4 ms
64 bytes from 192.168.100.1: icmp_seq=5 ttl=255 time=33.3 ms
64 bytes from 192.168.100.1: icmp_seq=6 ttl=255 time=28.5 ms
^C
--- 192.168.100.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5010ms
rtt min/avg/max/mdev = 23.854/31.851/38.477/4.713 ms
[root@localhost ~]# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=255 time=40.9 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=255 time=35.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=255 time=27.4 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=255 time=24.4 ms
^C
--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 24.498/32.174/40.920/6.557 ms
[root@localhost ~]# ping 192.168.20.1
PING 192.168.20.1 (192.168.20.1) 56(84) bytes of data.
64 bytes from 192.168.20.1: icmp_seq=1 ttl=255 time=30.7 ms
64 bytes from 192.168.20.1: icmp_seq=2 ttl=255 time=27.4 ms
64 bytes from 192.168.20.1: icmp_seq=3 ttl=255 time=26.4 ms
64 bytes from 192.168.20.1: icmp_seq=4 ttl=255 time=40.6 ms
^C
--- 192.168.20.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 26.415/31.309/40.601/5.599 ms
[root@localhost ~]#
5.拓扑图中两个PC网络配置为DHCP,进行验证
PC1
PC2
至此,整个实验成功完成配置!