Cisco IOS の BGP 設定手順|network コマンドと neighbor の基本

  • URLをコピーしました!
目次

はじめに

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-mapneighbor … 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-family

neighbor … remote-as で指定する AS 番号が、自局の router bgp の AS と異なれば eBGP、同じであれば iBGP になります。

ひとつ補足すると、IOS は IPv4 ユニキャストのアドレスファミリーを既定で有効にするため、neighbor … activate を省略しても IPv4 経路は交換されます。ただし no bgp default ipv4-unicast を設定した場合は、アドレスファミリー配下での activate が必要になります。設定を明示的にそろえる意味でも、address-family ipv4 unicast 配下に activatenetwork を記述する書き方が分かりやすくなります(公式: 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 65000

neighbor … 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-family

network には 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 しかない場合は /24network は広告されません(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 connectedredistribute 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-self

iBGP の再広告制約とルートリフレクタ

iBGP には、「iBGP で学習した経路は他の iBGP ピアに再広告しない」というループ防止ルールがあります。このため、AS 内の iBGP ルーターはフルメッシュが原則必要ですが、台数が増えると現実的でなくなります。

これを解消するのがルートリフレクタ(RR)です。RR では、クライアントとなるネイバーに route-reflector-client を指定します。

router bgp 65000
 address-family ipv4 unicast
  neighbor 3.3.3.3 route-reflector-client

iBGP のフルメッシュや RR の概念は、『BGP とは|eBGP と iBGP の違いと経路選択の基礎』でも解説しています。

経路フィルタリング(prefix-list / distribute-list / route-map)

送受信する経路を絞り込む方法は主に 4 つあります。いずれもネイバー単位で in(受信)/out(送信)の方向を指定して適用します。用途に応じて使い分けます。

prefix-list(プレフィックス単位の許可・拒否)

プレフィックスとマスク長で経路を絞り込む、もっとも一般的な方法です。gele でマスク長の範囲も指定できます。

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 out

distribute-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 out

filter-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 in

route-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 bgpBGP テーブル(* 有効経路、> ベストパス)
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 insoft 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 で無停止

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次