ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

HCIP实战:eNSP跨AS实验掌握华为BGP路由控制与策略配置

HCIP实战:eNSP跨AS实验掌握华为BGP路由控制与策略配置 备考HCIP数通最怕的不是题库里那些选择题而是拿到一张拓扑图突然不知道往设备里敲什么。这个行当说的代码指的就是华为VRP平台上一行行配置命令。这期HCIP代码小练我重点练BGP路由控制在eNSP里搭了一张跨AS实验拓扑把OSPF、IBGP/EBGP邻居、ip-prefix过滤、route-policy改属性这几个环节完整跑了一遍。整个过程从规划到排错都记在这里给正在啃HCIP或者日常要碰华为设备的兄弟一份能直接照着敲的参考。1. 练前准备拓扑、工具与IP规划1.1 为什么配置命令要单独练很多人备考HCIP有个误区觉得OSPF、BGP的原理懂了选择题能做对实验就没问题。真到动手的时候原理和命令之间隔着一条鸿沟。BGP的邻居关系、路由通告、属性传递这些机制光在书上看是记不牢的必须自己在设备上把命令敲一遍再看一下display输出的路由表状态才会对协议怎么工作有实感。我一般会在eNSP里搭一套固定的练手拓扑每次练习就在这套拓扑上加新需求。这样省去反复搭环境的成本而且同一套拓扑跑不同控制策略对比效果非常直观。这次用的还是AR3260做路由器设备内存开满了四台跑起来不卡CPU占用也正常。AR2220也能用只是接口编号和部分特性支持上有细微差别不影响这个实验。1.2 本次实验拓扑与地址规划这次的核心场景是模拟一个跨AS的路由交换环境AS100内部有两台路由器跑OSPF加IBGPAS200有两台路由器分别通过EBGP接到AS100的一台设备上形成双入口。IP规划如下表设备接口IP地址说明R1GE0/0/010.0.12.1/24连接R2R1LoopBack010.0.1.1/32OSPF Router-ID及IBGP源地址R1LoopBack1172.16.1.1/24模拟业务网段AR1LoopBack2172.16.2.1/24模拟业务网段BR1LoopBack3172.16.3.1/24模拟业务网段CR2GE0/0/010.0.12.2/24连接R1R2GE0/0/110.0.23.2/24连接R3R2GE0/0/210.0.24.2/24连接R4R2LoopBack010.0.2.2/32OSPF Router-ID及IBGP源地址R3GE0/0/010.0.23.3/24连接R2R3GE0/0/110.0.34.3/24连接R4R3LoopBack010.0.3.3/32Router-IDR4GE0/0/010.0.24.4/24连接R2R4GE0/0/110.0.34.4/24连接R3R4LoopBack010.0.4.4/32Router-IDAS划分是这样的R1和R2属于AS100R3和R4属于AS200。R1-R2之间跑OSPF Area 0同时建立IBGPR2-R3、R2-R4之间各建一条EBGPR3-R4之间建IBGP。这样一来R1上三条业务网段通告进BGP后AS200那边就能通过R2这个出口收到两份相同前缀、不同路径的路由后续做路由控制就有得玩了。2. 第一步把OSPF和BGP邻居关系跑起来2.1 OSPF基础配置R1和R2之间的OSPF是整个实验的底层路由基础。BGP在通告network时要求路由表中必须先存在对应前缀的路由所以底层IGP必须先把路由打通。这里用OSPF承载AS100内部路由。先配R1system-view sysname R1 interface GigabitEthernet0/0/0 ip address 10.0.12.1 24 interface LoopBack0 ip address 10.0.1.1 32 interface LoopBack1 ip address 172.16.1.1 24 interface LoopBack2 ip address 172.16.2.1 24 interface LoopBack3 ip address 172.16.3.1 24 ospf 1 router-id 10.0.1.1 area 0.0.0.0 network 10.0.12.0 0.0.0.255 network 10.0.1.1 0.0.0.0 network 172.16.1.0 0.0.0.255 network 172.16.2.0 0.0.0.255 network 172.16.3.0 0.0.0.255这里有个非常容易错的地方OSPF的network命令用的是通配符掩码不是子网掩码。172.16.1.0 0.0.0.255表示匹配172.16.1.0/24这个网段写成255.255.255.0就错了设备会直接报错这是新手最常见的问题。R2的OSPF配置对称即可system-view sysname R2 interface GigabitEthernet0/0/0 ip address 10.0.12.2 24 interface GigabitEthernet0/0/1 ip address 10.0.23.2 24 interface GigabitEthernet0/0/2 ip address 10.0.24.2 24 interface LoopBack0 ip address 10.0.2.2 32 ospf 1 router-id 10.0.2.2 area 0.0.0.0 network 10.0.12.0 0.0.0.255 network 10.0.2.2 0.0.0.0配置完检查一下邻居状态display ospf peer brief正常会看到R1和R2互相出现在邻居表里State是Full。如果卡在Init或者ExStart多半是区域ID不一致、通配符写错、或者接口没有加入正确区域从这几方面查。2.2 BGP邻居配置与next-hop-localOSPF起来之后开始建BGP邻居。AS100内部R1和R2建IBGPIBGP通常用LoopBack地址作为更新源避免物理链路down掉影响邻居关系。R1的BGP配置bgp 100 router-id 10.0.1.1 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack0 ipv4-family unicast network 172.16.1.0 24 network 172.16.2.0 24 network 172.16.3.0 24 peer 10.0.2.2 enableR2的BGP配置bgp 100 router-id 10.0.2.2 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack0 ipv4-family unicast peer 10.0.1.1 enable这里有两个关键点。第一用LoopBack建IBGP邻居必须配置connect-interface LoopBack0否则设备会用出接口地址作为TCP源地址而邻居期望的源地址是LoopBack0邻居就起不来。第二R2向IBGP邻居R1通告路由时默认会把下一跳指向自己但如果R1收到的BGP路由下一跳是10.0.2.2R1的路由表里如果没有到10.0.2.2的路由这条BGP路由就不能变成最优路由。解决方法是在R2上给IBGP邻居配置next-hop-localbgp 100 ipv4-family unicast peer 10.0.1.1 next-hop-local等等next-hop-local其实是IBGP场景下默认对EBGP学习的路由生效的行为配置吗这里我建议直接用最稳妥的写法在R2上对IBGP邻居显式配置peer 10.0.1.1 next-hop-local确保R1收到的BGP路由下一跳是R2的LoopBack地址而R1恰好有OSPF学习到的10.0.2.2/32路由下一跳可达路由才能优选。验证命令是三件套display bgp peer display bgp routing-table display ip routing-table protocol bgp邻居状态看Established路由表里看前缀前面的符号表示最优路由*表示有效路由。如果看到前缀没有标记后面十有八九是next-hop不可达。3. 第二步用ip-prefix和route-policy做前缀过滤3.1 ip-prefix的语法细节AS100的R1通告了三条业务网段172.16.1.0/24、172.16.2.0/24、172.16.3.0/24。如果需求突然变了AS200只允许接收前两个网段第三个必须拦掉怎么实现最干净的做法是在AS200入口设备R3上做入方向过滤。先写前缀列表控制匹配的对象ip ip-prefix PL-ALLOW index 10 permit 172.16.1.0 24 ip ip-prefix PL-ALLOW index 20 permit 172.16.2.0 24 ip ip-prefix PL-ALLOW index 30 deny 0.0.0.0 0 less-equal 32细说ip-prefix的规则。index是匹配顺序按从小到大逐一匹配命中即停不再往下走。第三条deny 0.0.0.0 0 less-equal 32是一条兜底规则匹配所有IPv4路由并拒绝。因为ip-prefix默认末尾隐藏了一条deny all其实不写也能达到效果但显式写出来有两个好处一是自己看着清楚二是方便以后在中间插入其他规则时不容易搞混。less-equal 32的意思在这个场景里其实是允许掩码长度从0到32配合0.0.0.0 0就是匹配一切。如果只想精确匹配某一条路由就写permit 172.16.1.0 24它默认只匹配掩码正好是24的这条。想匹配172.16.1.0/24及其子网就写172.16.1.0 24 greater-equal 24 less-equal 32这在汇总场景里非常常用。3.2 route-policy的调用与生效机制光有前缀列表还不够BGP不会直接认ip-prefix要通过route-policy把它包一层再挂到peer上。R3上这样配置route-policy RP-IN permit node 10 if-match ip-prefix PL-ALLOW route-policy RP-IN deny node 20这个route-policy的逻辑是node 10先匹配PL-ALLOW命中就放行没命中就跳到node 20无条件拒绝。因为route-policy每个node自带一个默认deny于末尾所以node 20其实可以不写但我习惯显式写出来逻辑更完整。挂到邻居上bgp 200 ipv4-family unicast peer 10.0.23.2 route-policy RP-IN import调用方向是import意思是R3从邻居10.0.23.2收到的路由进路由表之前先过这个策略。验证方法display bgp routing-table正常情况下能看到172.16.1.0/24和172.16.2.0/24172.16.3.0/24已经消失。如果想确认策略确实生效了可以看它的统计display route-policy或者临时把策略删掉再用reset bgp all软重置会话路由就全回来了。我每次调策略都习惯反复挂载-检查-撤销-再检查确认不是别的因素导致路由缺失。注意修改route-policy后BGP不会自动重新过滤已经收到的路由必须执行refresh bgp all import或者reset bgp all才会重新执行策略。eNSP里reset最省事但生产环境慎用会造成会话中断优选refresh。4. 第三步路径属性控制实战4.1 local-preference控制选路过滤只是路由控制的入门属性控制才是HCIP BGP的重点。AS200有R3和R4两个入口AS100通过R2把同一批路由分别通告给R3和R4那AS200内部路由器最终怎么选路默认情况下来自EBGP的路由Local Preference是100两边一样接下来比AS路径长度也差不多最后会走到Router-ID等更细的比较。这种自然选择往往不如我们想要的精确得用属性干预。比如需求AS200内部所有路由器访问172.16.1.0/24时优先走R3这边。在R3入方向针对这个网段把Local Preference抬高route-policy RP-LP permit node 10 if-match ip-prefix PL-LP apply local-preference 300 route-policy RP-LP permit node 20 ip ip-prefix PL-LP index 10 permit 172.16.1.0 24 bgp 200 ipv4-family unicast peer 10.0.23.2 route-policy RP-LP importR4那边保持默认100。BGP选路时Local Preference值越高越优所以AS200内部所有路由器都会优选从R3学来的那条172.16.1.0/24。注意这个属性只在AS内部传递R3通过IBGP通告给R4时Local Preference会保留但不会传给AS100的R2。验证命令display bgp routing-table 172.16.1.0输出里能看到两条路径一条next-hop是10.0.23.2LocalPref是300带最优标记另一条next-hop是10.0.24.4LocalPref是100。4.2 MED和AS-Path的实战对比Local Preference是影响别人怎么选MED则是影响对方AS怎么选。通俗讲本地优先级是我说了算MED是我求着你选我。再添加一个需求R2希望AS200在访问172.16.2.0/24时优先选择经过R3这条链路怎么办因为R2是AS100的设备MED属性可以跨AS传递R2可以在向R3通告这条路由时设置一个较小的MED向R4通告时设置一个较大的MED这样R3和R4收到后在比较来自同一邻居AS的路由时MED值小的路径胜出。R2上配置route-policy RP-MED-TO-R3 permit node 10 if-match ip-prefix PL-MED apply cost 50 route-policy RP-MED-TO-R4 permit node 10 if-match ip-prefix PL-MED apply cost 200 ip ip-prefix PL-MED index 10 permit 172.16.2.0 24 bgp 100 ipv4-family unicast peer 10.0.23.3 route-policy RP-MED-TO-R3 export peer 10.0.24.4 route-policy RP-MED-TO-R4 exportapply cost在BGP里就是修改MED。华为设备上EBGP路由默认MED为0当两条路由来自同一个ASMED小的优先。所以R3这边收到的MED是50R4那边是200路由器会优选R3。但这里有个课本上经常考的坑MED只在比较来自同一个AS的路由时有意义。如果两条路由分别来自AS100和AS300就算一条MED是0、一条MED是50也不会直接拿MED比而是先比AS路径长度。我自己练的时候就吃过这个亏以为把MED调小就万事大吉结果AS路径差了一位MED怎么改都不生效。理解了这句话BGP选路一半的题就不会错了。AS-Path的控制方式则是加长路径在R2向R4通告时把本AS号多追加几次让AS200认为走R4的路径更长从而放弃。命令是route-policy RP-ASP-TO-R4 permit node 10 if-match ip-prefix PL-ASP apply as-path 100 100 additive ip ip-prefix PL-ASP index 10 permit 172.16.3.0 24apply as-path 100 100 additive表示在现有AS路径上追加两个100。效果是AS-Path从100 200变成100 200 100 100长度变长路由器选路时自然避开。这个方法在生产里也很常用尤其是运营商间做流量牵引时。4.3 验证方法与调完必做的动作每改一个属性我建议按这个顺序过一遍display bgp routing-table display bgp routing-table 172.16.2.0 display ip routing-table 172.16.2.0第一行看总表确认路由还在第二行看这条前缀的具体属性确认LocalPref、MED、AS-Path都符合预期第三行看全局路由表确认BGP最优路由确实被装进了路由表下一跳和出接口正确。改完策略必须记得重置BGP会话让策略重新生效华为设备上两种方式refresh bgp all import refresh bgp all export或者干脆reset bgp all。eNSP环境里reset最直接生产环境能refresh就别reset避免不必要的会话抖动。这个动作太容易被忽略我见过不少人改了route-policy半天不生效最后发现是没刷新。5. 常见问题与排查实录5.1 BGP邻居起不来的排查套路练这个实验时最常遇到的第一个问题就是IBGP邻居一直停在Active或者Connect。掏出display bgp peer看邻居状态不对先别急着怀疑配置按下面顺序逐层查一是TCP层通不通。IBGP用LoopBack建邻居的话先ping 10.0.2.2 -a 10.0.1.1确认源地址能到达对端LoopBack。R1默认路由表里有OSPF的10.0.2.2/32没通基本都是OSPF没起来或者没通告。二是更新源对不对。IBGP邻居的TCP连接要求源地址与对端配置的peer地址一致。R1配置peer 10.0.2.2 connect-interface LoopBack0那R2上配置的peer地址必须是10.0.1.1。如果R1忘记指定connect-interfaceTCP源地址会变成10.0.12.1R2一看源地址不匹配直接拒绝。排错时抓display tcp status能看得很清楚。三是AS号与版本。EBGP邻居如果AS号写反了设备会尝试建立连接然后因为AS不匹配反复重置状态在Connect和Idle之间来回跳。另外默认BGP版本是4两边都别乱改。5.2 路由不优、不通的排查套路邻居都Established了但路由表里没有想要的前缀或者前缀没有最优标记这是第二类高频问题。先说没有前缀。查有没有被过滤掉重点看三处对端是否用network或者import方式通告了路由、中间设备出方向策略是否有deny、本地入方向策略是否有deny。用display bgp routing-table看有没有前缀但缺如果有前缀无最优标记查下一跳。IBGP场景里最常见的就是前缀存在但下一跳不可达。R2把R1的172.16.1.0/24通告给IBGP邻居R1自己不对这里要理清楚R1把路由通告给R2R2再通告给EBGP邻居R3、R4R3、R4收到后通过IBGP互传。如果R3收到的IBGP路由下一跳是R2的LoopBack地址10.0.2.2而R3的IGP没有到10.0.2.2的路由这就麻烦了所以前面强调在AS200里也需要保证到对端LoopBack的路由可达通常做法是在R3和R4之间跑OSPF或者静态路由把LoopBack地址也通告进去。设备上查下一跳的快捷命令display ip routing-table 10.0.2.2如果无路由就去IGP里补通告。这个环节我建议把这个命令刻在脑子里它比看一堆display bgp的输出更快定位问题。5.3 eNSP操作细节与设备层面的坑最后说几个eNSP和真实设备不太一样的地方都是实操里踩出来的。第一eNSP里AR3260默认接口是GigabitEthernetAR2220有些型号接口叫GigabitEthernet有些是Ethernet写脚本前先把display ip interface brief跑一遍别照着网上模板硬抄接口名。第二eNSP里的设备如果长时间不操作会空闲断开命令敲到一半丢失很烦。建议在系统视图下执行user-interface vty 0 4再配idle-timeout 0把超时关掉。第三改完配置先display current-configuration确认设备记住了有些错误配置设备拒绝接受但你又不注意看回显比如OSPF通配符写错、BGP路由ID冲突等设备都会在敲回车时给出报错信息。养成看回显的习惯比事后排错省太多时间。6. 小结一次练习下来最值钱的经验这期HCIP代码小练跑下来我最大的感触是路由控制的组合拳不是看会的是敲会的。ip-prefix控制匹配范围route-policy控制动作import/export控制方向refresh/reset控制生效时机这几个环节环环相扣缺一个都会在验证阶段原形毕露。建议拿到实验拓扑后先把需求拆成放什么路由、改什么属性、从哪个方向做再落成命令而不是上来就敲。下一期我打算把BGP路由反射器和联盟一起练顺带把OSPF特殊区域也揉进去想要哪部分的兄弟可以留言我优先安排。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表