はじめに
Cisco IOS/IOS-XE の BGP は、network コマンドで広告経路を指定する方式が基本です。一見シンプルですが、「network で指定したのに経路が広告されない」「iBGP で経路は受信できるのに使われない」といったつまずきが起きやすいプロトコルでもあります。これらの多くは、network コマンドの前提や iBGP 固有のルールを押さえると回避できます。
本記事では、Cisco IOS/IOS-XE を対象に、eBGP の確立から経路広告、フィルタ、確認までの設定手順を整理します。
router bgp/neighbor/networkによる eBGP の基本設定networkコマンドがルーティングテーブルの完全一致を前提とする理由- iBGP の
next-hop-selfと再広告ルールの注意点 - prefix-list / distribute-list / route-map による経路フィルタリング
show ip bgp系コマンドによる確認と切り分け
結論を先に示すと、Cisco の network コマンドは、対象経路がルーティングテーブルに完全一致で存在しないと広告されません。また、IOS は IPv4 アドレスファミリーを既定で有効にするため基本設定は簡潔ですが、iBGP では NEXT-HOP の扱いと「iBGP の再広告制約」に注意が必要です。
BGP の基礎概念(AS、eBGP/iBGP、経路選択)は、『BGP とは|eBGP と iBGP の違いと経路選択の基礎』で解説しています。本記事は Cisco の設定手順に絞ります。
Cisco BGP 設定の全体像(4 要素)
BGP 設定の骨格は「AS 番号・ネイバー・広告経路・フィルタ」の 4 要素です。Cisco ではそれぞれ次のコマンドが対応します。
| 要素 | Cisco IOS のコマンド |
|---|---|
| AS 番号 | router bgp <AS番号> |
| ネイバー | neighbor <対向IP> remote-as <対向AS> |
| 広告経路 | address-family ipv4 unicast 配下の network <prefix> mask <mask> |
| フィルタ | prefix-list / distribute-list / route-map を neighbor … in / out で適用 |
基本的な eBGP の設定は、次のような骨格になります。
router bgp 65001
bgp router-id 1.1.1.101
bgp log-neighbor-changes
neighbor 10.1.1.1 remote-as 65000
address-family ipv4 unicast
neighbor 10.1.1.1 activate
network 1.1.1.0 mask 255.255.255.0
exit-address-familyneighbor … remote-as で指定する AS 番号が、自局の router bgp の AS と異なれば eBGP、同じであれば iBGP になります。
ひとつ補足すると、IOS は IPv4 ユニキャストのアドレスファミリーを既定で有効にするため、neighbor … activate を省略しても IPv4 経路は交換されます。ただし no bgp default ipv4-unicast を設定した場合は、アドレスファミリー配下での activate が必要になります。設定を明示的にそろえる意味でも、address-family ipv4 unicast 配下に activate と network を記述する書き方が分かりやすくなります(公式: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-16/irg-xe-16-book/configuring-a-basic-bgp-network.html )

各要素の具体的な設定とつまずきやすい点は、次のセクションから順に見ていきます。
eBGP の基本設定
異なる AS のルーターと eBGP を確立する手順を、順に見ていきます。
router bgp と neighbor でセッションを張る
まず BGP プロセスを起動し、Router-ID とネイバーを定義します。
router bgp 65001
bgp router-id 1.1.1.101
bgp log-neighbor-changes
neighbor 10.1.1.1 remote-as 65000neighbor … remote-as の AS 番号が自局と異なるため、これは eBGP セッションになります。eBGP のネイバーは、既定では直結している(TTL が 1 の)ことが前提です。ループバック同士でピアを張る場合や、間にルーターを挟む場合は、neighbor <対向IP> ebgp-multihop <ホップ数> でホップ数を緩和します。接続元インターフェイスを固定したい場合は neighbor <対向IP> update-source <インターフェイス> を指定します。
network コマンドで経路を広告する
広告する経路は、アドレスファミリー配下の network コマンドで指定します。
router bgp 65001
address-family ipv4 unicast
neighbor 10.1.1.1 activate
network 1.1.1.0 mask 255.255.255.0
exit-address-familynetwork には mask でサブネットマスクを明示します。mask を省略するとクラスフルのマスクが仮定されるため、/24 などを広告する際は必ず mask を付けます。neighbor … activate は、そのネイバーに対して当該アドレスファミリーの経路交換を有効化するコマンドです(IOS は IPv4 ユニキャストを既定で有効化しますが、明示しておくと構成が分かりやすくなります)
network コマンドの落とし穴(ルーティングテーブル完全一致)
network コマンドでもっともつまずきやすいのが、指定した経路がルーティングテーブルに完全一致で存在しないと広告されないという前提です。
たとえば network 10.1.0.0 mask 255.255.255.0 と設定しても、ルーティングテーブルに 10.1.0.0/24 が直結・スタティック・IGP 学習のいずれかで存在しなければ、この経路は BGP テーブルに載らず、広告されません。マスク長まで含めて完全に一致する必要があり、10.1.0.0/16 しかない場合は /24 の network は広告されません(Cisco 公式: https://www.cisco.com/c/en/us/support/docs/ip/border-gateway-protocol-bgp/19345-bgp-noad.html )
このため、広告したい経路がルーティングテーブルに存在するかを show ip route で先に確認するのが、確実な進め方です。
network と redistribute の違い
経路を BGP に載せる方法には、network のほかに redistribute があります。役割が異なるため、使い分けを整理します。
| 方法 | 動作 | ORIGIN |
|---|---|---|
network <prefix> mask <mask> | 指定したプレフィックスを個別に広告(RT に完全一致が必要) | IGP(i) |
redistribute <protocol> | 指定プロトコルの経路をまとめて BGP に再配送 | Incomplete(?) |
redistribute connected や redistribute static は複数経路を一括で載せられますが、意図しない経路まで広告しやすいため、route-map での絞り込みと併用するのが安全です。なお、デフォルトルートを広告する場合は network 0.0.0.0 のほか、ネイバー単位の neighbor <対向IP> default-originate を使う方法があります(default-originate はルーティングテーブルにデフォルトルートがなくても広告できます)
iBGP の設定と next-hop-self
同じ AS 内のルーター間で経路を交換するのが iBGP です。eBGP と同じく neighbor … remote-as で設定しますが、指定する AS 番号が自局と同一になります。
iBGP セッションと到達性の確保
iBGP ネイバーは直結している必要はなく、AS 内で IP 到達性があれば確立できます。安定性のため、物理インターフェイスではなくループバックアドレス同士でピアを張り、update-source で送信元を固定するのが一般的です。
router bgp 65000
neighbor 2.2.2.2 remote-as 65000
neighbor 2.2.2.2 update-source Loopback0ループバック宛ての到達性は、OSPF などの IGP で確保しておきます。
next-hop-self で NEXT-HOP を解決する
iBGP でつまずきやすいのが NEXT-HOP の扱いです。eBGP で学習した経路を iBGP ピアへ渡すとき、NEXT-HOP は既定で書き換わりません。このため、受け取った iBGP ルーターから見て NEXT-HOP(外部の eBGP ピアのアドレス)に到達できないと、その経路は無効になります。
これを解消するのが next-hop-self です。eBGP 学習経路を iBGP に渡すルーターで neighbor … next-hop-self を設定すると、NEXT-HOP が自分のアドレスに書き換わり、AS 内から到達可能になります。
router bgp 65000
address-family ipv4 unicast
neighbor 2.2.2.2 next-hop-selfiBGP の再広告制約とルートリフレクタ
iBGP には、「iBGP で学習した経路は他の iBGP ピアに再広告しない」というループ防止ルールがあります。このため、AS 内の iBGP ルーターはフルメッシュが原則必要ですが、台数が増えると現実的でなくなります。
これを解消するのがルートリフレクタ(RR)です。RR では、クライアントとなるネイバーに route-reflector-client を指定します。
router bgp 65000
address-family ipv4 unicast
neighbor 3.3.3.3 route-reflector-clientiBGP のフルメッシュや RR の概念は、『BGP とは|eBGP と iBGP の違いと経路選択の基礎』でも解説しています。
経路フィルタリング(prefix-list / distribute-list / route-map)
送受信する経路を絞り込む方法は主に 4 つあります。いずれもネイバー単位で in(受信)/out(送信)の方向を指定して適用します。用途に応じて使い分けます。
prefix-list(プレフィックス単位の許可・拒否)
プレフィックスとマスク長で経路を絞り込む、もっとも一般的な方法です。ge/le でマスク長の範囲も指定できます。
ip prefix-list ALLOW seq 10 permit 192.168.1.0/24
!
router bgp 65001
address-family ipv4 unicast
neighbor 10.1.1.1 prefix-list ALLOW outdistribute-list(ACL ベース)
標準 ACL で経路を絞り込む従来の方法です。同じネイバー・同じ方向では prefix-list と併用できない(排他)点に注意します。可読性の面では prefix-list が扱いやすく、新規ではこちらが推奨されます。
access-list 1 permit 192.168.1.0
!
router bgp 65001
neighbor 10.1.1.1 distribute-list 1 outfilter-list(AS-PATH ベース)
AS-PATH の内容(通過 AS の並び)で絞り込む方法です。ip as-path access-list に正規表現を書き、ネイバーに適用します。末尾は暗黙の deny になるため、許可する条件を明示します。
ip as-path access-list 10 permit ^65000$
!
router bgp 65001
neighbor 10.1.1.1 filter-list 10 inroute-map(複合条件と属性操作)
複数条件の組み合わせや、経路属性の変更を伴う制御には route-map を使います。match で対象を絞り、set で LOCAL_PREF や MED、AS-PATH プリペンドなどを操作できます。
route-map LP-IN permit 10
match ip address prefix-list ALLOW
set local-preference 200
!
router bgp 65001
address-family ipv4 unicast
neighbor 10.1.1.1 route-map LP-IN in自 AS からの出トラフィックは LOCAL_PREF、他 AS からの入トラフィックは MED や AS-PATH プリペンドで制御するのが定石です(参考: Cisco 公式 https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-3e/irg-iproute-bgp-xe-3e-book/irg-prefix-filter.html )
確認コマンドとトラブルシューティング
状態と経路の確認コマンド
設定後の確認は、次のコマンドが基点になります。
| コマンド | 表示内容 |
|---|---|
show ip bgp summary | ネイバー一覧と確立状態(State/PfxRcd) |
show ip bgp neighbors <対向IP> | ネイバーの詳細(BGP state、capabilities) |
show ip bgp | BGP テーブル(* 有効経路、> ベストパス) |
show ip bgp neighbors <IP> advertised-routes | 対向へ広告中の経路 |
show ip bgp neighbors <IP> routes | 受信し採用した経路(受信ポリシー適用後) |
show ip bgp neighbors <IP> received-routes | 受信した全経路(要 soft-reconfiguration inbound) |
received-routes は、受信ポリシーで弾く前の経路も含めて表示しますが、neighbor <IP> soft-reconfiguration inbound を設定していないと表示できず、% Inbound soft reconfiguration not enabled というメッセージになります。フィルタ前の経路を確認したい場合はこの設定が前提になります。
ネイバーが確立しないとき
show ip bgp summary の State が Established にならない場合は、下位レイヤから切り分けます。
- L3 到達性:
ping <対向IP>(iBGP のループバックピアではping <対向IP> source Loopback0)で確認する。 - TCP/179: 経路上の ACL やファイアウォールで TCP/179 が双方向に許可されているかを確認する。
- 設定の整合:
neighbor … remote-asの AS 番号、bgp router-idの重複、update-sourceの指定を確認する。
経路が広告・受信されないとき
ネイバーが Established なのに経路が流れない場合は、次の順で確認します。
- 広告されない:
show ip routeで広告対象が完全一致で存在するかを確認し、networkのマスク、またはredistributeとフィルタを見直す。 - 受信したのに使われない: NEXT-HOP に到達できているかを確認する。iBGP 経由の経路では
next-hop-selfの設定漏れが典型原因 - ポリシー変更後:
clear ip bgp <対向IP> soft in/soft outで、セッションを切らずに新しいポリシーを反映する(clear ip bgp *はセッションを落とすため最終手段)
参考: Configuring a Basic BGP Network(Cisco 公式)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-16/irg-xe-16-book/configuring-a-basic-bgp-network.html
なお、本記事は IOS/IOS-XE を対象としています。IOS XR では設定体系が異なり、eBGP ピアにルートポリシー(route-policy)の適用が必須になるなどの違いがあるため、別系統として扱う必要があります。
まとめ
Cisco IOS/IOS-XE の BGP は、network コマンドで広告経路を指定する方式が基本です。広告されない原因の多くは network の完全一致前提に、受信経路が使われない原因の多くは iBGP の NEXT-HOP にあります。確認は show ip bgp 系コマンドで状態と経路を分けて見るのが基本です。
- Cisco の BGP は network コマンドで広告経路を指定する方式
- network は RT に完全一致がないと広告されない
- IOS は IPv4 アドレスファミリーを既定で有効化
- iBGP は next-hop-self と再広告制約に注意
- フィルタは prefix-list・distribute-list・filter-list・route-map の 4 手法
- 状態は show ip bgp summary、経路は show ip bgp で確認
- ポリシー変更の反映は clear ip bgp soft で無停止
以上、最後までお読みいただきありがとうございました。
