BGP负载均衡–负载分担
形成负载分担的条件—>BGP路由优选规则的1至8条规则中需要比较的路径属性完成相同。
[r4-bgp]maximum load-balancing ?
INTEGER<1-8> Specify maximum equal cost routes
ebgp EBGP routes as equal cost route
ibgp IBGP routes as equal cost route
[r4-bgp]maximum load-balancing e
[r4-bgp]maximum load-balancing ebgp 2 ---修改BGP最大负载分担路由条目为2,默认情况为1。
如果携带了ebgp或者ibgp参数,则代表对某种方式学习到的路由进行负载分担,不携带参数则代表全局执行。
在实现负载均衡后,无论是否配置了next-hop-local命令,本地设备都会向自己的IBGP对等体发布路由时,将下一跳修改为本地地址。
注意内容:当满足如下所有条件时,可以形成等价路由,从而形成负载均衡
- 原始下一跳不同
- PV、LP相同
- 都是聚合路由或者都不是聚合路由。
- 起源吗相同、MED相同
- 都是EBGP路由或者都是IBGP路由
- AS内部的IGP开销值相同
- AS_Path完全相同----内容相同,顺序相同,长度相同。
[r4-bgp]load-balancing as-path-ignore ---忽略在进行负载均衡配置时的AS_Path属性对比。
BGP的路由过滤
需求:通过路由策略来完成,不让R2将172.16.1.0/24传递给R3
1、抓流量
[r2]ip ip-prefix aa permit 172.16.1.0 24
2、做策略
[r2]route-policy aa deny node 10
[r2-route-policy]if-match ip-prefix aa
[r2]route-policy aa permit node 20
3、调用
[r2-bgp]peer 10.1.23.3 route-policy aa export
需求:不让R3学习到172.16.2.0/24,使用前缀列表
1、配置前缀列表
[r3]ip ip-prefix aa deny 172.16.2.0 24
[r3]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32
2、调用
[r3-bgp]peer 10.1.23.2 ip-prefix aa import
需求:通过filter-policy来完成,不让R2和R3学习172.16.3.0/24路由
1、配置ACL列表
[r2-acl-basic-2000]rule deny source 172.16.3.0 0
[r2-acl-basic-2000]rule permit source any
2、调用
[r2-bgp]peer 10.1.12.1 filter-policy 2000 import
----在BGP中使用过滤策略时,只能调用ACL列表,所以必须使用ACL列表来抓取流量
BGP的社团属性----Community
类似于路由的“标记”,我们可以针对特定的路由设定特定的社团属性数值,而下游路由器在执行路由策略时,可以通过社团属性来匹配目标路由信息。
社团属性是由32位二进制构成
- 十进制表示
- 十六位二进制:十六位二进制
在一条路由条目中,可以用多个团体属性进行标识。
名称 | 取值 | 功能 |
---|---|---|
internet | 0x00000000 | 代表所有路由信息 |
NO-advertise | 0xFFFFFF02 | 不能被通告给任何BGP对等体 |
no-export | 0xFFFFFF01 | 不能通告给EBGP对等体,但是可以通告给联邦的EBGP对等体 |
no-export-sub | 0xFFFFFF03 | 不能通告给任何EBGP对等体 |
1、抓流量
[r1]ip ip-prefix aa permit 1.1.1.1 32
2、做策略
[r1]route-policy com permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-route-policy]apply community no-advertise
3、调用
[r1-bgp]peer 12.0.0.2 route-policy com export 是传递给R2出去时打上的标签
-----------------给路由打上社团属性标记-------------------------
目前大部分厂商默认在传递BGP路由信息时不传递社团属性,所以,需要传递社团属性,需要通过命令打开。
[r1-bgp]peer 12.0.0.2 advertise-community ---开启社团属性的传播性
社团属性应用场景
业务A--->100:111 业务B--->100:222
1、设定策略,定义社团属性标记
[r1]route-policy com-1 permit node 10
[r1-route-policy]apply community 100:111
[r1]route-policy com-2 permit node 10
[r1-route-policy]apply community 100:222
2、在发布路由时调用策略
[r1-bgp]network 172.16.1.0 24 route-policy com-1
[r1-bgp]network 172.16.2.0 24 route-policy com-1
[r1-bgp]network 172.16.3.0 24 route-policy com-2
[r1-bgp]network 172.16.4.0 24 route-policy com-2
3、开启社团属性的传播功能
[r1-bgp]peer 10.1.12.2 advertise-community
[r2-bgp]peer 10.1.23.3 advertise-community
需求:对业务A的流量拒绝,对业务B的流量打上no-export属性。在AS 200中
4、抓取流量
通过社团属性过滤器来抓取携带社团属性的路由信息
[r2]ip community-filter 1 permit 100:111
[r2]ip community-filter 2 permit 100:222
5、做策略
[r2]route-policy com deny node 10
[r2-route-policy]if-match community-filter 1
[r2]route-policy com permit node 20
[r2-route-policy]if-match community-filter 2
[r2-route-policy]apply community no-export additive ---如果没有additive参数则代表直接覆盖,现在是在100:222上添加
[r2]route-policy com permit node 30
6、调用策略
[r2-bgp]peer 10.1.12.1 route-policy com import
AS路径过滤器
需求:
1、禁止R3将始发于AS 100的路由传递给R5
2、R4将始发于AS 200的路由传递给R5时,修改MED
1、抓取流量
[r3]ip as-path-filter 1 deny _100$
[r3]ip as-path-filter 1 permit .* 匹配所有信息
2、调用策略
[r3-bgp]peer 10.1.35.5 as-path-filter 1 export
----------------------------R3------------------------------
1、抓取流量
[r4]ip as-path-filter 1 permit ^200$
2、做策略
[r4]route-policy aa permit node 10
[r4-route-policy]if-match as-path-filter 1
[r4-route-policy]apply cost 10000
[r4]route-policy aa permit node 20
3、调用
[r4-bgp]peer 10.1.45.5 route-policy aa export
AS路径过滤器末尾隐含拒绝所有条件。
正则表达式
目的:检查字符串中符合某个规则的特定子字符串,并且可以捕获这个字符串。
- 普通字符----所有的大写和小写字母、数字、标点符号
- 特殊字符----具备特殊含义
特殊字符 | 功能 | 举例 |
---|---|---|
^ | 行首 | ^10–>匹配10.10.10.1,以10开头 |
$ | 行尾 | 1$ |
* | 匹配子正则表达式0次或多次 | 10*,仅代表对0一个字符0次或多次的重复 |
+ | 匹配子正则表达式1次或多次 | 10+ |
? | 匹配子正则表达式0次或1次 | 10?,要么匹配1,要么匹配0 |
. | 匹配任意单个字符 | 0.0,前后必须都为0,中间可以为任意的一个字符 |
() | 括号内看做一个整体 | |
_下划线 | 匹配任意括号,逗号,空格 | |
\ | 转义字符,将下一个字符转换为普通字符 | \* 匹配* |
X|Y | 匹配X或者Y | |
[XYZ] | 匹配包含的任意一个字符 | |
[^XYZ] | 匹配未包含的任意一个字符 | [^123]匹配除了1、2、3以外的任意字符 |
例题:
AS_Path
1 2 3 100 200 300
1 1 1 200 100 200---匹配
1 2 1 200 100 200
100 200 300
1 2 3 3 3 100 200 300
^[1|_]*20
^1_1_1_200_100_200$