假设:
您的公司已设置AWS Direct Connect以将本地连接到Amazon VPC实例。
两个直接连接在两个不同的位置终止直接连接位置。您正在本地使用两个路由器,R1和R2(每个直接连接一个)。R1和R2它们之间的没有连通性。两个路由器通过BGP向VGW播发相同的路由。每个路由器上都有一个有状态防火墙。现在的情况是路由器丢弃来自专有网络的部分流量。
应该在本地采取什么措施来解决此问题?
考虑使用BGP属性:AS_Path,Local_Pref和MED(Multi_Exit_Disc)
网络拓扑
设计需要考虑的事项
- 有状态的防火墙:这就要求在设计上对流量的主用在同一链路进出,在本案例中要不考虑使用R1-DX路径,要不考虑R2-DX路径
- 路由选择:在本案例中需要在本地路由器上做配置,那么要影响公布给VPC的路由路径
BGP属性分析
BGP 路径属性
路径属性是已公布的BGP路由的一个特点。除了提供基本路由功能的必须的信息,路径属性允许BGP设置和互通路由策略。 每一个路径属性可能是下面四种中的一种:
- 公认必选
- 公认自选
- 任选可透明传送
- 任选非可透明传送
公认属性可以是强制性的,意味着所有的BGP Update 消息都要包括该属性,该属性也可以是任选的,也就是说在规定的更新消息中既可以包括它也可以不包括它。
如果一个任选属性是可传递的,即使BGP过程不支持该属性,它也应当接受包含该属性的路由并且把这个路径传送它的对端。
如果一个任选属性是不可传递的,不识别该属性的 BGP 过程可以忽略包含这个属性的Update 消息并且不向它的对端公布这条路径。
主要的属性及类别
属性 | 类别 |
---|---|
ORIGIN | 公认必选 |
AS_PATH | 公认必选 |
NEXT_HOP | 公认必选 |
LOCAL_PREF | 公认自选 |
ATOMIC_AFFREGATE | 公认自选 |
AGGREGATOR | 任选可透明传送 |
COMMUNITY | 任选可透明传送 |
MULTI_EXIT_DISC(MED) | 任选非可透明传送 |
ORIGINATOR_ID | 任选非可透明传送 |
CLUSTER_LIST | 任选非可透明传送 |
选路的准则
- 首选具有最高管理权值的路由。该功能是Cisco特有的。
- 如果权值相同,首选具有最高LOCAL_PREF值的路由。
- 如果LOCAL_PREF值相同,首选逻辑上在该路由器上发起的路由。也就是说,首选从同一个路由器上的IGP学习到的路由。
- 如果 LOCALPREF 值相同,而且没有逻辑上发起的路由,首选具有最短 AS_PATH的路由。
- 如果AS_PATH长度相同,首选具有最低原码(ORIGIN CODE)的路由。IGP低于EGP,EGP低于Incomplete。
- 如果源代码相同,首选具有最低 MULTI_EXIT_DISC 值的路由。只有当要考虑的所有路由的AS号都相同时,才会进行此项比较。
- 如果MED相同,在EBGP路由和联盟 EBGP路由中,首选EBGP路由,在联盟 EBGP路由和IBGP路由中首选联盟EBGP路由。
- 如果路由相同,首选到BGP下一跳最短的路径。这是一条到下一跳路由器的具有最低IGP度量的路由。
- 如果路由相同,它们来自相同的相邻AS并且通过maximum-paths命令使BGP多条路径可用,那么将所有开销相同的路由安装到Loc-RIB中。
- 如果多条路径不可用,首选具有最低BGP路由器ID的路由。
本案例中,我们需要考虑Origin、AS_Path、LOCAL_PREF和MULTI_EXIT_DISC(MED),其选路优先级为LOCAL_PREF>AS_Path>MULTI_EXIT_DISC(MED)。
1. ORIGIN 属性
ORIGIN是一个公认必选的属性,它明确了路由更新消息的来源。当BGP有多条路由时,它会将ORIGIN当作一个决定较优路由的因素。 它规定了下面几种源:
- IGP–从发起者AS的一个内部协议可以学习到网络层可到达信息(NLRI)。一个IGP源会得到ORIGIN值中最佳的选项。如果BGP路由是从IGP路由表通过 network 命令学到的
- EGP–NLRI是从EGP学习到的。相对于IGP,EGP是第二选择。
- Incomplete–NLRI是通过其他手段学习到的。Incomplete 是ORIGIN 值的最低的选择。Incomplete 并不代表路由在任何情况下都有故障,只代表决定路由来源的信息不完整。 BGP通过再分发学习到的路由会携带不完整的源属性,因为在这种情况下无法决定路由的初始源。 如在使用MED属性后,看到的bgp的Origin属性就是Incomplete:
Innsbruck#show ip bgp 172.16.0.0
BGP routing table entry for 172.16.0.0/16,version 10
Paths:(2 available,best #2)
Advertised to non peer-group peers:
10.50.250.1 10.75.100.1
30
172.30.255.254 from 172.30.255.254(172.30.255.254)
Origin incomplete, metric 200, localpref 100, valid, external,ref 2
30
10.100.65.1 from 10.100.65.1 (10.100.65.1)
Origin incomplete,metric 100,localpref 100,valid, internal, best,ref 2
2. AS_PATH 属性
AS_PATH是一个公认必选(Well-Known Mandatory)属性,它用AS号的顺序来描述 AS间的路径或者到NLRI所明确的目的地的路由。
运行BGP的路由器在BGP路由表发现同一条路由信息如果有多个路径,会选择AS_PATH属性较短的路径。
当一个运行BGP的路由器发起一条路由(它在自己的AS域内公布一个有关目的地的NLRI),它会将自己的AS号加到AS_PATH中。
而后续的运行BGP的路由器向外部的对端公布路由,它们将自己的AS号附加到AS_PATH中。
结果是AS_PATH可以描述所有它经过的自治系统,以最近的AS开始,以发起者的AS结束。
注意,只有将Update 消息发送给在另外一个AS域内的邻居时,BGP路由器才将它的AS号加到AS_PATH中。
也就是说,只有在两个EBGP对等实体之间公布路由时,AS号才被附加到AS_PATH中。如果路由是在IBGP对等实体之间公布(对等实体在相同的自治系统内)不加入任何AS号。
AS_PATH Prepend
BGP可以通过改变AS_PATH来影响进站流量,而使用的增加出站AS_Path 的ID方式达到目的。如下面的情况
NAP到AS 100的路由通常应该是NAP->AS 300->AS 100。
如果我们出于某种原因(AS 200提供更大带宽,Cost更便宜等),我们可以使用以下配置将AS 100 对201.126.0.0/16出站AS_PATH进行修改
router bgp 100
no synchronization
neighbor 10.100.82.1 remote-as 200
neighbor 10.100.83.1 remote-as 300
Loopbacko neighbor 10.100.83.1 route-map PATH out
....
no auto-summary
!
access-list 3 permit 201.126.0.0
!
route-map PATH permit 10
match ip address 3
set as-path prepend 100 100
!
route-map PATH permit 20
修改之后
NAP到AS100 的两条路径的AS_PATH分别为:500-200-100和300-100-100-100,NAP会选择前者。
3. LOCAL_PREF 属性
LOCAL_PREF是本地首选项的简写。
这个公认自选属性只用在内部网关对端之间的更新消息中;它不会传递给其他的自治系统。
该属性用于对一条已公布路由的BGP路由器的首选项等级进行交流。如果一个内部运行BGP的路由器收到了到一个目的地的多条路由,它将这些路由的LOCAL_PREF属性进行比较。选择具有最高的LOCAL_PREF的路由。
下图显示了如何使用LOCAL_PREF属性。
AS2101从两个ISP获得路由,需要把ISP1为首选服务提供商。 配置连接到ISP1路由器宣告路由的LOCAL_PREF为200,连接到ISP2的路由器宣告的路由的LOCAL_PREF为100(默认值),其值为4字节的数,0~4294967295。 所有的内部对等实体,包括连接到ISP2的路由器,对于同一目的,就会更优先选用从ISP1学到的路由。
我们可以看到,利用LOCAL_PREF属性可以影响离开AS的业务流量,限制就是仅仅在IGBP间作用。
4. MULTI_EXIT_DISC 属性
上面提到的LOCAL_PREF 属性只影响离开 AS 域的业务量。如果想影响入业务量,应该使用MULTI_EXIT_DISC 属性,它的简写是MED。
这个任选非传递属性于EBGP的Update 消息中携带,它允许一个AS将它首选的入口点通知另外一个AS。如果其他的参数都相同,收到到同一个目的地的多条路由的AS将这些路由的MED进行比较。
与选用最高LOCAL_PREF值的路由不同,具有最低MED值的路由是首选。这是因为将MED看作是一个度量,并且最低的度量(最短的距离)是首选。
如下图AS 525偏向于入业务量使用DS-3链路,而DS-1链路只用于备用。
MED DS-3传送的更新消息中,MED被置为0(缺省值),而通过DS-1传送的更新消息中,MED被置为100。 如两条路由没有其他不同的选项,ISP就会优先选择具有较低MED值的DS-3链路。
配置参考:
AS 525 R2:
router bgp 525
...
neighbor 10.100.83.1 remote-as 300
...
neighbor 10.100.83.1 route-map MED out
!
access-list 1 permit 206.25.160.0/19
route-map MED permit 10
match ip address 1
set metric 100
!
route-map MED permit
注意,在ISP内,路由器之间使用IBGP。在内部的对等实体之间传递来自 AS 525的MED,从而使它们都知道优选的路由。 但是,不会在接收AS范围之外的地方传递MED。
例如,如果ISP向另外一个AS公布206.25.160.0/19,它不会将发起AS所置的MED传递给那个AS。这也就是说,MED只是在直接相连的自治系统间影响业务量。
为了影响相邻AS以外的路由选项,就像前面所描述的,必须对AS_PATH属性进行处理。
另外,如果到同一个目的地的两条路由来自两个不同的自治系统,也不进行 MED值的比较。 例如,如果上图中的ISP不仅从AS 525收到关于206.25.160.0/19的路由宣告,而且还从另外一个AS收到关于它的路由宣告,那么来自不同的自治系统的MED不会进行比较。
MED只对单一的AS有意义,当该AS有多个入口点时,它用来说明首选项的等级。
案例详细设计
- On premise的两台路由器之间没有连接,不能建立IBGP连接,所以不能选择Local_pref属性;
- 可以选择AS_PATH属性,参考前面AS_PATH Prepend的例子。可以将R1的出口AS_Path设置增加AS ID,以使得R2为VGW的首选。
- 可以使用 MULTI_EXIT_DISC 属性,如果选择R2作为首选,可以将R1对VGW发布的本地路由的MED值改为100。