基础配置不再讲解,重点讲一下关键配置点及配置的原因。
R1-R3为域AS100,R4-R6为域AS200,R3、R4为跨域点。IBGP采用loopback接口建立邻居,R3-R4跨域时采用互联接口建立邻居。
option c跨域是要在两个域的PE(R1和R6)之间能够建立BGP VPNV4邻居,以传播私网路由并互通。
两个AS各自配置IGP,保证域内公网路由互通。
R1-R3、R4-R6建立IBGP邻居。
两台ASBR(R3、R4)建立EBGP邻居,并把各自的IGP路由引入到bgp中,发送给对方。注意ASBR收到对端的公网路由后,要把下一条改成自己再传送给自己的IBGP邻居(next-hop-self)。
配置完成后在R1、R6上能看到对方域的公网IPV4路由。
如果仅仅是完成1所述配置是不行的。以AS200的公网路由通过R4传给R3,再传给R1为例。在R1处,发往R6的ipv4路由是经过R2指向R3的,而报文到R2处将被R2丢弃(R2没有R6的路由,所谓路由黑洞)。
解决该问题的办法是使用标签路由。R4给R3发送公网路由时,要以标签路由的形式发送。操作方法是在R4上写route-policy,并 apply mpls(注意要R3和R4要相互启用label-route-capabiity)应用在对R3的export方向。
同时R3收到该标签路由后,要传送给R1时,也要保持该标签路由继续传递,操作方法是在R3上写route-policy if-match mpls apply mpls。
这样R1将会收到as200的公网标签路由,在R1上disp mpls lsp,将会看到as200中公网路由的lsp信息。在R1上带源地址ping R6如果正常能通,说明标签路由已正常。
顺带说一下,R2上是没有R6的路由的,之所以报文能够通过R2传递,是因为在R1处有R6的标签路由(由BGP分发的),并且下一跳是指向R3(这就是为什么R3往R1传递路由时要把下一跳改成自己的原因)。同时R1也有R3的标签路由(是通过域内LDP分发的),所以发往R6的报文在R1的标签表中迭代查找一次,把报文打上两层标签,外层标签是到R3,内层标签是到R6。外层标签是到R3的,自然就能够被R2转发。
报文到达R3后,R3先剥离外层标签,再通过内层标签转给R4,剩下的事情就是AS200内部的标签转发了。
下面的事情就是在R1和R6之间使用loopback接口建立VPNV4 邻居(注意ebgp-max-hop配置),在bgp -instance中引入直连路由,R1、R6即可相互学习私网路由并互通了。
至此,option C跨域的配置就完成了。跨域的重点还是在于打通公网的标签路由,使得as内部的P设备能够正常转发发往其他as的报文。
配置完后,在R1上通过私网来ping R6,在R1和R2之间抓包,可以看到共有三层标签。其中外两层在前面讲过了,而最里层则是v4的标签。
(1)AS内部公网标签路由的传递方式
通常实际组网时,骨干网(AS100)内部不可能像上述实验拓扑一样,把所有R1与R3这种角色都建立IBGP邻居,并且应用标签保持规则。因为R3是ASBR,建立这么多IBGP邻居会使其负荷很重,同时配置起来也会很麻烦。
所以,实际组网时会采用另一套方法。骨干网内部不建立BGP邻居关系,而在ASBR上直接把BGP路由引入到IGP中去,在AS100内部传播。
也就是说R1与R3之间不建立BGP邻居关系,在R3处的IGP路由协议中使用import bgp来导入另一个AS200传递过来的公网路由。
路由是引进AS内部了,但是有一个小问题。
华为路由器直接把BGP路由导入到IGP中,默认是会丢失标签信息的,虽然ASBR收到的对侧BGP路由是带了标签的。(听说华三不会,我没试过)
这样就会导致一个问题:R1上虽然通过IGP收到了R6的路由,但是却是通过IGP传递的普通路由而不是标签路由。数据包按照这个路由是没法转发的,因为R1上,数据包是走VPNV4标签转发到R2,没有外层公网标签,而R2并不认识这个VPNV4标签,数据包到R2就会被丢弃。
抓包出来看到得现象是:数据包从R1带一层VPNV4标签出来到R2,R2丢弃该数据包。
华为路由器解决这个问题也很简单,只需要在R3的MPLS视图下,配置lsp-triger bgp-label-route,这样BGP导入到IGP的AS200公网路由就保持为标签路由,在AS100内部传播,R1、R2自然也就收到的是标签路由。数据包转发的时候,R1就会选择标签隧道转发,R2也就能顺利转发到R6的数据包了。
注意,采用了这种使用IGP传播公网标签路由的方式后,就不能再使用IBGP的方式再传播公网标签路由了,否则,AS内的路由器会同时收到IGP和IBGP发送来的(标签/普通)路由,引起混乱,甚至导致路由不通。考虑到BGP配置时,IPV4邻居是默认会enable的,所以使用IGP传播公网标签路由的方式下,要注意手动把AS内的BGP IPV4邻居给禁用掉。两种方式只能二选一。
虽然这是华为路由器的特性,但是我们有必要了解这个特性,以加深对OPTION C跨域时,路由控制和数据转发路径的理解。
(2)控制层面和转发层面的分离设计
实际大型组网时,会在骨干网AS内部会专门设计一台路由反射器RR。RR用于跨域与其他AS之间建立VPNV4的邻居关系,接收其他AS传递过来的私网路由,并传播到其他AS。
如骨干网为AS100,其他接入网为AS200、AS300等。那么就会在AS100内部设置一台RR,与AS200、AS300建立多跳跨域的VPNV4邻居,把从AS200学习到得路由发送到AS300中去等,实现AS之间的互通。
这个时候RR是充当控制层面的角色,数据转发通常不会都经过RR,而是分散到骨干域中的其他路由器,这样不会导致RR负载过重。当然为了冗余,RR通常也不止一台。
我们知道RR与其他域建立邻居时,默认是会把收到的路由下一跳改成自己的(因为是EBGP邻居嘛),所以默认情况下,数据转发都经过RR,这不是我们所希望的。因此,在配置RR时,我们要在BGP VPNV4视图下,使用peer x.x.x.x next-hop-invariable命令,使从AS200收到的私网路由下一跳保持为AS200中的ASBR地址,并发送到AS300中去。AS300的ASBR收到的路由下一跳就是直接指向AS200的ASBR了,数据包的转发也就会避开RR,而从其他比较近的路径进行转发。
这就是所谓的控制层面与数据转发层面分离。
最后,这篇文章可能相对比较深奥和枯燥,但是对OPTION C的跨域分析自认为还是很到位了。
但愿您能听懂我在讲什么。