SR-MPLS-POLICY
理论知识
整体看
解析一下上图:
无论是SR-MPLS还是SRV6都可以在控制器的加持下使用SR-POLICY,如上图所示,SR-MPLS有三种转发方式:BE、TE、SR-POLICY,在SRV6当中就两种BE和SR-POLICY,SRV6当中没有TE,实际上SRV6的SRV6-POLICY就替代了TE。
- SR-MPLS的转发方式
- BE:不需要引流
- TE:在BE的基础上可以做TE,需要引流和配置隧道
- SR-POLICY
- 一般由控制器下发SR-POLICY,如果没有控制器,管理员也可以自己手工创建
- 在BE的基础上可以做POLICY,控制器直接下发标签列表,不需要隧道
- SRV6
- BE
- SRV6-POLICY(SR-POLICY就是SRV6的TE)
SR-POLICY当中的关键信息
SR-POLICY的本质是“地图”,控制器结合各种信息计算出一条最优秀的路径,这条路径就是SR-POLICY当中的主要信息,通过控制器下发到源节点,要求源节点在进行SR的封装时,必须将SR-POILCY当中的地图信息封装到报文内,这样报文就会按照地图当中的信息进行转发了。
SR-POLICY的应用场景:
SR-POLICY在设备上体现其实也是一条隧道,与TE隧道差不多,TE隧道有哪些应用场景,SR-POLICY隧道就有哪些应用场景,我们借用下面这张图来说明SR-POLICY是如何被使用的,如下所示:
-
环境描述:
- 假设PE3上当前有两个网段:33.33.33.33(RD)和44.44.44.44(NRD)网段,分别对应两个业务RD和NRD;
-
目标
- PE1想要实现访问PE3的33网段时走PE1-P1-PE3这条路径
- 访问PE3的44网段时走PE1-PE2-P2-PE4-PE3这条路径;
-
通过SR-POLICY的实现思路
-
在PE3上创建33网段对应VPN-INSTANCE,设置RD、RT,最关键的是通过BGP属性设置一个颜色值(33:33),这样PE3向33网段传到PE1时就会携带这个颜色值,PE3的44网段也要这么做(44:44),PE1上当前已经收到了PE3的两条路由,这两条路由是这样的:。
# PE1的路由表 33.33.33.33 下一跳:10.1.3.3 颜色值:33:33 44.44.44.44 下一跳:10.1.3.3 颜色值:44:44
-
在控制器上生成两条从PE1到PE3两个网段的路径的路径:P1和P2,P1到P3的33网段走PE1-P1-PE3,,P1到P3的44.44网段走PE1-PE2-P2-PE4-PE3,路径当然也包括颜色:33:33、44:44,控制器通过SR-POLICY将这两条路径下发到源节点PE1上,注意下发的不是配置,而是直接作用在内存当中的,重启设备就没有了;大概是这样的:
# PE1收到的两条SR-POLICY P1:PE1-P1-PE3 颜色值:33:33 P2:PE1-PE2-P2-PE4-PE3 颜色值:44:44
-
OK,带颜色值的路由条目已经从PE3传到到了PE1当中,并且已经形成了路由条目;而且SR-POLICY也已经成功下发到了PE1上,当前的问题是怎么用呢?其实你仔细观察一下这两个信息,路由表表示是从源和目标,但没有告诉你具体怎么走,而SR-POLICY里面最关键的内容就是具体如何走!也就是说这两个信息其实是互补的,而且它们都有一个共同的值,那就是颜色值!而且这个颜色值是对应好的!
当数据包来到PE1时,如果命中了33.33.33.33这条路由,由于这条路由带着颜色值,于是就会根据这个颜色值去查SR-POLICY的数据库,结果通过颜色匹配住了P1路径,那数据在进行IPV6报文当中SR对应的SRH封装时就会把这个路径封装到其中,沿途的所有路由器都需要按照这个路径进行转发。
细节看
SR-POLICY 路径并不是只有一条路径:
从PE1和PE3有多条路径可以走,所以控制器计算路径的时候很有可能会计算出多条,会挑选最优秀的一条把优先级提高,其它的路径也会跟着一条下发,只不过优先级不高,不会优选,只当做备份路径。
- 一个SR MPLS POLICY由以下三部分组成:
- 头端:就是代表自己,没啥用
- 颜色(BGP的团体属性)
- 尾端:目标路由器的全局唯一地址,比如10.0.3.3
颜色是什么意思
颜色是BGP的一种属性,其实就是一个值!我们可以通过ACL匹配住某路由条目,然后通过route-policy对BGP的路由打个一个值,这个值就是颜色,这个过程就是路由染色的过程。
SR-MPLS POLICY实验
1. PE1 制定两条路径
# PE1
# 第一步:PE1定义两条POLICY使用到的路径列表,属于SR-POLICY的一部分
segment-list to_pe3_1
index 10 sid lable 16005
index 20 sid label 16003
segment-list to_pe3_2
index 10 sid lable 16002
index 20 sid label 16006
index 30 sid label 16004
index 40 sid label 16003
2. PE1 调用路径生成SR-POLICY隧道
# 第二步:PE1结合颜色、endpoint配置SR-POLICY
sr-te policy p1 endpoint 10.1.3.3 color 100
# 设置主路径,优先极200
candidate-path prefernce 200
# 调用第一步定义的路径
segment-list to_pe3_1
# 再定义一条SR-POLICY
sr-te policy p1 endpoint 10.1.3.3 color 200
candidate-path prefernce 200
segment-list to_pe3_2
# PE1验证一下,会产生两个SR的隧道
dis tunnen-info all
xxxx01 srtepolicy 10.1.3.3
xxxx02 srtepolicy 10.1.3.3
# 验证两个隧道是否通畅
ping lsp sr-te policy policy-name p1
ping lsp sr-te policy policy-name p2
3. PE3路由染色
以上模拟的是控制器下发SR-POLICY的操作,现在我们还要去PE3上操作
# PE3
# PE3 当前SR-POLICY不是关键,不做也行,我们重点看PE1的
segment-list to_pe1_1
index 10 sid label 10005
index 20 sid label 10001
segment-list to_pe1_2
index 10 sid label 10004
index 20 sid label 10006
index 30 sid label 10002
index 40 sid label 10001
sr-te policy to_p1
sr-te policy pll endpoint 10.1.1.1 color 300
# 搞主备放到一个POLICY当中
# 不关心PE3是如何回包的,走以下哪个路径都行
candidate-path prefernce 200
segment-list to_pe1_1
candidate-path prefernce 100
segment-list to_pe1_2
# 关键的一步来了,我们要在PE3上去发布带颜色的路由
ip vpn-instance test1
route-dist 100:1
vpn-target 100:1
int lookback 1
ip binding vpn-instance test1
ip add 33.33.33.33 32
int lookback 2
ip binding vpn-instance test1
ip add 44.44.44.44 32
接下来的需求就很明确了,我们希望PE1访问PE3的33.33.33.33与PE1访问44.44.44.444走不同的路径
# 这一步操作最是关键,开始路由染色
# 先匹配上再打颜色
acl 2000
rule permit source 33.33.33.33
acl 2001
rule permit source 44.44.44.44
# 通过调用SR-POLICY进行打颜色
route-policy test_policy permit node 10
if-match acl 2000
# 0:100就是打上颜色100,正好与PE1上POLICY路径颜色对应
apply extommunity color 0:100
route-policy test_policy permit node 20
if-match acl 2001
# 0:200就是打上颜色200,正好与PE1上POLICY路径颜色对应
apply extommunity color 0:200
# 接下一就是PE3的BGP VPNV4的配置了,比较简单
bgp 100
peer 10.1.1.1 as 100
peer 10.0.1.1 connect-interface lookback 0
ipv4-family vpnv4
peer 10.1.1.1 enable
# 在出方向上调用刚才做好的POLICY
# 这样传到PE1形成的路径就会携带颜色
peer 10.0.1.1 route-policy test_policy export
ipv4-family vpn-instance test1
import-route direct
# 接下一就是PE1的BGP
bgp 100
peer 10.1.3.3 as 100
peer 10.0.3.3 connect-interface lookback 0
ipv4-family vpnv4
peer 10.1.3.3 enable
ipv4-family vpn-instace test1
import-route direct
ip vpn-instance test1
route-dist 100:1
vpn-target 100:1
int lookback 1
ip binding vpn-instance test1
ip add 11.11.11.11 32
4. PE1校验PE3的路由条目
# 校验一下,在PE1上看一个PE3传来的路由是否带了颜色
dis bgp vpnv4 all routing-table 33.33.33.33 verbose
……
# 来了
ext-community:0:100
……
dis bgp vpnv4 all routing-table 44.44.44.44 verbose
……
ext-community:0:200
……
# 再校验一下,PE1到33.33.33.33的路由指向是否递归到了SR隧道当中
# 发现递归到SRBE当中了,没有递归到SRTEPOLICY隧道当中,怎么回事,tunnel-policy的问题
dis ip routinng vpn-instance test1 33.33.33.33 verbose
dis tunnel-info all
5. PE1 路径选择
# 制定tunnel-policy策略,要求PE1先选择 sr-te-policy路径
tunnel-policy p1
tunnel select-seq sr-te-policy sr-lsp load-balance-number 1 nmix
# 在vpn实例下调用P1,再去校验就正常了
ip vpn-instace test1
tnl-policy p1
# PE1 看一下路径是否一致,正常情况下是不一致的
tracert -vpn-instance test1 -a 11.11.11.11 33.33.33.33
tracert -vpn-instance test1 -a 11.11.11.11 44.44.44.44
补充
SR-POLICY的路径匹配方式
- PE1上收到数据包之后是先命中路由,由于路由条目当中携带颜色,颜色再去匹配SR-POLICY数据库当中的路径,我们上述实验就是用的这种;
- 还有第二种,主机发出的业务路由是可以打上DSCP的值,我们在PE1也可以通过配置将DSCP与SR-POLICY当中的颜色做上关联,这样也能达到效果
路由染色的位置
路由染色并不是一定要在PE3的出接口染色,路由发出去的时候可以染色,那PE1路由接收的时候也是可以染色的!