一、拓扑
拓扑以及地址规划如下:
二、需求
甲乙为同一家公司的俩个分公司,且存在业务A、B。要求业务A流量走运营商A;业务B流量走运营商B;同时互备。链路损坏时,走备份且继续走本运营商。
三、实现
(一)规则
1、地址规则
业务A:10.1.X.Y X:PC号;Y:2
业务B:10.2.X.Y X:PC号;Y:2
接口地址:
分公司甲:10.3.X.Y
分公司乙:10.5.X.Y
运营商A:10.6.X.Y
运营商B:10.7.X.Y
AS之间:10.0.X.Y
X:设备号由大到小 Y:设备号大为2;设备号小为1
(二)整体思路
BGP邻居都起来宣告以后,我们需要干涉选路。我们先按业务抓取流量打标记,然后按照业务做策略;但是当公司和运营商链路故障时选路将一团糟,我们将通过抓取标记,带业务A标记的路由通过修改preferred-value全部扔在运营商A的区域,带业务B标记的路由通过修改preferred-value全部扔在运营商B的区域。
(三)正常配置
1、接口配置IP地址,以R1为例:
2、因为IBGP需要环回建邻,所以我们需要让底层环回先通;可以写静态,也可以跑协议,这里我们选择跑OSPF协议;配置我们以R1为例:
OSPF配置:
OSPF邻居:
3、我们分别建立IBGP和EBGP邻居,这里我们建议建立IBGP时先建立组,再建邻,这样可以为之后的策略省一些配置。我们继续以R1的配置为参考:
BGP配置:
BGP邻居:
4、宣告路由
R11:
R9:
测试:
PC5->PC3:
PC3->PC5:
互通且往返选路相同,基本要求我们已经满足了,接下来就是调用策略满足特殊要求。
(三)做策略
A.链路正常时
需求:业务A走运营商A;业务B有运营商B,且相互备份。
1、因为需要业务分流,那我们首先做的就是按照业务抓住这些流量。在R9、R10、R11上分别操作了以后我们继续。
###抓流量
[r9]ip ip-prefix 1 permit 10.1.0.0 16 greater-equal 17
[r9]ip ip-prefix 2 permit 10.2.0.0 16 greater-equal 17
###打标签
[r9]route-policy 1dbj permit node 10
Info: New Sequence of this List.
[r9-route-policy]if
[r9-route-policy]if-match ip-prefix 1
[r9-route-policy]apply community 1:3
[r9-route-policy]route-policy 1dbj permit node 20
Info: New Sequence of this List.
[r9-route-policy]q
###选路
[r9]route-policy 2x permit node 10
Info: New Sequence of this List.
[r9-route-policy]if
[r9-route-policy]if-match ip-prefix 2
[r9-route-policy]apply preferred-value 100
[r9-route-policy]route-policy 1dbj permit node 20
Info: New Sequence of this List.
[r9-route-policy]q
###调用
[r9]bgp 3
[r9-bgp]peer 10.0.91.1 route-policy 1dbj export
[r9-bgp]peer 10.3.109.1 route-policy 2x import
2、我们抓住这些流量并帮忙选路以后我们可以看到业务分流和备份的需求我们已经做到了,我们以R11为例看一看:
R11的BGP路由表:
PC1-PC5通信
PC2-PC6通信
我们可知他们往返选路完全一样,接下来我们需要完成链路故障时他们的选路依旧按照业务分流且往返选路相同。
B.链路故障时
我们断掉R9-R1的链路,模拟业务A无法正常通信,通过策略让它继续业务分流,走运营商A。
目前选路:
PC3-PC5通信
可知,PC5->PC3时,业务A走了运营商B
可知,PC3->PC5时,业务A走也了运营商B
至此我们可知,公司和运营商之间链路故障时我们的选路已经完全乱了,我们需要通过做策略继续做到业务分流,且来回选路一致。我们做策略需要一个邻居之间互不影响的BGP的属性,权衡再三我们决定使用preferred-value。
具体思路如下:我们在运营商的路由器上做策略,通过修改preferred-value将带1:*标记全扔在运营商A;带2:*标记全扔在运营商B即可。
1、抓取1:*;2:*流量,并修改preferred-value值为100,调用给邻居。我们需要在R1、R3、R5、R7配置和下面相同的配置。
###抓取带标记的流量
[r7]ip community-filter 100 permit 1:.*
[r7]ip community-filter 101 permit 2:.*
###对业务A做策略
[r7]route-policy 1 permit node 10
Info: New Sequence of this List.
[r7-route-policy]if-match community-filter 100
[r7-route-policy]apply preferred-value 100
[r7-route-policy]route-policy 1 permit node 20
Info: New Sequence of this List.
[r7-route-policy]q
###对业务B做策略
[r7-route-policy]route-policy 2 permit node 10
Info: New Sequence of this List.
[r7-route-policy]if-match community-filter 101
[r7-route-policy]apply preferred-value 100
[r7-route-policy]route-policy 2 permit node 20
Info: New Sequence of this List.
[r7-route-policy]q
###调用策略
[r7]bgp 1
[r7-bgp]peer IBGP route-policy 1 import
[r7-bgp]peer 10.0.87.2 route-policy 2 import
2、我们需要在R2、R4、R6、R8配置和下面相同的配置。
###抓取带标记的流量
[r2]ip community-filter 100 permit 1:.*
[r2]ip community-filter 101 permit 2:.*
###对业务A做策略
[r2]route-policy 1 permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match community-filter 100
[r2-route-policy]apply preferred-value 100
[r2-route-policy]route-policy 1 permit node 20
Info: New Sequence of this List.
[r2-route-policy]q
###对业务B做策略
[r2-route-policy]route-policy 2 permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match community-filter 101
[r2-route-policy]apply preferred-value 100
[r2-route-policy]route-policy 2 permit node 20
Info: New Sequence of this List.
[r2-route-policy]q
###调用策略
[r2]bgp 2
[r2-bgp]peer IBGP route-policy 2 import
[r2-bgp]peer 10.0.21.1 route-policy 1 import
做完这些策略以后,我们看PC3-PC5通信:
PC3-PC5:
由此,我们可知他们的业务已经分流了,但是往返的路线选择最然在同一个运营商路线却不相同是由于我在配置BGP协议时没有配置router-ID,若配置以后则会相同。到这里我们的实验就圆满完成了。