设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] DHCP原理解析及其在cisco上的配置

[复制链接]

尚未签到

发表于 2018-7-13 10:07:46 | 显示全部楼层 |阅读模式
  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP 协议是基于UDP层之上的应用,dhcp使用udp携带报文,udp封装在ip数据包中发送。我们先来看下dhcp报文格式
DSC0000.png

  OP:若是client送给server的封包,设为1,反向为2;
  Htype:硬件类别,ethernet为1;
  Hlen:硬件长度,ethernet为6;
  Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;

  Transaction>  Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
  Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
  Ciaddr:用户IP地址;
  Yiaddr:客户IP地址;
  Siaddr:用于bootstrap过程中的IP地址;
  Giaddr:转发代理(网关)IP地址;
  Chaddr:client的硬件地址;
  Sname:可选server的名称,以0x00结尾;
  File:启动文件名;
  Options:,厂商标识,可选的参数字段
  下面我们主要说下客户机从dhcpserver获取ip的过程,它处于6中状态分别是初始状态,选择状态,请求状态,绑定状态,重新获取状态,重新绑定状态。我们就结合我下面画的这张图好好说下
DSC0001.png

  1.主机启动,dhcp处于INI状态为了获取ip地址,DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名,本地所有的dhcpserver会收到这个报文,数据包中的目标端口设为BOOTP67端口。这时dhcp会处于select状态。
  2.处于select状态的主机会接受dhcpserver发来的dhcpoffer报文,每个报文中会包含为客户机配置的信息以及server为客户机提供的租用ip,一般主机会受到零个或者多个offer报文(一般主机会响应第一个offer报文),并与server协商相关事宜,为此主机会发送一个dhcpquest报文,并进入request状态。
  3.dhcpserver会给客户机一个ack的确认信息,这时一个dhcp获取过程结束。主机进入BIND稳定状态。
  4.假如主机不需要ip地址或者需要换个ip,这时主机会发送一个dhcprelease报文向dhcpserver,这时主机重新处于初始状态。
  5.一般服务器给客户机的ip地址都有租期,时间长短不等,而dhcp主机会有3个计时器,当择期过半50%,这时主机会发送一个dhcprequest报文要求续租进入renew状态,serverdhcp会响应这个报文发送ack确认信息,这时dhcp会重新进入BOND状态。
  6.假如dhcpserver没有响应主机的请求,等租期到了87.5%这时主机会重新发送dhcprequest报文要求续租,主机进入rebind状态,假如这时候dhcpserver不高兴(ip地址不够用)发送来一个否确认信息,这时主机会重新进入初始状态再次按照1——4步骤重新申请ip。假如收到ack老大的确认续租成功,说明这个ip我们还可以继续使用。没有响应,我们的主机只有等到我们ip租期耗尽,重新进入初始状态重新获取。
  报文类型:
  1)DHCPDISCOVER(0x01),此为Client开始DHCP过程的第一个报文
    2)DHCPOFFER(0x02),此为Server对DHCPDISCOVER报文的响应
  3)DHCPREQUEST(0x03),此报文是Slient开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文
  4)DHCPDECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址
  5)DHCPACK(0x05),Server对Client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。
  6)DHCPNAK(0x06),Server对Client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。
  7)DHCPRELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。
  8)DHCPINFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。
  如:运行IPCONFIG/RELEASE后,PC会发出释放IP的报文,DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。
  如果一台客户机未从该DHCP服务器获取过地址,或者它获得的地址已过期,那么它将需要经过全部四个步骤才能得到一个IP地址。
  我们说完了dhcp获取过程,下面我们说下cisco路由下dhcp配置(这是借用论坛一个例子我就不配了呵呵^)
DSC0002.png



  如图中所示,当R1  的接口配置为DHCP 获得地址后,那么将从F0/0 发出目的
  地为255.255.255.255  的广播请求包,如果R2 为DHCP 服务器,便会响应客户端,
  但它不是DHCP  服务器,因此R2  收到此广播包后便默认丢弃该请求包。而真正的
  DHCP 服务器是R4,R1  的广播包又如何能到达R4 这台服务器呢,R4 又如何向R1
  客户端发送正确的IP 地址呢。
  路由器是不能够转发广播的,因此,除非能够让R2 将客户端的广播包单播发向
  R4 这台服务器。我们的做法就是让R2 将广播包通过单播继续前转到R4 这台服务
  器,称为DHCP 中继,通过IP help-address 功能来实现。
  1.R2 配置
  (1)配置将DHCP 广播前转到34.1.1.4
  注:IP help-address 功能默认能够前转DHCP 协议,所以无需额外添加。
  R2(config)#int f0/0
  R2(config-if)#ip helper-address 34.1.1.4
  2.配置DHCP Server:
  (1)开启DHCP 功能
  R4(config)#service dhcp
  (2)配置DHCP 地址池
  R4(config)#ip dhcp pool ccie1      地址池名为ccie1
  R4(dhcp-config)#network 10.1.1.0 255.255.255.0 可供客户端使用的地址段
  R4(dhcp-config)#default-router 10.1.1.1 网关
  R4(config)#ip dhcp pool ccie2     地址池名为ccie1
  R4(dhcp-config)#network 34.1.1.0 255.255.255.0 可供客户端使用的地址段
  R4(dhcp-config)#default-router 34.1.1.4 网关
  (3)去掉不提供给客户端的地址
  R4(config)#ip dhcp excluded-address 10.1.1.1 10.1.1.10 移除10.1.1.1 到10.1.1.10
  R4(config)#ip  dhcp  excluded-address  34.1.1.1  34.1.1.10 移除 20.1.1.1 到
  20.1.1.10
  (4)配置正确地址池的路由
  R4(config)#ip route 10.1.1.0 255.255.255.0 34.1.1.3
  注: R3 无需做任何配置!
  3.查看结果
  查看DHCP Client 会看到接口F0/0 的IP 地址为10.1.1.11,那么DHCP 服务器R4
  又是根据什么来判断出客户端需要的是哪个网段的IP 地址呢,为什么还是没有错把
  34.1.1.0/24 网段的地址发给客户呢。不是说服务器从哪个接口收到请求,就把这个
  接口相同网段的地址发给客户端吗?按照之前的理论,应该是发送34.1.1.0/24 的地
  址给客户啊。在这里,能够指导服务器发送正确IP 地址给客户端,是因为有一个被
  称为option 82 的选项,这个选项只要DHCP 请求数据包被中继后便会自动添加,此
  选项,中继路由器会在里面的giaddr 位置写上参数,这个参数,就是告诉服务器,客
  户端需要哪个网段的IP地址才能正常工作。中继路由器从哪个接口收到客户的DHCP
  请求,就在option 82 的giaddr 位置写上该接收接口的IP 地址,然后服务器根据giaddr
  位置上的IP 地址,从地址池中选择一个与该IP 地址相同网段的地址给客户,如果
  没有相应地址池,则放弃响应,所以,服务器R4 能够正确发送10.1.1.0/24  的地址
  给客户,正是因为R2 在由于IP help-address 的影响下,将giaddr  的参数改成了自己
  接收接口的地址,即将giaddr 参数改成了10.1.1.1,通过debug 会看到如下过程:
  *Mar100:28:36.666: DHCPD: setting giaddr to 10.1.1.1.
  *Mar100:28:36.666HCPD:BOOTREQUESTfrom0063.6973.636f.2d30.3031.322e.
  6439.6639.2e63.3638.302d.4661.302f.30 forwarded to 34.1.1.4.
  从上面debug 信息可以看到R2 是将giaddr             改成 10.1.1.1 后发中继发向34.1.1.4
  的,需要知道的是,经过中继后发来的DHCP 请求包如果giaddr 位置不是某个IP 地
  址而是0.0.0.0 的话,服务器是丢弃该请求而不提供IP 地址的。
  注:当服务器上存在10.1.1.0/24 网段的地址池时,服务器要将该地址池发送给客户,
  就必须存在到达10.1.1.0 网段的路由(默认路由也行),并且客户端必须位于该路由的
  方向,如果方向不对,该地址池也是不能够发给客户使用的。
  我主要说下vlan间的hdcp配置
DSC0003.png

  sw1(config)#service dhcp
  sw1(config)#ip dhcp pool dhcp1
  sw1(dhcp-config)#network 20.1.1.0 255.255.255.0
  sw1(dhcp-config)#default-router 20.1.1.1
  sw1(dhcp-config)#lease 7
  sw1(config)#ip dhcp pool dhcp2
  sw1(dhcp-config)#network 40.1.1.0 255.255.255.0
  sw1(dhcp-config)#default-router 40.1.1.1
  sw1(dhcp-config)#lease 7
  sw1(config)#ip dhcp excluded-address 20.1.1.1 20.1.1.10
  sw1(config)#ip  dhcp  excluded-address  40.1.1.1  40.1.1.10
  sw1(config)#vlan 10
  sw1(config-vlan)#exit
  sw1(config)#vlan 20
  sw2(config)#int f0/1
  sw2(config-if)#switchport mode access
  sw2(config-if)#switchport access vlan 20
  sw2(config-if)#exit
  sw3(config)#int vlan 40
  sw3(config-if)#ip address 40.1.1.1 255.255.255.0
  sw3(config-if)#ip helper-address 50.1.1.5
  sw3(config-if)#exit
  sw3(config)#int vlan 20
  sw3(config-if)#ip address 20.1.1.1 255.255.255.0
  sw3(config-if)#ip helper-address 50.1.1.5
  pc1(config)#int f0/1
  pc1(config-if)#ip address dhcp
  pc2(config)#int f0/1
  pc2(config-if)#ip address dhcp
DSC0004.png

  下面我们在说先dhcp欺骗
  现在网络中有台机子冒充dhcp服务器,我们知道客户机一般会响应最早的那个dhcpoffer,这样客户机就接受了假冒那台dhcpserver提供的ip地址,这时我们不愿意看到的。我们可以设置dhcp监听来防止
  

  

sw(config)#ip dhcp snooping       开启监听  

  
sw(config)#ip dhcp snooping vlan 20   监听vlan20(一定要配置监听那个vlan)
  

  
sw(config-if)#ip dhcp snooping trust
  

  


  
sw2(config-if)#ip dhcp>  

  
sw2(config-if)#ip helper-address 50.1.1.5
  
ok  结束!
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-536696-1-1.html 上篇帖子: cisco交换机限速 下篇帖子: cisco VLAN基本配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表