现在讲另一种方法联盟(confederation ):联盟将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立EBGP连接关系。在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况 。
还是上面那个拓扑图,满足上面的需求,现在我们用BGP联盟来解决它,将AS10划分为几个小的AS(私有AS号64512-65535),将R1、R2、R3划分AS65000,R4、R5划分为65001,R6、R7划分为65002,然后AS10与R8、R9建立EBGP。
主要配置如下(AS10的IGP见前面):
R1:
router bgp 65000
 no synchronization
 bgp confederation identifier 10     //BGP联盟AS为10(不指定将报错)
 bgp confederation peers 65001 65002   //BGP联盟内的EBGP邻居AS(不指定将报错)
 network 10.0.0.0 mask 255.255.0.0
 neighbor 10.0.0.2 remote-as 65000      //建立IBGP
 neighbor 10.0.0.2 update-source Loopback0
 neighbor 10.0.0.2 next-hop-self
 neighbor 10.0.0.3 remote-as 65000      //建立IBGP
 neighbor 10.0.0.3 update-source Loopback0
 neighbor 10.0.0.3 next-hop-self
 neighbor 10.0.0.4 remote-as 65001    //建立内的联盟EBGP
 neighbor 10.0.0.4 ebgp-multihop 255   //因为EBGP跳数默认为1,用LOOPBACK建邻居需修改
 neighbor 10.0.0.4 update-source Loopback0
 neighbor 10.0.0.6 remote-as 65002
 neighbor 10.0.0.6 ebgp-multihop 255
 neighbor 10.0.0.6 update-source Loopback0
 neighbor 10.0.18.2 remote-as 30      //建立EBGP
 no auto-summary
ip route 10.0.0.0 255.255.0.0 Null0
R2:
router bgp 65000
 no synchronization
 bgp confederation identifier 10  //联盟内的每个路由器都需配置
 neighbor 10.0.0.1 remote-as 65000
 neighbor 10.0.0.1 update-source Loopback0
 neighbor 10.0.0.1 next-hop-self
 neighbor 10.0.29.2 remote-as 20
 no auto-summary
R3:
router bgp 65000
 no synchronization
 bgp confederation identifier 10  //联盟内的每个路由器都需配置
 neighbor 10.0.0.1 remote-as 65000
 neighbor 10.0.0.1 update-source Loopback0
 neighbor 10.0.0.1 next-hop-self
 no auto-summary
  R4:
 router bgp 65001
 no synchronization
 bgp confederation identifier 10   //联盟内的每个路由器都需配置
 bgp confederation peers 65000    //只需在联盟内的EBGP配置
 neighbor 10.0.0.1 remote-as 65000
 neighbor 10.0.0.1 ebgp-multihop 255
 neighbor 10.0.0.1 update-source Loopback0
 neighbor 10.0.0.5 remote-as 65001
 neighbor 10.0.0.5 update-source Loopback0
 neighbor 10.0.0.5 next-hop-self
 no auto-summary
R5:
router bgp 65001
 no synchronization
 bgp confederation identifier 10
 network 10.5.0.0 mask 255.255.0.0
 neighbor 10.0.0.4 remote-as 65001
 neighbor 10.0.0.4 update-source Loopback0
 neighbor 10.0.0.4 next-hop-self
 no auto-summary
ip route 10.5.0.0 255.255.0.0 Null0
R6:
router bgp 65002
 no synchronization
 bgp confederation identifier 10   //联盟内的每个路由器都需配置
 bgp confederation peers 65000    //只需在联盟内的EBGP配置
 neighbor 10.0.0.1 remote-as 65000
 neighbor 10.0.0.1 ebgp-multihop 255
 neighbor 10.0.0.1 update-source Loopback0
 neighbor 10.0.0.7 remote-as 65002
 neighbor 10.0.0.7 update-source Loopback0
 neighbor 10.0.0.7 next-hop-self
 no auto-summary
R7:
router bgp 65002
 no synchronization
 bgp confederation identifier 10  //联盟内的每个路由器都需配置
 network 10.7.0.0 mask 255.255.0.0
 neighbor 10.0.0.6 remote-as 65002
 neighbor 10.0.0.6 update-source Loopback0
 neighbor 10.0.0.6 next-hop-self
 no auto-summary
ip route 10.7.0.0 255.255.0.0 Null0
R8:
router bgp 30
 no synchronization
 network 10.8.0.0 mask 255.255.0.0
 neighbor 10.0.18.1 remote-as 10  //只需和公有的AS建立邻居
 no auto-summary
ip route 10.8.0.0 255.255.0.0 Null0
R9:
router bgp 20
 no synchronization
 network 10.9.0.0 mask 255.255.0.0
 neighbor 10.0.29.1 remote-as 10
 no auto-summary
ip route 10.9.0.0 255.255.0.0 Null0
现在我们来看下R9和R7的路由表是否都学到全部路由:
从后面的AS号可以看出,私有AS对外是不可见的,也不计算在AS_PATH里
括号内的AS外联盟内的小AS号(私有)
confed-internal,可以看出是联盟内的内部路由
解决IBGP之间不能传播路由的方法:RR和联盟(联盟+RR常用于大型网络中)