網路與 IP

BGP 配置詳細步驟:華為、H3C、思科 eBGP 配置例項

BGP 配置的骨架在三家裝置上相同:啟動 BGP 寫本端 AS 號,指定 router-id,用 peer(思科 neighbor)寫對端位址和 AS 號,用 network 宣告自有網段,用 display bgp peer 或 show ip bgp summary 確認鄰居 Established。最容易錯的兩處:H3C 必須在位址族裡啟用鄰居;network 宣告的網段在路由表裡必須有掩碼一致的路由。

作者 頂聯產品團隊發布於 7 分鐘閱讀

BGP 配置最常見的場景,是機房用自己的 AS 號與運營商建立 eBGP 會話,把自有位址段宣告出去,同時接收運營商下發的路由。完成這件事分五步:配好互聯介面位址;為要宣告的網段準備一條路由,通常是指向 NULL0 的靜態路由;啟動 BGP 程序,寫本端 AS 號和 router-id;用 peer 或 neighbor 指定對端位址和 AS 號;用 network 宣告網段,並加上出方向過濾,保證只發出自己的位址段。下面先列出要準備的引數,講清 AS 號、router-id、network 與 import-route 各管什麼,再給出華為、H3C、思科三家的完整命令和驗證方法。範例中的公網位址和 AS 號都是文件專用值,替換成運營商開通單上的實際值即可。

BGP 配置前要準備哪些引數

動手之前,把下面這張表填滿。任何一項不確定,會話都可能建不起來,或者建起來以後宣告錯路由:

引數 本文範例 從哪裡來
本端 AS 號 64510 自己申請的 AS 號;用上游分配的私有 AS 時以上游通知為準
對端 AS 號 64496 運營商開通單
互聯位址 本端 192.0.2.1/30,對端 192.0.2.2/30 運營商分配
要宣告的網段 203.0.113.0/24 自有或獲得授權的位址段,按運營商要求準備授權檔案或路由登記
router-id 10.255.255.1 自己規劃,通常取 LoopBack0 的位址
對端下發的路由 只給預設路由 開通時約定,也可能是本網路由或完整路由表
認證金鑰 雙方約定 運營商要求啟用 MD5 認證時提供

範例拓撲如下。203.0.113.0/24 在機房內部被拆成多個小網段分給各個 VLAN,邊界路由器上並沒有一條完整的 /24 路由,這一點後面會用到:

              運營商  AS 64496
                192.0.2.2/30
                     |
                192.0.2.1/30   介面 GE0/0/1
       [ 機房邊界路由器  AS 64510  LoopBack0 10.255.255.1 ]
                     |
       機房內部:203.0.113.0/24 拆成 /26、/27 分給各業務 VLAN

AS 號、router-id 和 network、import-route 的區別

AS 號寫在兩個地方

本端 AS 號寫在啟動 BGP 程序的命令裡(華為、H3C 是 bgp 64510,思科是 router bgp 64510),一台裝置的一個 BGP 例項只有一個本端 AS;對端 AS 號寫在每個鄰居上。裝置據此判斷會話型別:對端 AS 與本端不同就是 eBGP,相同就是 iBGP,不需要另外宣告。

4 位元組 AS 號有兩種寫法:整數形式(asplain),如 4200000001;點分形式(asdot),把高 16 位和低 16 位用點隔開,同一個號寫作 64086.59905(64086 × 65536 + 59905 = 4200000001)。華為、思科都能接受兩種輸入,運營商開通單上寫的是哪種,配置時照抄即可,不要自己換算出錯。AS 號填錯的表現是 TCP 連線能建立,但對方校驗 OPEN 報文時發現 AS 號對不上,回一條 NOTIFICATION(OPEN Message Error / Bad Peer AS)後斷開,會話反覆重試,始終到不了 Established。

router-id:手工指定,不要依賴自動選擇

router-id 是一個寫成 IPv4 位址形式的 32 位標識,在 AS 內必須唯一,不要求可達,也不需要宣告出去。不手工指定時,裝置會按規則自動挑一個介面位址,通常優先取 Loopback 介面中最大的位址。問題在於自動選出的值會隨介面增刪而變化,而修改 router-id 會讓 BGP 會話全部重建。所以生產環境一律手工指定,習慣上取 LoopBack0 的位址,這個介面不會因為某個物理口斷開而消失。兩台裝置誤用了同一個 router-id 時,部分裝置會直接拒絕建立會話,規劃位址時一併分配好。

network 與 import-route:兩種把路由放進 BGP 的方式

對比項 network import-route(思科叫 redistribute)
宣告什麼 命令裡指定的那一個字首 某個來源(直連、靜態、OSPF 等)的全部路由,可用路由策略篩選
前提條件 IP 路由表裡必須有一條字首和掩碼都完全一致的路由 路由表裡有該來源的路由
Origin 屬性 IGP,路由表裡標 i Incomplete,標 ?
預設路由 可以用 network 0.0.0.0 宣告 預設不引入,華為需要 default-route imported,思科需要 default-information originate
主要風險 小,掩碼寫錯通常只是宣告不出去 不加策略會把網際網路段、內網段一起帶出去
適合 自有位址段等少量固定字首 需要隨業務動態增減的大量字首,例如客戶自帶的位址段

network 的“完全一致”是最常見的坑。範例中 203.0.113.0/24 在內部拆成了 /26、/27,路由表裡沒有完整的 /24,network 203.0.113.0 255.255.255.0 寫上去什麼也不會發生。解決辦法就是加一條指向 NULL0 的靜態路由,讓 /24 出現在路由表裡;內部更具體的 /26、/27 按最長匹配優先轉發,這條黑洞路由只兜住還沒分配出去的位址,順帶防止去往空閒位址的流量在邊界上來回繞圈。思科還有一個細節:network 不寫 mask 時按 A、B、C 類的自然掩碼處理,203.0.113.0 碰巧是 C 類能對上 /24,換成 10.0.0.0 就成了 /8。

確實要用 import-route 時,必須掛一條路由策略,只放行要宣告的字首。華為寫法(H3C 的 if-match 寫成 if-match ip address prefix-list OWN-NET):

route-policy STATIC-TO-BGP permit node 10
 if-match ip-prefix OWN-NET
quit
bgp 64510
 ipv4-family unicast
  import-route static route-policy STATIC-TO-BGP

思科寫法:

route-map STATIC-TO-BGP permit 10
 match ip address prefix-list OWN-NET
router bgp 64510
 address-family ipv4 unicast
  redistribute static route-map STATIC-TO-BGP

路由策略只寫了 permit 節點時,沒匹配上的路由一律不引入,這正是想要的效果。

BGP 配置命令:華為、H3C、思科完整例項

三段配置實現的是同一件事:建立到 192.0.2.2 的 eBGP 會話,宣告 203.0.113.0/24,出方向只放行這一個字首,限制對端發來的路由條數。命令以華為 VRP V200R、H3C Comware V7、思科 IOS/IOS-XE 為準,其他版本以裝置文件為準。

華為 BGP 配置例項

system-view
interface LoopBack0
 ip address 10.255.255.1 255.255.255.255
 quit
interface GigabitEthernet0/0/1
 description To-ISP-A
 ip address 192.0.2.1 255.255.255.252
 quit
ip route-static 203.0.113.0 255.255.255.0 NULL0
ip ip-prefix OWN-NET index 10 permit 203.0.113.0 24
bgp 64510
 router-id 10.255.255.1
 peer 192.0.2.2 as-number 64496
 peer 192.0.2.2 description ISP-A
 peer 192.0.2.2 password cipher <與運營商約定的金鑰>
 ipv4-family unicast
  network 203.0.113.0 255.255.255.0
  peer 192.0.2.2 enable
  peer 192.0.2.2 ip-prefix OWN-NET export
  peer 192.0.2.2 route-limit 1000
  return
save

幾點說明:

  • 華為的鄰居在 IPv4 單播位址族裡預設已啟用,peer 192.0.2.2 enable 寫上無妨。
  • 邊界裝置如果是 S 系列交換器,物理口預設是二層口,要先在介面下執行 undo portswitch 切成三層口(部分型號不支援),或者把連接埠划進一個 VLAN,在 VLANIF 上配置互聯位址。
  • route-limit 1000 表示對端發來的路由超過 1000 條時斷開會話。對端只給預設路由時這個值綽綽有餘;接收完整路由表時要按實際條數加餘量設定,並考慮改成只告警不斷開。

H3C BGP 配置例項

system-view
interface LoopBack0
 ip address 10.255.255.1 32
 quit
interface GigabitEthernet1/0/1
 port link-mode route
 description To-ISP-A
 ip address 192.0.2.1 30
 quit
ip route-static 203.0.113.0 24 NULL0
ip prefix-list OWN-NET index 10 permit 203.0.113.0 24
bgp 64510
 router-id 10.255.255.1
 peer 192.0.2.2 as-number 64496
 peer 192.0.2.2 description ISP-A
 peer 192.0.2.2 password cipher <與運營商約定的金鑰>
 address-family ipv4 unicast
  network 203.0.113.0 24
  peer 192.0.2.2 enable
  peer 192.0.2.2 prefix-list OWN-NET export
  peer 192.0.2.2 route-limit 1000
  return
save

和華為相比,H3C Comware V7 有三處要注意:

  • 位址族裡的 peer 192.0.2.2 enable 不能省。V7 的鄰居不會自動加入 IPv4 單播位址族,漏了這一步,IPv4 路由不會交換,有的版本連會話都不建立。
  • 字首列表叫 ip prefix-list,出方向過濾寫 peer 位址 prefix-list 名稱 export;華為叫 ip ip-prefix。
  • 交換器的連接埠要先切成三層:port link-mode route 放在介面配置的最前面執行,切換模式會把介面上原有的配置恢復為預設;不支援三層模式的型號,改在 VLAN 介面上配置互聯位址。

思科 BGP 配置例項

configure terminal
interface Loopback0
 ip address 10.255.255.1 255.255.255.255
interface GigabitEthernet0/0/1
 description To-ISP-A
 ip address 192.0.2.1 255.255.255.252
 no shutdown
ip route 203.0.113.0 255.255.255.0 Null0
ip prefix-list OWN-NET seq 10 permit 203.0.113.0/24
router bgp 64510
 bgp router-id 10.255.255.1
 bgp log-neighbor-changes
 neighbor 192.0.2.2 remote-as 64496
 neighbor 192.0.2.2 description ISP-A
 neighbor 192.0.2.2 password <與運營商約定的金鑰>
 address-family ipv4 unicast
  network 203.0.113.0 mask 255.255.255.0
  neighbor 192.0.2.2 activate
  neighbor 192.0.2.2 prefix-list OWN-NET out
  neighbor 192.0.2.2 maximum-prefix 1000
 exit-address-family
end
write memory

bgp log-neighbor-changes 讓鄰居每次起落都寫一條日誌,排障時很有用。IOS 預設會把鄰居自動加入 IPv4 單播位址族,配置了 no bgp default ipv4-unicast 時才必須 activate。如果裝置是 IOS XR,規則不同:沒有配置路由策略的 eBGP 鄰居預設不收也不發任何路由,必須為每個鄰居寫好入、出方向的 route-policy。

三家 BGP 配置命令對照

作用 華為 VRP H3C Comware V7 思科 IOS/IOS-XE
啟動 BGP、寫本端 AS bgp 64510 bgp 64510 router bgp 64510
指定 router-id router-id 10.255.255.1 router-id 10.255.255.1 bgp router-id 10.255.255.1
建立鄰居、寫對端 AS peer 192.0.2.2 as-number 64496 peer 192.0.2.2 as-number 64496 neighbor 192.0.2.2 remote-as 64496
進入 IPv4 位址族 ipv4-family unicast address-family ipv4 unicast address-family ipv4 unicast
啟用鄰居 預設已啟用 peer 192.0.2.2 enable,必須 預設已啟用
宣告網段 network 203.0.113.0 255.255.255.0 network 203.0.113.0 24 network 203.0.113.0 mask 255.255.255.0
引入其他路由 import-route static route-policy 名稱 import-route static route-policy 名稱 redistribute static route-map 名稱
字首列表 ip ip-prefix 名稱 index 10 permit 203.0.113.0 24 ip prefix-list 名稱 index 10 permit 203.0.113.0 24 ip prefix-list 名稱 seq 10 permit 203.0.113.0/24
出方向過濾 peer 位址 ip-prefix 名稱 export peer 位址 prefix-list 名稱 export neighbor 位址 prefix-list 名稱 out
MD5 認證 peer 位址 password cipher 金鑰 peer 位址 password cipher 金鑰 neighbor 位址 password 金鑰
路由條數上限 peer 位址 route-limit 1000 peer 位址 route-limit 1000 neighbor 位址 maximum-prefix 1000
儲存配置 save save write memory

驗證:鄰居 Established、路由發出與收到

配置完成後,按“會話、發出、收到、生效”四步檢查,每一步都有明確的期望結果:

檢查項 華為 H3C 思科 期望結果
鄰居狀態 display bgp peer display bgp peer ipv4 show ip bgp summary 華為、H3C 顯示 Established;思科 State/PfxRcd 列顯示數字
BGP 路由表 display bgp routing-table display bgp routing-table ipv4 show ip bgp 自有網段前有 *>,Origin 為 i
發給對端的路由 display bgp routing-table peer 192.0.2.2 advertised-routes display bgp routing-table ipv4 peer 192.0.2.2 advertised-routes show ip bgp neighbors 192.0.2.2 advertised-routes 只有 203.0.113.0/24
從對端收到的路由 display bgp routing-table peer 192.0.2.2 received-routes display bgp routing-table ipv4 peer 192.0.2.2 received-routes show ip bgp neighbors 192.0.2.2 routes 約定好的路由,本例只有 0.0.0.0/0
是否裝進路由表 display ip routing-table protocol bgp display ip routing-table protocol bgp show ip route bgp 預設路由的下一跳是 192.0.2.2

華為上會話正常時的輸出類似這樣(範例):

<Border-R1> display bgp peer

 BGP local router ID : 10.255.255.1
 Local AS number : 64510
 Total number of peers : 1                 Peers in established state : 1

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State  PrefRcv
  192.0.2.2       4       64496      732      729     0 12:05:31 Established        1

PrefRcv 為 1,對應運營商只下發了一條預設路由。再看 BGP 路由表(範例):

<Border-R1> display bgp routing-table

 Total Number of Routes: 2
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>   0.0.0.0            192.0.2.2       0                     0      64496i
 *>   203.0.113.0/24     0.0.0.0         0                     0      i

* 表示路由有效,> 表示被選為最優,只有最優路由才會發給鄰居。自有網段的下一跳是 0.0.0.0,說明它由本機產生;Path/Ogn 只有一個 i,說明是 network 宣告、AS_PATH 為空,發給運營商時才會加上 64510。思科 show ip bgp 裡本機產生的路由下一跳同樣是 0.0.0.0,Weight 為 32768。

裝置上的檢查只能說明“我發出去了”,運營商有沒有接受,要從外部確認:請運營商在他們的裝置上查收到的字首,或者從其他網路對 203.0.113.0/24 裡的位址做路由追蹤,看路徑是否經過這家運營商進入你的機房。

BGP 配好了卻不通:按現象排查

現象 配置上的常見原因 先看什麼
鄰居一直停在 Idle 沒有到對端位址的路由;H3C 漏了位址族裡的 peer enable;鄰居被管理性關閉;路由條數超限後被斷開,等待重連 華為 display current-configuration configuration bgp,思科 show running-config | section bgp
在 Active、Connect 之間來回切換 互聯位址不通;對端位址寫錯;ACL 攔了 TCP 179;用 Loopback 建鄰居卻沒放開跳數;MD5 金鑰兩端不一致 帶源位址 ping 對端:華為 ping -a 192.0.2.1 192.0.2.2,思科 ping 192.0.2.2 source GigabitEthernet0/0/1;再看日誌裡有沒有 MD5 認證失敗的記錄
進入 OpenSent 後又退回 Idle 或 Active,反覆重試 對端 AS 號寫錯(Bad Peer AS);部分裝置上兩端 router-id 相同(Bad BGP Identifier) 裝置日誌裡的 NOTIFICATION 錯誤碼;華為 display bgp peer 192.0.2.2 log-info
Established,但 PrefRcv 為 0 運營商還沒下發;本端入方向策略把路由過濾光了;IOS XR 沒寫路由策略 查收到的路由,再對照入方向策略
自有網段沒有宣告出去 network 的掩碼和路由表不一致;缺少 NULL0 靜態路由;出方向字首列表沒匹配上 華為 display ip routing-table 203.0.113.0 24,確認路由表裡有完全一致的條目
宣告了不該宣告的網段 import-route 沒掛路由策略;出方向沒有過濾 advertised-routes,立即補上過濾
執行一段時間後斷開 保持時間內沒收到報文;對端發來的路由超過 route-limit;鏈路 MTU 不一致導致大的 UPDATE 報文丟失 斷開時的日誌和錯誤碼,思科 show ip bgp neighbors 192.0.2.2 | include Last reset

Active 和 Idle 都不是“正常但空閒”的意思,看到它們就說明會話沒建立。排查順序固定為:先保證三層可達,再核對兩端的位址和 AS 號,最後看認證和策略。

在機房裡怎麼落地

BGP 配置寫在路由器上,但宣告哪些網段、每個網段是否已經對外發布,需要一個地方統一記錄,否則換一個人接手就說不清楚。Toplink DCIM 的 IP 位址管理按 CIDR 錄入位址段,大段可以自動拆分成多個 /24 分別管理,和 BGP 宣告的粒度一致;每個段可以按線路分組、打上“已宣告 · ISP-A”之類的標籤,尚未宣告的段可以鎖定,開通伺服器時不會被自動分配出去。邊界裝置是 DCIM 已納管的三層交換器時,修改 BGP 配置可以在交換器管理裡直接開啟瀏覽器 SSH 終端,會話全程錄影並記錄命令日誌,哪條 network、哪條字首列表由誰在什麼時候改過,出了問題能直接回放核對。

常見問題

改了 BGP 路由策略,要重啟會話才生效嗎?

不用重啟會話,做一次軟復位即可:華為 refresh bgp 192.0.2.2 import(出方向用 export),H3C refresh bgp 192.0.2.2 import ipv4,思科 clear ip bgp 192.0.2.2 soft in(出方向用 out)。不帶 soft 的 clear ip bgp 和 reset bgp 會斷開會話、中斷業務,只在必要時使用。

IPv6 的 BGP 怎麼配?

步驟相同,換成 IPv6 位址族。華為在 bgp 檢視下 peer 2001:db8:1::2 as-number 64496,再進入 ipv6-family unicast 執行 peer 2001:db8:1::2 enable 和 network 2001:db8:100:: 48;思科在 address-family ipv6 unicast 下執行 neighbor 2001:db8:1::2 activate 和 network 2001:db8:100::/48。IPv6 字首同樣需要路由表裡有一條掩碼一致的路由。

能用 Loopback 位址和運營商建 eBGP 嗎?

可以,但需要雙方都同意。eBGP 預設要求對端直連(TTL 為 1),用 Loopback 建鄰居時兩端都要放開跳數,並指定源介面:華為、H3C 用 peer 位址 ebgp-max-hop 2 和 peer 位址 connect-interface LoopBack0,思科用 neighbor 位址 ebgp-multihop 2 和 neighbor 位址 update-source Loopback0,還要有一條到對端 Loopback 的靜態路由。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88