DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),是由Internet工作任务小组设计开发的,专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议。可为局域网中的主机分配IP地址。
Internet服务用户众多,若为每位用户分配固定的IP地址,这样不仅为ISP服务商带来巨大的压力,也会造成IP地址的浪费。使用DHCP服务可以自动为用户分配IP地址,并分配的IP地址有租约期限,地址过期自动回收,这样可带来巨大的便利。DHCP的优势如下:
减少管理员的工作量避免IP地址冲突当网络更改IP地址段时,不需要再重新配置每个用户的IP地址提高了IP地址的利用率方便客户端的配置在网络中假设一台专用的DHCP服务器,负责集中分配各种网络地址参数(主要包括IP地址,子网掩码,广播地址,默认网关地址,DNS服务器地址),其他主机作为DHCP客户机,将网卡配置为自动获取地址,即可与DHCP服务器进行通信,完成自动配置过程。 DHCP服务器提供了三种IP地址的分配方式:自动分配,手动分配,动态分配。
自动分配:当DHCP客户机第一次成功的从DHCP服务器获取到一个IP地址后,就永久的使用这个IP地址手动分配:由DHCP服务器管理员专门指定IP地址动态分配:当DHCP客户机第一次从DHCP服务器获得IP地址后,并非永久的使用该地址,而是在每次使用完后,DHCP客户机就会释放这个IP地址,供其他客户机使用客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程。这个过程我们认为大致分为四个阶段:discover、offer、request和ack。
discover:对应图中(1)过程,DHCP客户机在局域网中通过广播的形式,去寻找DHCP服务器请求IP;offer:对应图中(2)过程,DHCP服务端收到请求后,通过广播对客户机进行回应,包括ip地址、子网掩码、默认网关、DNS服务器、租约等信息;request:对应图中(3)过程,客户端向服务器确认请求的IP可用;ack:对应图中(4)过程,服务器确认地址可用,确认完成后,客户端可真正使用此IP地址。具体过程如下:
客户机请求IP地址:发送DHCP discover广播 当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址,此时DHCP客户机以广播方式发送DHCP discover发现信息,来寻找DHCP服务器,因为自己没有IP地址,所以源IP地址为:0.0.0.0 同时也不知道DHCP服务器地址,所以发送广播255.255.255.255 在此过程中,若局域网中存在多台DHCP服务器,客户端先收到哪台服务器offer则先向哪台DHCP服务器请求地址,但最终使用的IP地址不一定就是这台服务器提供的,因为要四个过程都完成,才能最终确定使用的IP地址,若过程中断(特别是确认IP地址可用的request过程回应不可用noack),则重新discover。
当DHCP服务器接收到来自客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机,如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP offer的消息中,然后DHCP服务器就广播一则DHCP offer消息,客户机仍没有IP地址,所以发送广播。
DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,并向发出IP地址的DHCP服务器进行确认,客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天)
服务器确定租约:发送DHCP ACK广播 DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化 此时服务器发出的仍旧是广播,因为客户机还没有IP地址 若请求的IP地址不可用,服务器则回应noack,客户端从discover重新开始请求。 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约 客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约 若DHCP服务器宕机,客户端找不到DHCP服务器,仍会一直寻找,若在客户机租约到期时依然找不到服务器,则会自动释放地址,然后使用169.254.0.0–169.254.255.255网段的地址。
对于169.254.0.0这个网段的地址,会在客户端配置了自动分配地址的服务,且网络中有没有提供服务的服务端时出现,是无效地址。
dhcp软件包的主要文件
主配置文件:/etc/dhcpd.conf执行程序:/usr/sbin/dhcpd,/usr/sbin/dhcrelay主配置文件只用来配置软件包具体实现的功能的,而执行程序一般是用来控制服务的开启关闭。
DHCP主配置文件的整体内容如下
[root@localhost ~]# vi /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ... 省略部分内容 option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org; default-lease-time 600; max-lease-time 7200; ddns-update-style none; ... subnet 10.152.187.0 netmask 255.255.255.0 { } ... host passacaglia { hardware ethernet 0:0:c0:5d:bd:95; filename "vmunix.passacaglia"; server-name "toccata.fugue.com"; } .... 省略部分内容其中包含全局配置、局部配置和固定主机配置
全局配置–作用在整个DHCP服务器 ddns-update-style none; 禁止dns动态更新 default-lease-time 21600; 默认租约期限 max-lease-time 43200; 最大租约期限 option domain-name"domain.org"; 指定域名 option domain-name-servers 202.106.0.20; 指定分配dns地址 局部配置–作用在指定的网段 subnet 10.152.187.0 netmask 255.255.255.0 { ##可在这里添加参数,如租约期限、域名、域名服务器等 } 固定主机配置–可为指定主机分配指定的IP地址 host passacaglia { hardware ethernet 0:0:c0:5d:bd:95; filename "vmunix.passacaglia"; server-name "toccata.fugue.com"; }DHCP服务配置
一台DHCP服务器(centos7.6)
网卡模式:先选NAT模式,联网下载软件包 后选仅主机模式192.168.100.41/24软件包:dhcp一台DHCP客户端(Windows 10)
网卡模式:仅主机模式1)网卡NAT模式 在VMware虚拟机里,为虚拟机选择VMnet8网卡NAT模式,右击虚拟机->设置->网络适配器->选NAT模式 2)网卡配置 现将网卡改成dhcp模式,去自动获取一个IP地址,让我们可以上网下载dhcp软件包;静态设置较麻烦,且后面也不用这个IP地址,所以用dhcp模式过渡。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp ##改成dhcp 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=cc8fe223-9f79-414d-a8a3-501fe6784038 DEVICE=ens33 ONBOOT=yes ##改成yes,激活网卡 [root@localhost ~]# systemctl restart network3)下载dhcp软件包 [root@localhost ~]# yum -y install dhcp 4)更改网卡模式 在VMware虚拟机里,为虚拟机选择VMnet1网卡仅主机模式,右击虚拟机->设置->网络适配器->自定义->选VMnet1模式 5)更改网卡配置 将网卡配置改为静态模式,作为提供服务的DHCP服务器一定要用固定的IP地址,否则客户端改如何找到服务。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static ##改成静态模式 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=cc8fe223-9f79-414d-a8a3-501fe6784038 DEVICE=ens33 ONBOOT=yes ##改成yes激活网卡 IPADDR=192.168.100.41 #IP地址 NETMASK=255.255.255.0 ##子网掩码 GATEWAY=192.168.100.2 ##网关 [root@localhost ~]# systemctl restart network [root@localhost ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.41 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::dd3b:df7b:a35c:96b0 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:ed:09:db txqueuelen 1000 (Ethernet) RX packets 11972 bytes 13386616 (12.7 MiB) 省略部分内容6)配置dhcp -查看配置文件位置
[root@localhost ~]# rpm -qc 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@localhost ~]# vi /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page #这里面内容不多,但提醒我们在/usr/share/doc/dhcp*/dhcp.conf.example此路径下有配置样例,其中dhcp*表示表示版本,如dhcp-4.2.5 -复制配置样例到主配置文件路径下
[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes-修改dhcp主配置文件
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf ...省略部分内容 # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. subnet 192.168.100.0 netmask 255.255.255.0 { ##声明网段192.168.100.0 range 192.168.100.200 192.168.100.220; ##dhcp池,要有“;” option subnet-mask 255.255.255.0; ##子网掩码 option routers 192.168.100.2; ##默认网关 option domain-name "dhcp1"; ##域名 option domain-name-servers 8.8.8.8; ##域名服务器 } ...省略部分内容7)开启DHCP服务 DHCP服务端基于UDP67端口
[root@localhost ~]# systemctl start dhcpd [root@localhost ~]# netstat -anup |grep dhcp udp 0 0 0.0.0.0:67 0.0.0.0:* 21179/dhcpd8)防火墙设置 清空防火墙规制
[root@localhost ~]# iptables -F [root@localhost ~]# setenforce 09)关闭VMware虚拟机里的DHCP服务 编辑->网络虚拟编辑器->选择VMnet1网卡,去掉DHCP服务的勾勾
1)网卡模式仅主机模式 在VMware虚拟机里,为虚拟机选择VMnet1网卡仅主机模式,右击虚拟机->设置->网络适配器->自定义->选VMnet1模式 2)网卡设置 将网卡设置为DHCP模式 3)关闭Windows防火墙 4)查看获取的IP信息 Windows+r 回车 输入:ipconfig /release ##释放网卡信息 ipconfig /renew ##重新获取网卡信息 ipconfig /all ##更详细的信息 符合我们在DHCP服务器上,在主配配置文件中修改的参数 到此,DHCP服务配置完成
全局配置在整个DHCP服务器上生效,局部配置在指定的区域内生效,局部配置优先。 刚刚我们在DHCP服务器上的配置如下,没有改动全局参数 现改动 生效的依旧为局部配置
1)在DHCP服务器上修改配置文件,修改host字段
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf ...省略部分内容 host mama { ##mama为自己取的名字 hardware ethernet 00:0C:29:4F:D0:17; ##MAC地址 物理地址 fixed-address 192.168.100.51; ##想分配的ip } ...省略部分内容2)DHCP客户端查看 客户端获取到了我们分配的ip
DHCP中继实验 DHCP中继的意义在于,帮助DHCP广播跨VALN传播 实验环境 实验内容与配置 LSW2配置 sys [Huawei]sysname sw2 [sw2]vlan batch 10 20 200 [sw2]int e0/0/1 [sw2-e0/0/1]port link-type access [sw2-e0/0/1]p d v 10 [sw2-e0/0/1]int e0/0/2 [sw2-e0/0/2]port l a [sw2-e0/0/2]p d v 20 [sw2-e0/0/2]int g0/0/2 [sw2-g0/0/2]p l a [sw2-g0/0/2]p d v 200 [sw2-g0/0/2]int g0/0/1 [sw2-g0/0/1]p l t [sw2-g0/0/1]p t a v a LSW1配置 sys [Huawei]sysname rsw1 [rsw1]vlan batch 10 20 200 [rsw1-g0/0/1]int g0/0/1 [rsw1-g0/0/1]p l t [rsw1-g0/0/1]p t a v a [rsw1-g0/0/1]int vlan 10 [rsw1-vlanif 10]ip address 192.168.10.1 24 [rsw1-vlanif 10]int vlan 20 [rsw1-vlanif 20]ip address 192.168.20.1 24 [rsw1-vlanif 200]int vlan 200 [rsw1-vlanif 200]ip address 192.168.200.1 24 [rsw1-vlanif 200]q [rsw1]dhcp enable [rsw1]int vlan 10 [rsw1-vlanif 10]dhcp select relay [rsw1-vlanif 10]dhcp relay server-ip 192.168.200.100 [rsw1-vlanif 10]int vlan 20 [rsw1-vlanif 20]dhcp select relay [rsw1-vlanif 20]dhcp relay server-ip 192.168.200.100 [rsw1-vlanif 20]int vlan 100 [rsw1-vlanif 100]dhcp select relay [rsw1-vlanif 100]dhcp relay server-ip 192.168.200.100
cloud 1配置 ensp中添加端口 虚拟机中配置 将虚拟机绑定VMnet2网卡,修改网卡配置将ip地址设成192.168.200.100/24,修改dhcp配置文件,开启dhcp服务 网卡配置修改如下: vi /etc/sysconfig/network-scripts/ifcfg-ens33 dhcp配置文件修改如下: vi /etc/dhcp/dhcpd.conf 开启dhcp服务 systemctl start dhcpd 验证dhcp服务 到ensp中的PC上修改配置,获取地址等信息 PC1和PC2均设成DHCP模式,如下图 PC1和PC2获取ip地址 PC1 PC2