1. 程式人生 > 實用技巧 >BGP多出口多宿主實驗

BGP多出口多宿主實驗

前幾天在NET130看到有位華為工程師為配置思科多出口多宿主BGP而煩惱。根據他的思路,做了一下實驗,發現有些地方以前沒有留意到的,就把它記錄下來,以作參考。 澶氬涓誨鍑哄彛 其中要求為: 1、CN2的AS向MetroNetwork(簡稱MN)傳送全部詳細路由;ChinaNet(簡稱CN)向MN傳送預設路由。 2、MN內執行OSPF,R5、R6向R7傳送全部路由(包括預設路由)。 3、R5、R6上任何鏈路斷開都應自動切換到對方的鏈路。 4、我自己加的,MN應該為STUB。即:不能為CN、CN2傳輸資料。 配置思路: 一、由於是典型的多宿主多出口,故BGP是唯一的選擇。而由於要求裡CN2並不傳送預設路由,因此可認為兩宿主並沒有重複路由;即不需要修改Local-Pref引數。而且由於沒有對訪問流量的進入進行要求,因此也不需要修改MED和AS-PATH引數。現實中建議對R5、R6進行優先順序設定。使得對於CN、CN2能通過不同的ASBR訪問。 二、《Internet路由結構》提到過,釋出AS內部的路由有兩種方式:network顯式引入以及redistribute隱式引入。出於對internet路由穩定性負責的考慮,故在R5、R6內對R7的內網段使用ip route靜態路由到null0,並使用network命令在bgp中顯式引入。 三、多宿主+部分具體路由的結構,使得把R5、R6的BGP重分配到OSPF中成為最佳選擇。僅僅重分配會出現問題,後面排障時會提及到。使用重分配有個好處,就是BGP的路由表中消失的路由就不會被引入到OSPF中,使得OSPF可以選擇另一條備份鏈路。 四、通過過濾列表即可實現。考慮到CN、CN2為ISP,應負責限制策略。對入路由,過濾掉非MN產生的路由;對出路由,設定community為local-AS,防止路由被通告到其他AS。 配置檔案如下,由於R1和R2,R3和R4,R5和R6配置差別不大,故只寫R1、R3、R5、R7的配置。其中網段IP很直觀,R1和R2的鏈路ip為12.0.0.0/24,R3和R5鏈路IP為35.0.0.0/24。R7的內網口IP為7.0.0.0/24。CN2為AS1、CN為AS2,MN為AS3。 CN2_R1# interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface Serial1/1
description To R5's S1/0,ip 15.0.0.5/24
ip address 15.0.0.1 255.255.255.0
!
interface FastEthernet2/0
ip address 12.0.0.1 255.255.255.0
!
router bgp 1
no synchronization
bgp router-id 1.1.1.1
network 12.0.0.0 mask 255.255.255.0
neighbor LOCAL_AS peer-group
neighbor LOCAL_AS remote-as 1
neighbor LOCAL_AS update-source Loopback0
neighbor LOCAL_AS next-hop-self
neighbor REMOTE_AS_3 peer-group
neighbor REMOTE_AS_3 remote-as 3
neighbor REMOTE_AS_3 send-community
neighbor REMOTE_AS_3 route-map AS_3_SET_COMM out

neighbor REMOTE_AS_3 filter-list 10 in
neighbor 2.2.2.2 peer-group LOCAL_AS
neighbor 15.0.0.5 peer-group REMOTE_AS_3
no auto-summary
!
ip route 2.2.2.2 255.255.255.255 12.0.0.2
!
ip as-path access-list 10 permit ^3$
!
route-map AS_3_SET_COMM permit 10
set community local-AS

! end
ChinaNet_R3# interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface Serial1/1
description To R5's S1/1,ip 35.0.0.5/24
ip address 35.0.0.3 255.255.255.0
!
interface FastEthernet2/0
ip address 34.0.0.3 255.255.255.0
!
router bgp 2
no synchronization
bgp router-id 3.3.3.3
neighbor LOCAL_AS peer-group
neighbor LOCAL_AS remote-as 2
neighbor LOCAL_AS update-source Loopback0
neighbor LOCAL_AS next-hop-self
neighbor REMOTE_AS_3 peer-group
neighbor REMOTE_AS_3 remote-as 3
neighbor REMOTE_AS_3 send-community
neighbor REMOTE_AS_3 default-originate
neighbor REMOTE_AS_3 route-map AS_3_SET_COMM out
neighbor REMOTE_AS_3 filter-list 10 in
neighbor 4.4.4.4 peer-group LOCAL_AS
neighbor 35.0.0.5 peer-group REMOTE_AS_3
no auto-summary
!
ip route 4.4.4.4 255.255.255.255 34.0.0.4
!
ip as-path access-list 10 permit ^3$
!
route-map AS_3_SET_COMM permit 10
set community local-AS

!
end
LOCAL_R5# !interface Loopback0
ip address 5.5.5.5 255.255.255.255
!
interface Serial1/0
description To R1's S1/1,ip 15.0.0.1/24
ip address 15.0.0.5 255.255.255.0
!
interface Serial1/1
description To R3's S1/1,ip 35.0.0.3/24
ip address 35.0.0.5 255.255.255.0
!
interface Serial1/2
description To R6's S1/2,ip 56.0.0.6/24
ip address 56.0.0.5 255.255.255.0
!
interface Serial1/3
description To R7's S1/0,ip 57.0.0.7/24
ip address 57.0.0.5 255.255.255.0
!
router ospf 100
router-id 5.5.5.5
redistribute bgp 3 subnets
network 5.5.5.5 0.0.0.0 area 0
network 56.0.0.5 0.0.0.0 area 0
network 57.0.0.5 0.0.0.0 area 0
default-information originate
!
router bgp 3
no synchronization
bgp router-id 5.5.5.5
network 7.0.0.0 mask 255.255.255.0
network 56.0.0.0 mask 255.255.255.0
network 57.0.0.0 mask 255.255.255.0
network 67.0.0.0 mask 255.255.255.0

neighbor LOCAL_AS peer-group
neighbor LOCAL_AS remote-as 3
neighbor LOCAL_AS update-source Loopback0
neighbor LOCAL_AS next-hop-self
neighbor REMOTE_AS_1 peer-group
neighbor REMOTE_AS_1 remote-as 1
neighbor REMOTE_AS_2 peer-group
neighbor REMOTE_AS_2 remote-as 2
neighbor 6.6.6.6 peer-group LOCAL_AS
neighbor 15.0.0.1 peer-group REMOTE_AS_1
neighbor 35.0.0.3 peer-group REMOTE_AS_2
no auto-summary
! ip route 7.0.0.0 255.255.255.0 NULL0 ip route 56.0.0.0 255.255.255.0 NULL0 ip route 57.0.0.0 255.255.255.0 NULL0 ip route 67.0.0.0 255.255.255.0 NULL0 !
end
LOCAL_R7# !
interface Loopback0
ip address 7.7.7.7 255.255.255.255
!
interface Serial1/0
description To R5's S1/3,ip 57.0.0.5/24
ip address 57.0.0.7 255.255.255.0
!
interface Serial1/1
description To R6's S1/3,ip 67.0.0.6/24
ip address 67.0.0.7 255.255.255.0
!
interface FastEthernet2/0
ip address 7.0.0.7 255.255.255.0
!
router ospf 100
router-id 7.7.7.7
passive-interface FastEthernet2/0
network 7.0.0.7 0.0.0.0 area 0
network 57.0.0.7 0.0.0.0 area 0
network 67.0.0.7 0.0.0.0 area 0
!
end
淺藍色字體表示OSPF路由條目被顯式引入到BGP;紅色字體表示ISP入路由策略,限制只讓AS-PATH為3(MN)的路由進入;紫色字體表示ISP出路由策略,限制出路由只供對端AS使用;綠色字體表示CN2的詳細路由被重分配到MN的ASBR中。 但正如之前說過,單純的重分配會有問題。主要是因為,即便R5的BGP表記憶體在預設路由,redistribute也不會將該路由重分配到OSPF內。因此深藍色字體表示OSPF自身生成default-information併發布到area 0中(其實是整個AS中,不過這裡就只有一個area 0)。注意這裡不能加always引數。為何?因為這裡有一個限制條件:只有能夠接收到來自CN預設路由的ASBR才能向OSPF內部發布預設路由。由於BGP收到鄰居生成的預設路由(注意R3的neighbor default-originate),show ip route內才會生成B *0.0.0.0的路由;僅當ASBR擁有預設路由,OSPF中的default-information才會生效。若鏈路出現問題,例如R3和R5之間的鏈路中斷了,BGP重新整理並丟棄路由條目B *0.0.0.0後,R5的OSPF就不再發布預設路由,此時R7就可以通過R6所釋出的預設路由到達CN了。 該實驗還有很多地方不完善,主要是ISP方面沒有設定BGP DAMPENING,沒有考慮到R5、R6基於目的地負載均衡。我的經驗只能寫到上述配置,權當經驗交流吧。