如图所示,MSR3分别与MSR1 MSR2 MSR5建立EBGP邻居MSR1 MSR4 MSR3 MSR5分别属于AS100 AS300 AS200 AS400.
目前需要实现,MSR3对于从联通收到的100.100.100.100的路由只会通过联通的链路传到MSR5,MSR3对于从电信收到的100.100.100.100的路由只会从电信的链路传到MSR5
MSR3 对于与MSR5电信链路建立的EBGP邻居过滤关键配置:
以下ACL能够实现,只接收AS path路径中包含AS300的路由,其余路由全拒绝,相当于一个白名单
ip as-path 2 permit _300_
ip as-path 2 deny .*
bgp 200
peer 1.1.1.1 as-number 100
peer 2.1.1.1 as-number 300
peer 3.1.1.2 as-number 400
peer 4.1.1.2 as-number 400
#
address-family ipv4 unicast
peer 1.1.1.1 enable
peer 2.1.1.1 enable
peer 3.1.1.2 enable
peer 3.1.1.2 as-path-acl 1 export
peer 4.1.1.2 enable
peer 4.1.1.2 as-path-acl 2 export
#
为了测试模拟效果,将MSR3与MSR4相连的电信链路断掉,将MSR3与MSR5相连的联通链路断掉,此时不做任何过滤条件之前,MSR5上可以学到来自AS100即联通链路传过来的100.100.100.100的路由,下一跳指向4.1.1.1,如果加上过滤条件,则MSR5上将学习不到来自AS100的100.100.100.100的路由
加过滤条件之前:
[MSR5]display ip routing-table
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 Static 60 0 4.1.1.1 GE5/0
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.0/24 BGP 255 0 4.1.1.1 GE5/0
4.1.1.0/24 Direct 0 0 4.1.1.2 GE5/0
4.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
4.1.1.255/32 Direct 0 0 4.1.1.2 GE5/0
100.100.100.100/32 BGP 255 0 4.1.1.1 GE5/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
加过滤条件之后:
[MSR5]display ip routing-table
Destinations : 11 Routes : 11
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 Static 60 0 4.1.1.1 GE5/0
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
4.1.1.0/24 Direct 0 0 4.1.1.2 GE5/0
4.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
4.1.1.255/32 Direct 0 0 4.1.1.2 GE5/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
正则表达式一定要配置正确
常用的正则表达式如下:
AS路径是BGP的路由属性之一,记录了某条路由从本地到目的地址所要经过的所有AS号。AS_PATH属性在BGP路由表中的显示格式如图所示:
图1-1 AS_PATH的显示格式
从图中可以得知AS_PATH可以看作是一个由数字0~9、“()”、“[]”、“{}”和空格组成的字符串,各部分表示的含义如下:
· AS_CONFED_SEQUENCE:联盟内子AS号按照一定的顺序排列。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
· AS_CONFED_SET:联盟内经过的子AS号的简单罗列,没有顺序要求。
· AS_SEQUENCE:AS号按照一定的顺序排列。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
· AS_SET:AS号只是经过的AS的简单罗列,没有顺序要求。
需要注意的是,BGP路由的AS_PATH属性不一定完整包含上述四个部分,请以实际情况为准。
AS路径过滤列表根据正则表达式来匹配BGP路由中的AS_PATH属性,从而达到过滤路由信息的目的。
表1-1 正则表达式在AS路径过滤列表中的应用举例
特殊字符 |
含义 |
举例 |
^ |
匹配以指定字符开始的行 |
匹配AS_PATH为空的路由(本地路由): ip as-path as-path-number { deny | permit } ^$ |
$ |
匹配以指定字符结束的行 |
匹配从AS100始发的路由: ip as-path as-path-number { deny | permit } 100$ |
. |
通配符,可代表任何一个字符 |
匹配经过了AS100的路由(非始发或最后一个AS): ip as-path as-path-number { deny | permit } ._100_. |
* |
匹配星号前面的字符或字符串零次或多次 |
匹配任意AS_PATH的路由: ip as-path as-path-number { deny | permit } .* |
+ |
匹配+前面的字符或字符串一次或多次 |
匹配AS路径中包含“5”的路由: ip as-path as-path-number { deny | permit } 5+ |
x|y |
匹配|左边或右边的整个字符串 |
匹配从AS100或AS200始发的路由: ip as-path as-path-number { deny | permit } 100$|200$ |
( ) |
表示字符串,一般与“+”或“*”等符号一起使用 |
匹配AS路径中包含“123”的路由: ip as-path as-path-number { deny | permit } (123)+ |
[xyz] |
表示字符选择范围,将以选择范围内的单个字符为条件进行匹配,只要字符串里包含该范围的某个字符就能匹配到 |
匹配从单一路径AS10~AS19收到的路由: ip as-path as-path-number { deny | permit } ^1[0-9]$ |
[^xyz] |
表示选择范围外的字符,将以单个字符为条件进行匹配,只要字符串里包含该范围外的某个字符就能匹配到 |
匹配始发AS的末位不为“2”或“4”的路由: ip as-path as-path-number { deny | permit } [^24]$ |
{n} |
n是一个非负整数,匹配n次 |
匹配AS路径中包含“55”的路由: ip as-path as-path-number { deny | permit } 5{2} |
{n,} |
n是一个非负整数,至少匹配n次 |
匹配AS路径中至少包含两个连续“5”的路由: ip as-path as-path-number { deny | permit } 5{2,} |
{n,m} |
m和n均为非负整数,其中n小于等于m。只要字符串里包含n到m个某字符就能匹配到 |
匹配AS路径中至少包含一个“5”或两个连续“5”的路由: ip as-path as-path-number { deny | permit } 5{1,2} |
[a-z] |
匹配指定字符范围内的任意字符。不可同时匹配多个字符,也不可匹配同一个字符多次 |
匹配AS路径中包含“0”、“1”或“2”的路由: ip as-path as-path-number { deny | permit }[0-2] |
[^a-z] |
匹配任何不在指定范围的任意字符。只要字符串里有指定范围外的字符就能匹配到 |
匹配单一AS路径中不包含“0”、“1”和“2”的路由: ip as-path as-path-number { deny | permit }^ [^0-2]$ |
_ |
匹配一个符号,如逗号、左大括号、右大括号、左括号、右括号和空格等符号,在表达式的开头或结尾时还可作起始符、结束符(同^,$) |
匹配经过AS101 100的路由: ip as-path as-path-number { deny | permit } 101_100_ |
\b |
匹配一个单词边界,也就是指单词和空格间的位置 |
匹配从AS100始发的路由: ip as-path as-path-number { deny | permit } \b100$ |
\B |
匹配非单词边界 |
匹配从AS号以1开头的AS收到的路由: ip as-path as-path-number { deny | permit } ^1\B |
\ |
转义操作符,\后紧跟本表中罗列的单个特殊字符时,将去除特殊字符的特定含义 |
无 |
\w |
\w等效于[A-Za-z0-9_],是数字、字母或下划线 |
匹配AS路径中包含两位数AS的路由: ip as-path as-path-number \w{2} |
\W |
\W等效于[^A-Za-z0-9_],是除了数字、字母和下划线之外的任意字符 |
无 |
\index |
表示重复一次指定字符串,字符串是指\前用()括起来的字符串,index对应\前字符串的顺序号按从左至右的顺序从1开始编号:如果\前面只有一个字符串,则index只能为1;如果\前面有n个字符串,则index可以为1到n中的任意整数 |
匹配AS路径中包含两个连续的“1”的路由: ip as-path as-path-number (1)\1 |
匹配相同条件AS路径过滤列表的正则表达式并不唯一,表1-1中的正则表达式仅为示例。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作