尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

H3C路由器DHCP中继配置详解:跨网段自动分配IP地址

H3C路由器DHCP中继配置详解:跨网段自动分配IP地址 搞企业网络维护的兄弟多半都撞过这么个场景办公室里新划了一个VLANPC要求自动获取IP可DHCP服务器所在的网段跟PC根本不在同一个广播域PC发出去的DHCP Discover广播报文一碰到三层就被路由器拦下地址就是死活分不下来。这时候H3C路由器上的DHCP中继DHCP Relay就该登场了。它干的事情说白了就是把客户端发的广播类DHCP请求转成单播帮你跨网段递给远端的DHCP服务器再把服务器给的应答原路接回来最终让主机顺利拿到IP。这篇就围绕H3C路由器上DHCP中继的完整配置讲清楚原理、命令、验证方法和排错思路适合刚接触企业网三层组网、或者正被“跨网段分IP”问题折磨的网络工程师参考。1. 先搞清楚一个画面广播报文到底怎么跨网段1.1 DHCP正常工作的四次握手DHCP分配地址的过程教科书上叫DORA也就是Discover、Offer、Request、Ack四个阶段。客户端上电后没有IP先发一个源地址为0.0.0.0、目的地址为255.255.255.255的Discover广播相当于站在走廊里喊“谁有地址给我一个”。DHCP服务器听到后回一个Offer说“我这里有给你留一个”。客户端收到Offer后再广播一个Request说“我就用这个”服务器最后回Ack确认。这四次交互里客户端自己从头到尾不知道服务器的确切位置全靠广播在同一个二层广播域里找。同一台交换机下、同一个VLAN里的PC和服务器这样跑没问题。但问题来了广播报文过不了三层。路由器天生不转发目的地址为255.255.255.255的广播它只转发单播报文。所以一旦客户端和DHCP服务器处在不同网段中间隔着路由器或者三层交换机Discover根本递不到服务器手里客户端的IP就一直停留在169.254.x.x这种系统自动分配的假地址上上不了网内网也不通。这个现象排查起来特别典型PC能ping通网关但是拿不到DHCP地址一看网卡就是“未识别的网络”。1.2 跨网段之后DHCP为什么就“断气”了有人可能会想广播不行那让客户端改成知道服务器IP再去单播请求可以不协议层面对不起DHCP从设计上就不允许客户端预先知道服务器地址。客户端在拿到IP之前连路由表都没有它只能活在广播和二层MAC通信的世界里。报文到了三层网关路由器虽然知道这个广播是DHCP协议但本身又没有完整的DHCP服务器功能或者根本不想给这个网段做地址池就不能代为应答。于是客户端发的包就像在楼道里喊了一嗓子隔着一层防火门对面房间的人听不见。所以跨网段分地址要么每个网段单独放一台DHCP服务器或接入设备直接做地址池要么就在网关上架起一座“传话的桥”——这就是DHCP中继。中继干的事很明确侦听接口收到的DHCP广播把它从广播封装改成单播封装源地址改成网关接口自己的IP目的地址改成真正的DHCP服务器IP然后发给服务器。服务器回包时也是先回给中继中继再想办法把应答交还给发起请求的客户端。这里关键的一点是中继在转发的报文里塞了一个giaddr字段值是中继接口的IP地址服务器就靠这个字段判断客户端在哪个网段从而从对应的地址池里拿地址。这也是后文排错最容易出问题的一个点先记着。1.3 为什么选DHCP中继而不是别的方案真要解决跨网段分配地址技术上有三条路第一每个新网段都单独架设DHCP服务器或者用接入设备的DHCP服务开一个地址池第二在路由器上做地址池直接分配第三用一台集中式DHCP服务器加DHCP中继。前两种不是不行但代价都很明显。网段多的时候你需要在十几台设备上维护十几套互不相干的地址池每加一个VLAN都要重新登录一次设备改配置地址段写重了、地址用干了都没人知道。集中式服务器加中继的优势则是所有网段的租约记录、地址池、选项参数全在一台服务器上加新网段只改服务器配置和路由器上的一行中继指向故障定位也简单。实际工程里绝大多数“一个园区、一台DHCP服务器、N个业务VLAN”的架构最终都会落到DHCP中继身上。H3C的路由器和三层交换机都内置了这个功能不需要额外license配置量很小所以这个小功能在企业网里出镜率极高。2. H3C DHCP中继配置一份可以直接抄的命令集2.1 实验拓扑与IP规划为了把命令讲透先定一个最简拓扑。一台H3C路由器作为三层网关连接两个网段左侧接办公PC所在VLAN 10网段是192.168.10.0/24网关接口IP是192.168.10.1右侧连接服务器VLAN 200网段是192.168.200.0/24服务器接口IP是192.168.200.1DHCP服务器的固定地址是192.168.200.10。PC和服务器之间隔着一个路由器PC的VLAN 10里没有任何DHCP服务我们要做的就是让PC通过右侧这台服务器的地址池拿到192.168.10.x网段的地址。这里要特别强调服务器的地址池必须规划成CLIENT网段也就是192.168.10.0/24而不能是服务器自己所在的192.168.200.0/24。很多人第一次配容易在这里绕晕服务器明明在200网段怎么让我给10网段建池因为服务器是靠着中继报文里的giaddr来判断该发哪个网段的地址的它要给PC发地址池子自然是PC的网段。这个逻辑想通了整个配置就顺了。2.2 路由器接口基础配置先把H3C路由器的两个三层接口地址配好。如果是真路由器用物理接口如果是核心交换机或者模块化设备通常是创建Vlan-interface。命令本身没差别关键是接口要起来、地址要能互通。下面是物理接口的写法system-view sysname CoreRouter interface GigabitEthernet1/0/1 ip address 192.168.10.1 255.255.255.0 undo shutdown quit interface GigabitEthernet1/0/2 ip address 192.168.200.1 255.255.255.0 undo shutdown quit如果是S系列交换机当三层网关则写成Vlan-interface形式system-view vlan 10 quit vlan 200 quit interface Vlan-interface 10 ip address 192.168.10.1 255.255.255.0 quit interface Vlan-interface 200 ip address 192.168.200.1 255.255.255.0 quit interface GigabitEthernet1/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet1/0/2 port link-type access port default vlan 200 quit配完后先在路由器上ping一下DHCP服务器的地址确保中间路径通。这个动作很重要因为后续所有中继通信都是单播单播通是前提。2.3 开启DHCP中继功能指向服务器接下来说重点。全局先开启DHCP服务然后在连接PC侧的接口上把DHCP模式切换成中继并指明服务器的地址。system-view dhcp enable interface GigabitEthernet1/0/1 dhcp select relay dhcp relay server-address 192.168.200.10 quit这三行就是全套核心逻辑。dhcp enable是总开关忘记配后面全不生效dhcp select relay告诉设备这个接口不要本地分配地址而是走中继流程dhcp relay server-address则指明请求要发给谁。H3C在部分新版本上允许多条server-address也就是最多可以指定8台服务器做冗余备份第一台没响应会自动尝试下一台这个后面再展开。配置完成后可以用display dhcp relay server-address核对正常会看到接口GigabitEthernet1/0/1下挂着192.168.200.10。也可以用display dhcp relay interface GigabitEthernet1/0/1或者display dhcp relay statistics确认中继有没有在跑具体用法放在验证一节讲。2.4 回程路由与服务器侧配置中继把请求单播给了服务器但服务器回包的时候是回给谁回给giaddr也就是中继接口192.168.10.1。如果服务器和中继之间隔了不只一个三层设备那么所有沿途设备都得有回到192.168.10.1的路由。在本例拓扑里服务器和中继接口在同一个路由器上不存在这个问题。如果DHCP服务器放在机房、中继在另一个楼宇的核心交换机上两条网线之间还串着汇聚交换机就要确认汇聚设备上有到192.168.10.0/24网段的明细路由或默认路由。这是排错时最容易忽略的一环很多人中继配得没问题把包也都发出去了但服务器回包的路径是断的客户端那边就表现为反复超时。Windows服务器配DHCP很简单在地址池的“作用域”里新建一个192.168.10.0/24的范围网关和DNS都填192.168.10.1就行。Linux用isc-dhcp-server的话配置大概这样subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; option domain-name-servers 192.168.10.1; }注意服务器上不需要做任何“允许中继”的特殊设置只要它收到的报文中giaddr字段有值它就会自动走中继应答逻辑。2.5 不同Comware版本的命令差异H3C设备常见的操作系统是Comware V5和V7V3的存量设备已经很少就不说了。V5版本上中继配置支持在系统视图下用一条命令直接绑定接口和服务器写法是dhcp relay server-address 192.168.200.10 interface GigabitEthernet1/0/1并且接口下通常不需要再来一条dhcp select relayV7版本则更推荐在接口下配置也就是我把命令拆开写的那种方式逻辑更清晰也方便一个接口对一台服务器逐条管理。实际遇到版本不确定时最稳妥的做法是敲完配置后用display dhcp relay类命令验证能显示出来就说明当前版本认这套写法。另外部分老设备上还需要在接口下写dhcp relay client-information record之类和option 82相关的命令如果只是做基础中继不涉及记录用户接入信息可以先不配。3. 验证中继是否生效从设备命令到抓包3.1 在路由器上看中继统计命令敲完有没有生效不能靠感觉得看设备统计。H3C提供了几个很直观的查看命令。第一是查看中继接口配置确认模式对不对display dhcp relay interface GigabitEthernet1/0/1输出里能看到接口名、DHCP模式、服务器地址列表。模式显示为relay服务器地址能对得上就算配置层没问题。第二是看转发统计display dhcp relay statistics这个命令输出的是中继累计收到的和转发的包数量比如BOOTP请求数、响应数、丢弃数。如果客户端在反复尝试获取IP而这里的请求数在持续增长说明中继已经收到并处理了客户端的广播只是响应可能没回来如果请求数一直是0说明广播根本没到路由器接口问题在二层或者接口被ACL拦了。查这个数字比在客户端抓包省事得多一台设备一个命令就能定位大半问题。3.2 客户端拿地址的全过程抓包想要彻底理解中继接手的每个环节建议在DHCP服务器侧打个包过滤条件直接写dhcp或者port 67。你会看到一条完整的链路PC发出Discover广播中继把它改成单播发给服务器此时报文的源IP已经变成192.168.10.1目的IP是192.168.200.10报文内部选项里的giaddr字段被填上了192.168.10.1服务器回Offer单播给192.168.10.1中继收到后再根据报文里的客户端MAC和广播标志决定是直接单播给PC MAC还是局域网内广播从而完成一次跨网段握手。抓包里最有价值的观察点就是这个giaddr字段。协议上giaddr是BOOTP报文头里的一个固定字段长度为4字节用来记录中继设备的IP。服务器决定从哪个作用域分配地址完全是靠它giaddr是192.168.10.1就从192.168.10.0/24的池里选giaddr是192.168.20.1就从192.168.20.0/24的池里选。所以这个字段的值一定要对它错了或者丢了服务器要么报错不回包要么从错误的网段分配一个根本不同网的地址出来。3.3 客户端最终拿到什么样的地址验证成功的最终标志当然是PC网卡上出现一个192.168.10.100之类的地址并且能ping通网关192.168.10.1。在Windows上可以用ipconfig /release再ipconfig /renew强制重新获取一次观察整个过程是否一次通过。拿到正确的地址后用ipconfig /all看DHCP服务器的IP显示的应该是192.168.200.10而不是网页上常见的那种“DHCP服务器不可用”。这一步验证千万别省它直接证明回包路径、地址池、中继单向映射全部正常工作。4. 拿不到地址排查实录与常见坑4.1 排查速查表在实际项目里中继配错导致的故障场景翻来覆去就那么几个。我把最常踩的坑整理成一张速查表现场排障时对着看比瞎猜快得多。现象可能原因排查动作中继统计请求数为0广播没到中继口接口未启用relay模式二层隔离确认PC和路由器同网段display dhcp relay interface看模式请求数增长但客户端拿不到地址服务器没回包或回包路由不通在服务器侧抓包确认giaddr检查到中继接口IP的路由服务器回NAK地址池网段与giaddr不匹配或地址已被占用检查作用域范围清理冲突地址拿到地址但ping不通网关地址池与客户端网段不匹配野地址检查giaddr对应网段和地址池是否一致重新租约间歇性拿不到地址中继指向多台服务器其中一台不可用display dhcp relay server-address临时移除故障服务器部分VLAN通、部分不通交换机VLAN配置或ACL拦了UDP 67/68逐VLAN核对三层接口和ACL策略4.2 地址池不回包giaddr不匹配最典型的问题就是“中继转发统计一直涨客户端就是拿不到地址”。这种场景下先把服务器侧的抓包打开如果抓到了Discover但服务器回了一个DHCP NAK或者根本不出Offer九成是地址池和giaddr网段对不上。服务器一看giaddr是192.168.10.1到自己配置列表里找192.168.10.0这个作用域没找到就回一条“我不能给你地址”。解决办法就是把地址池范围改对或在服务器上把正确的网段作用域建出来。还有一小概率是服务器认为这个地址已被占用会在租约冲突记录里留下一条日志这类地址冲突问题也要同步看服务器的事件日志。4.3 单播Offer被防火墙或ACL拦截还有一种隐蔽情况抓包发现服务器的Offer已经发出去了但中继接口根本收不到。网络路径上如果存在防火墙或者设备上有入方向的ACL优先级又比较高就可能把UDP端口67/68的包给滤了。DHCP走的是UDP 67服务器监听和68客户端监听中继转发的包源端口是67还是68要看你抓包的位置但排错时直接放通这两个端口的双向通信最省事。千万别只放通TCP那没用。我在一个项目里就栽过这个跟头中继、路由全部正常PC就是超时后来查到核心交换机上有一条老朋友为“防广播风暴”加的inbound ACLUDP 67/68正好在deny列表里中继转出去的包直接被打掉。所以查中继故障的时候ACL是仅次于路由的第二大怀疑对象。4.4 DHCP服务器在远端跨多跳中继本身一跳能搞定但服务器离得远时路径上每一跳都要能往回路由。这种情况建议先在中继路由器上执行ping -a 192.168.10.1 192.168.200.10源地址指定成中继接口IP去ping服务器通了才说明三层路径完整不通中继一定起不来。客户端在网吧服务器在另一个机房跨汇聚跨安全设备是常态这类环境里静态路由或动态路由的点点滴滴都会影响回包先ping后查比抓包还高效。4.5 option 82与多级中继大型园区里偶尔会出现“中继之后再接一个中继”的组网比如楼栋汇聚设备和核心设备都开了中继这时涉及option 82透传问题。H3C设备默认往转发报文里插入option 82用于记录客户端的接入设备、端口、VLAN等信息服务器可以靠它做更精细的分配控制。但如果两级中继之间对option的处理策略不一致后一级中继把前一级塞的option 82替换掉了服务器侧看到的接入位置可能就错了导致分配结果不符合预期。生产环境里的处理原则是服务器需要option 82那么路径上的所有中继设备都要用dhcp relay information trust这类命令让它信任上游带过来的信息而不是覆盖服务器不需要那就把所有中继的option 82记录关掉保持报文干净。具体命令随平台略有区别V7版本的交换机一般在接口下用dhcp relay information mode replace还是keep来区分建议先在测试环境验证策略再上生产。5. 生产环境里的进阶玩法与心得5.1 一台中继指向多台DHCP服务器做冗余核心生产网里DHCP服务器很少是单点的。H3C中继允许在同一个接口下配置多条dhcp relay server-address设备会自动按顺序尝试第一台无响应就发给第二台。配置方式就是在接口下重复执行命令interface GigabitEthernet1/0/1 dhcp select relay dhcp relay server-address 192.168.200.10 dhcp relay server-address 192.168.200.11这样做的好处是服务器升级维护时故障转移是自动的。但要注意主备两台服务器的地址池必须完全一致不然可能出现主服务器给了10.100备服务器又给了10.101两边租约记录脱节最终产生地址冲突。有条件的话建议两台服务器之间做DHCP故障转移协议同步不能同步就要严格约定“同一时刻只有一台提供地址”另一台仅热备。5.2 接入层防私接让中继链路上的交换机也用DHCP Snooping中继只是个传话的它不会验证请求来源是否合法。如果有人私接了一台小路由器或者软路由并且它开启了DHCP服务客户端可能会收到错误网关的Offer整个办公室IP乱套。防这个问题的标准动作是在接入交换机上启用DHCP Snooping不信任接口上收到的DHCP服务器应答全部丢弃。H3C交换机上大致是这样system-view dhcp snooping enable interface GigabitEthernet1/0/1 dhcp snooping trust quit interface GigabitEthernet1/0/2 dhcp snooping trust quit上联口连路由器的口和DHCP服务器所在口设为信任其余接PC的口保持默认不信任。这样即使有人用笔记本开了软路由私发的Offer也进不来从源头避免IP和网关错乱。中继和Snooping一搭一配一个负责跨网段把地址带回来一个负责拦住来路不明的应答生产网才睡得着觉。5.3 中继配置前的“路径图画法”做了这么多项目我个人的固定习惯是配置中继前不碰设备先画一张三层路径图。从客户端出发标明它到网关也就是中继接口的二层链路再标明中继接口到DHCP服务器之间的每一个三层跳点最后标注服务器的地址池应该为哪个网段服务。这张图画完了配置只有五分钟但后面排错的所有答案都在图里。中继不通查相邻跳点的路由服务器不回包看图上的giaddr网段和地址池是否对得上回包丢了查看图里有没有防火墙ACL。这三板斧砍下来九成中继问题都能在十分钟内定位。最后再分享一个多年养成的习惯每次改完配置我都会在服务器上把租约文件翻一遍确认客户端拿到的地址确实来自规划好的网段并且网关、DNS等option值没被意外覆盖。DHCP中继本身是个很简单的功能但它是整个办公网能正常上网的第一公里这第一公里稳了后面才能谈业务、谈体验。踩过的坑多了之后你会发现真正难的不是那几条命令而是你对这张网络路径图的理解有多深。
返回列表