MPLS VPN 双归PE防环
1、双PE – CE ospf环路
1.1、 基础配置
1.1.1、核心网配置(省略)
核心网IGP配置 – 省略
mpls ldp配置 – 省略
mpbgp邻居配置 – 省略 (R1、R2、R3建全互联mpbgp邻居,R4不运行bgp)
R7 、R5、R6 三个CE ospf配置 – 省略
1.1.2、3个PE VRF配置
R1
ip vpn-instance test //起连接CE vrf
ipv4-family
route-distinguisher 100:5
vpn-target 100:567 export-extcommunity
vpn-target 100:567 import-extcommunity
interface GigabitEthernet0/0/2
ip binding vpn-instance test //接口绑定vrf
R2
ip vpn-instance test
ipv4-family
route-distinguisher 100:6
vpn-target 100:567 export-extcommunity
vpn-target 100:567 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance test
R3
ip vpn-instance r7
ipv4-family
route-distinguisher 100:7
vpn-target 100:567 export-extcommunity
vpn-target 100:567 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance r7
1.1.3、3个PE vrf 路由协议配置
R1
ospf 2 router-id 1.1.1.1 vpn-instance test //vrf里起ospf
area 0.0.0.0
network 15.1.1.0 0.0.0.255
R2
ospf 2 router-id 2.2.2.2 vpn-instance test
area 0.0.0.0
network 26.1.1.0 0.0.0.255
R3
ospf 2 router-id 3.3.3.3 vpn-instance test
area 0.0.0.0
network 37.1.1.0 0.0.0.255
1.2、3类LSA环路(DN=1)
需求:R7将自己loopback 7.1.1.1激活进ospf,R3做双向引入,R1做双向引入,R2做双向引入,观察路由表变化
R7
interface GigabitEthernet0/0/1
ospf enable 1 area 0.0.0.0 //引入一类LSA
R3
bgp 100
ipv4-family vpn-instance test
import-route ospf 2 //vrf ospf 路由引入vrf bgp ipv4
ospf 2 router-id 3.1.1.1 vpn-instance test
import-route bgp //vrf bgp 引入vrf ospf
R1
ospf 2 router-id 1.1.1.1 vpn-instance test
import-route bgp
bgp 100
ipv4-family vpn-instance test
import-route ospf 2
R2
bgp 100
ipv4-family vpn-instance test
import-route ospf 2
ospf 2 router-id 2.1.1.1 vpn-instance test
import-route bgp
1.2.1、默认无环路
以R7 loopback口路由传递为例
R7 > R3 > R1 > R5>R6> R2 (R7 > R3 > R1 > R2)
R7 > R3 > R4> R2 (R7 > R3 > R2)
查看R2的vrf路由表
分析原因: R2选择bgp去7.1.1.1,因为R1引入进vrf ospf 路由DN = 1,R2的ospf在vrf里查看到DN = 1的ospf lsa,不计算进入路由表(同理。R1去往7.1.1.1也默认选择从bgp去)。
由于R1、R2 vrf 的ospf收到DN =1的路由不接受(DN防环),所以R1、R2去往7.1.1.1走bgp。这两台PE的路由表里不存在去往7.1.1.1的ospf路由,所以无法将ospf 7.1.1.1回灌进入bgp(无环路)
R2查看LSDB
左右站点ospf的domain id 默认 = 0, 中间核心网视为superback bone,R1、R2成为ABR,将7.1.1.1变成3类lsa传递(携带DN = 1)给R5、R6
R5或R6可以正常接收R7的loopback口路由,虽然R5、R6收到的7.1.1.1 ospf路由DN = 1,但R5、R6的ospf不在vrf里,所以路由正常进入路由表
R5测试去往R7连通性
1.2.2、调整3类DN路由接收
以R7 loopback口路由传递为例
R7 > R3 > R1 > R5 > R6 > R2
默认情况下进入R1 vrf的ospf路由自动携带DN=1的路由,R2 vrf ospf不接受,关闭R2针对3类LSA 不接受DN=1的功能
R2
方法一:
ospf 2 router-id 2.1.1.1 vpn-instance test
dn-bit-check disable summary //关闭3类lsa dn=1不接受功能
注:dn-bit-check disable summary 只是关闭不接受3类 dn =1 的lsa功能,不是不产生dn = 1的路由
方法二:
ospf 2 router-id 2.1.1.1 vpn-instance test
vpn-instance-capability simple //同时关闭DN、route tag检查防环
R2查看vrf 路由表
分析:R2路由表去往7.1.1.1走左侧ospf,就会造成ospf回灌引入至bgp,作为vpnv4路由传给R1
R1查看vrf bgp表(R1默认走R3正常传递 的路由,因为med小)
R1上针对R2发过来的路由修改preval值(改大,让R1优先从R2走)
R1
bgp 100
ipv4-family vpnv4
peer 2.1.1.1 preferred-value 100 //更改从R2收到的vpnv4路由preval值(越大越优)
R1查看vrf bgp表,vrf路由表
R5测试去往7.1.1.1路径
1.2.3、结论分析
Mpls vpn 双归 ospf:默认开启DN = 1防环功能(特指vrf 发、vrf收路由)
DN防环功能:PE引入vrf ospf的3、5、7类LSA,默认携带DN = 1的option,如果接受方CE用全局接口接受LSA,DN=1也正常接受计算
如果接受方CE属于MCE组网(CE VRF),需要单独关闭DN防环功能
另一台同站点PE默认开启DN防环功能,不接受另一台PE发过来的DN=1的3、5、7类LSA(默认防环)。
1.3、5类LSA环路(DN=1、Route tag)
需求:上述实验基础上。R7将自己loopback 77.77.77.77引入进bgp,通过mp-bgp传给左侧站点,
1.3.1、观察现象
R7
[AR7-ospf-2]import-route direct //将环回口引入OSPF2中
左侧R2查看ospf数据库、vrf路由表
R2
分析:因为R7产生的77.77.77.77为5类LSA,即使两边站点ospf domain id相同,5类LSA通过super backbone传递到R1和R2两个ABR,再引入ospf依然是5类LSA
R2默认开启5类LSA DN = 1不接受,所以走R3的bgp路由,R2 vrf路由表没有ospf 7.7.7.7路由,就不会路由回灌至bgp传回R1,不环路
本质:只要正确邻居先学到的路由被另外一边引入传回来的顶掉,路由一回灌回去,另一个PE就一改选路参数,就环了。根本就是各种方法不让错误方向路由进入路由表,不回灌,就不环路。
1.3.2、第一步:关闭5类LSA DN防环
R2关闭vrf 5类LSA DN =1 路由不接受功能
R2
ospf 2 router-id 2.1.1.1 vpn-instance r56
dn-bit-check disable ase
R2查看ospf lsdb、vrf 路由表
分析:发现即使R2关闭了5类LSA dn=1不接受功能,R2仍然选择从3.1.1.1bgp路由去77.77.77.77。
因为关于5类LSA,除了DN不接受防环,还有个route tag标记防环
1.3.3、第二步:调整route tag
R2查看从R1方向收到的77.77.77.77的lsdb详细信息
Tag 3489660128 = AS号的 100
Route tag产生:R1上将bgp路由引入至ospf时,产生的5类lsa会自动携带自己AS号的值。(也可以在R2接受时直接更改route-tag的值)
Route tag防环原理:当R2收到R1 > R5 > R6 发过来的5类lsa后,会比对收到的lsa的route tag 和自己的bgp AS号,相同就不接受(和自己相同AS的bgp PE发给相同的CE站点),不同就接受
R1上将bgp路由引入vrf ospf时的route tag值
R1
方法一
ospf 1 router-id 1.1.1.1 vpn-instance r56
import-route bgp tag 200 //修改route tag为200
方法二
ospf 1 router-id 1.1.1.1 vpn-instance r56
import-route bgp
route-tag 200 //和方法一含义相同
方法三
ospf 1
vpn-instance-capability simple //同时关闭DN、route tag检查防环
不管使用1、2、3哪种方法,关闭了DN检查同时也关闭了route tag检查后,R2的vrf全局路由表去往77.77.77.77就变成了左侧学到的ospf路由,然后回灌回bgp再传给R1,因为R1针对R2发过去的vpnv4路有修改过preval值,R1就选择从R2去往77.77.77.77了 – 环路产生
R2
R5去往77.77.77.77 产生环路
1.3.4、结论分析
5类LSA防环有两个机制(并列运行):
A、5类LSA dn = 1 不接受路由 防环
B、5类LSA route tag和自己bgp AS号相同 不接受路由 防环
含义都是在第一个PE上的BGP引入vrf 里的ospf时,让ospf携带一个值(DN =1 或 route tag),传给CE,CE站点再把这个带着值的LSA传回给连接相同站点的另一个PE,PE在vrf的ospf接受时通过值判断,是同一个AS的另一台BGP传进的这个vrf….就不接受
2、双PE-CE BGP环路(SoO)
2.1、基础配置
2.1.1、核心网配置(省略)
核心网IGP配置 – 省略
mpls ldp配置 – 省略
mpbgp邻居配置 – 省略 (R1、R2、R3建全互联mpbgp邻居,R4不运行bgp)
两端CE bgp配置 – 省略
注意:左侧双CE站点底层igp可达 – loopback建ibgp邻居
左侧双CE站点 ibgp水平分割 - R5、R6、R8全互联或配置R5为RR
2.1.2、左侧站点CE配置
(右侧站点CE省略,R7起个bgp,宣告77.77.77.77)
R5
isis 1 //底层igp loopback口可达
is-level level-2
cost-style wide
network-entity 49.0001.0000.0000.0005.00
interface GigabitEthernet0/0/0
ip address 56.1.1.5 255.255.255.0
isis enable 1
interface GigabitEthernet0/0/1
ip address 58.1.1.5 255.255.255.0
isis enable 1
interface LoopBack0
ip address 5.5.5.5 255.255.255.255
isis enable 1
bgp 56
router-id 5.5.5.5
peer 6.6.6.6 as-number 56
peer 6.6.6.6 connect-interface LoopBack0
peer 6.6.6.6 reflect-client //R8 、R6反射路由
peer 6.6.6.6 next-hop-local //ibgp边界修改下一跳
peer 8.8.8.8 as-number 56
peer 8.8.8.8 connect-interface LoopBack0
peer 8.8.8.8 reflect-client
peer 8.8.8.8 next-hop-local
peer 15.1.1.1 as-number 100
R6
isis 1
is-level level-2
cost-style wide
network-entity 49.0001.0000.0000.0006.00
interface GigabitEthernet0/0/0
ip address 56.1.1.6 255.255.255.0
isis enable 1
interface LoopBack0
ip address 6.6.6.6 255.255.255.255
isis enable 1
bgp 56
router-id 6.6.6.6
peer 5.5.5.5 as-number 56
peer 5.5.5.5 connect-interface LoopBack0
peer 5.5.5.5 next-hop-local
peer 26.1.1.2 as-number 100
R8
bgp 56
router-id 8.8.8.8
peer 5.5.5.5 as-number 56
peer 5.5.5.5 connect-interface LoopBack0
network 88.88.88.88 255.255.255.255
2.1.3、3个PE VRF配置
RD:两边站点RD不一样
RT:两边站点RT一样
R1
ip vpn-instance r568
ipv4-family
route-distinguisher 100:568
vpn-target 100:100 export-extcommunity
vpn-target 100:100 import-extcommunity
interface GigabitEthernet0/0/2
ip binding vpn-instance r568
ip address 15.1.1.1 255.255.255.0
R2
ip vpn-instance r568
ipv4-family
route-distinguisher 100:568
vpn-target 100:100 export-extcommunity
vpn-target 100:100 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance r568
ip address 26.1.1.2 255.255.255.0
R3
ip vpn-instance r7
ipv4-family
route-distinguisher 100:7
vpn-target 100:100 export-extcommunity
vpn-target 100:100 import-extcommunity
interface GigabitEthernet0/0/1
ip binding vpn-instance r7
ip address 37.1.1.3 255.255.255.0
2.1.4、3个PE路由协议配置
R1
bgp 100
ipv4-family vpn-instance r568
peer 15.1.1.5 as-number 56
R2
bgp 100
ipv4-family vpn-instance r568
peer 26.1.1.6 as-number 56
R3
bgp 100
ipv4-family vpn-instance r7
peer 37.1.1.7 as-number 56
R5、R6验证bgp邻居关系
2.2、两端CE路由学习(AS替换)
以R8的88.1.1.1路由传递给R7为例,因为左右两端站点AS号相同
会导致R8 > R5 >R1 > R3 > R7的时候R7发现AS_PATH和自己AS号相同,不接受
R3查看bgp路由表:dis bgp vpnv4 all routing-table 88.1.1.1
R7查看bgp路由表 – 因为AS path防环不收
解决方法:使用三个PE对三个CE 打AS号替换,将自己传出的bgp as_path替换为自己的100
R1
bgp 100
ipv4-family vpn-instance test
peer 15.1.1.5 substitute-as //as号替换为自己的100
R2
bgp 100
ipv4-family vpn-instance test
peer 26.1.1.6 substitute-as
R3
bgp 100
ipv4-family vpn-instance test
peer 37.1.1.7 substitute-as
R7、R8查看bgp表
R8测试连通性
2.3、调整选路,观察环路
以R8的88.1.1.1 路由传递给R7为例,针对R1这台路由器来说
R1收取88.1.1.1两个方向:R5和R2发过来的
正确方向:R8 > R5 > R1 ebgp邻居传过来
环路方向:R8 > R5 > R6 > R2 > R1 ibgp 邻居vpnv4传过来
默认情况下:R1会选择正确的R1去往R8,因为Ebgp > Ibgp
R1查看vrf bgp表详细信息
dis bgp vpnv4 all routing-table 88.1.1.1
R1上针对R2传过来的vpnv4路由preval值改大(选路第一条,优先去R8走R2)
R1
bgp 100
ipv4-family vpnv4
peer 2.1.1.1 preferred-value 100 //R2邻居发送过来的vpnv4路由,preval值改大
R1再次查看vrf bgp表
dis bgp vpnv4 all routing-table 88.1.1.1
R1去往R8走R2后,就会把路由继续传递给R5,R5查看bgp表
由于R1传递给R5的PV值为100,故优选R1传递过来的路由
如果设置PV值相同,R5会从R8直接学的路由as_path = 0 ,从R1学的路由as_path = 100 100(R1打了as替换),所以R5直接从R8走。
R5将从R1学到的路由preval改大(选路第一条,强行让R5 去R8从R1走)
R5
bgp 56
peer 15.1.1.1 preferred-value 100 //从R5学的所有路由preval 改大
R7访问88.1.1.1测试
2.4、解决方法:SoO
SoO最终目的:对于PE来讲,从CE所在站点收到的路由不能再传回这个站点
在R1、R2两台连接同站点的CE上,部署SoO(Site of Origin)避免环路
R1
bgp 100
ipv4-family vpn-instance r568
peer 15.1.1.5 soo 56:1
注:针对这个邻居收的路由打上soo 56:1,发路由时检查是否携带56:1,携带就不发
R2
bgp 100
ipv4-family vpn-instance r568
peer 26.1.1.6 soo 56:1
R1查看从R2学到的去往88.1.1.1的路由
因为R2打了soo,会在路由中携带soo作为vpnv4路由传给R1(R1再转成ipv4路由)
部署SoO之前R1的bgp表:
部署Soo之后R1的bgp表:
R5查看自己的bgp表
R7再次测试访问88.1.1.1
2.5、结论分析
相同AS的多个PE连接相同站点的多CE的bgp环境默认不会出现环路,因为有AS_PATH属性防环。
如果出现多个站点AS号相同,需要在PE打上AS号替换、且同一客户端站点有多个CE出口连接到相同的AS时,才可能出现环路。此时解决方法是使用SoO
SoO应用场景:因为多站点AS号相同,已经部署了AS号替换的情况下,同一个As的多个或单个PE连接同一个站点的多个CE
SoO部署位置:连接相同CE的PE上对CE指定SoO属性
SoO原理:PE一旦对CE指定了SoO包含两层含义:
A、 从CE收到的路由,会携带SoO属性传递给其他邻居
B、 向CE发送路由时,检查路由本身携带的SoO值是否与针对邻居配置SoO值相同,相同就不发送