STUDY · NETWORK GUIDE

3-2 ルーティングの基本

静的ルートと動的ルーティングの違い、管理距離 (AD) による情報源の優劣、メトリックによる最適経路選定を整理する。CSR1000v 3 台の実機で、経路を固定して AD だけを動かす実験と情報源を固定してメトリックだけを動かす実験により、AD とメトリックを分離して確認する。

1. 前節の振り返りと本節の内容

3-1 末尾で R1 Lo0 (10.0.1.1/32) から R2 Lo0 (10.0.2.1/32) 宛 ping が 0/5 で落ちました。R1 のルーティングテーブルには直結ルート (C Connected と L Local) しか載っておらず、宛先 10.0.2.1 と一致する行が無かったためです。本節ではこの「テーブルに行が無い世界」に経路情報を載せていく方法を整理します。

扱うのは 静的ルート (Static Route) と動的ルーティング (Dynamic Routing) の違い管理距離 (AD: Administrative Distance) による情報源の優劣メトリック (Metric) による同一プロトコル内の最適経路選定 の 3 本柱です。最後に CSR1000v 3 台のラボで静的ルート・RIP・OSPF を 1 つの宛先に同時投入し、IOS-XE がどう優劣を付けて 1 つだけ RIB (Routing Information Base) に載せるかを実機で確認します。

3-3 以降の RIP / EIGRP / OSPF / BGP は、いずれも「動的ルーティングプロトコルの 1 種」として AD とメトリックの枠組みに収まります。本節で枠組みを掴んでおけば、各プロトコル個別の動作 (Hello / DUAL / LSA など) は枠組みの中の差分として読めるようになります。


2. 経路の「登録」と「転送時の検索」を分けて捉える

ルーティングの判断は、コントロールプレーン側の「どの経路を RIB に登録するか」 と、データプレーン側の「届いたパケットをどの経路で転送するか」 の 2 つに分かれます。この 2 つは目的も使う指標も違うので、混同しないことが後段の説明を一直線に並べる鍵になります。

RIB 登録 (同一プレフィックスを AD→Metric で 1 本に決める) と 転送時の Longest Match (登録済みテーブルから最長一致を引く) は別レイヤ

RIB 登録時の選定 (AD → Metric) は、同じプレフィックス に対して複数の経路情報源 (静的、OSPF、RIP など) が候補を出した時に、どれをルーティングテーブルに載せるかを決める処理です。まず AD (管理距離) が最小のソース を選び、同一ソース内に複数経路が残る場合だけ、そのプロトコル固有の メトリック で最小値の経路に絞ります (RIP ならホップ数、OSPF ならコストなど)。最小メトリックの経路が複数あれば ECMP (等コストマルチパス) として複数の next-hop を RIB に保持し、負荷分散します。AD はソース間、Metric はソース内の優劣を決める、という役割分担が核心です。選ばれた経路が RIB に登録され、データプレーン側の FIB (Forwarding Information Base) に展開されます。

なお、プレフィックス長が異なる経路 (10.0.0.0/810.0.3.0/2410.0.3.1/32 など) は AD/Metric で潰し合うことはなく、それぞれ別の経路として RIB に共存 します。AD/Metric の比較はあくまで「同一プレフィックスに対する複数候補」の間でのみ働きます。

転送時の Longest Match (最長一致) は、こうして登録済みの RIB/FIB に対して、届いたパケットの宛先 IP と一致するプレフィックスのうち プレフィックス長が一番長い ものを引く、パケット転送時の検索原理 です。たとえば宛先 10.0.3.1 に対してテーブルに 10.0.0.0/810.0.3.0/2410.0.3.1/32 が並んでいれば、/32 が引かれます。ホスト 1 個だけを指す /32 が、/24 (256 個) や /8 (1677 万個) よりも限定的に宛先を当てているためです。これは RIB 登録前の候補絞り込みではなく、登録後のテーブルから転送先を選ぶ段階の話である点に注意します。

R1 がパケット 1 発を受け取り、登録済み RIB を Longest Match で検索→静的ルート選定→Gi2 から送出するまでの 6 ステップ

3. 静的ルートと動的ルーティングの違い

経路情報をルータに教える方法は、大きく 2 系統に分かれます。本節で扱う土台部分を表で並べておきます。

観点静的ルート動的ルーティングプロトコル
設定方法管理者が CLI で 1 行ずつ投入プロトコルを起動して隣接ルータと情報交換
トポロジ変化への追従なし (人手で修正が必要)あり (Hello/Update で自動収束)
CPU / メモリ負荷極小中〜大 (隣接管理・SPF 計算など)
帯域消費なしHello/Update パケットで消費
設定量プレフィックス数に比例して増えるnetwork 文 + プロトコル設定でスケール
主な用途スタブネットワーク (※1)、デフォルトルート、バックアップ経路中〜大規模ネットワーク全般、自動収束が要件
AD 値1 (next-hop 指定の ip route)RIP 120、OSPF 110、EIGRP 90/170、BGP 20/200

静的ルートは「動的プロトコルが要らない領域」と「動的プロトコルだけでは表現しづらい意図」の 2 場面で使われます。前者の代表が、本社からスタブ拠点に向ける 1 本道のリンクで、わざわざ OSPF を回さなくても ip route 1 行で足ります (※1: スタブネットワーク = 外部に向かう経路が 1 本しか無いネットワーク。冗長性も経路選択も要らないので動的プロトコルの恩恵が薄い)。後者の代表が デフォルトルート (ip route 0.0.0.0 0.0.0.0 <next-hop>) で、未知の宛先を全部この 1 行で吸わせる用途は、動的プロトコルだけでも実現できますが、静的の方が意図が明示的になります。

動的ルーティングは、隣接ルータと情報を交換する分のコスト (CPU・帯域・設定の複雑さ) を払って、トポロジ変化への自動追従を手に入れます。リンクが切れた時に管理者が現地で ip route を書き換えなくても、隣接が Hello を返さなくなって Dead タイマー (OSPF) や timeout (RIP) が満了した時点で経路を引き直してくれます (物理リンク断はそれを待たず IF の down イベントで即時に検知される場合もあります)。リンク数が増えるほどこの「人手で追えない」事情が効いてきて、現代の中〜大規模ネットワークは動的プロトコルが前提となります。


4. AD: 管理距離による情報源の優劣

複数のルーティング情報源が同じ宛先プレフィックスを主張した時、ルータは AD で優劣を付けます。AD は 0 から 255 までの整数値 で、小さいほど信頼度が高い と扱われます。255 だけが特別で「採用しない」を意味します。

IOS-XE における主要なソースの AD 既定値は以下のとおりです。

ADソース備考
0Connected (C)IF に IP を設定した瞬間に入る直結ルート
0Local (L)IF の IP そのものを /32 ホストルート化
1Static (S、next-hop 指定)ip route で投入する静的ルート
1Static (S、出力 IF 指定)next-hop の代わりに出力 IF を書く形
20eBGP (B)外部 BGP (異なる AS から学習)
90EIGRP internal (D)同一 EIGRP AS 内
100IGRP歴史的、現代では使われない
110OSPF (O)エリア構造に関わらず統一
115IS-IS (i)キャリア中心
120RIP (R)RIPv1/v2 共通
170EIGRP external (D EX)他プロトコルから再配送された経路
200iBGP (B)内部 BGP (同一 AS 内)
255UnknownRIB に採用しない

並びの設計意図は明快で、自分が直接 IP を付けた直結 (AD 0) > 自分で書いた静的 (AD 1) > 自動学習した動的プロトコル (AD 20〜200) の順で信頼します。動的プロトコル間の順序は EIGRP (90) < OSPF (110) < IS-IS (115) < RIP (120) で、収束が速くトポロジ表現が豊かなものほど低 AD に置かれています。eBGP は 20 と動的の中でも低めですが、これは「他 AS との境界では BGP こそが本流」という運用前提を反映したものです。

静的 AD=1 が OSPF AD=110 と RIP AD=120 を抑えて RIB に採用される

AD は 設定で上書きできますip route 10.0.3.1 255.255.255.255 10.13.0.1 200 のように末尾に数値を書けば、その静的ルートの AD は 200 になります。これが次の項で扱う floating static の正体です。


5. floating static: バックアップ用途の静的ルート

静的ルートを動的プロトコルより上の AD で投入すれば、通常時は動的が勝ち、動的が消えた時だけ静的が浮上 (float) する バックアップ構成を作れます。

たとえば本線が OSPF で学習した経路、予備線が別 ISP との専用線という構成で、予備線側に ip route 0.0.0.0 0.0.0.0 <isp2> 200 を入れておきます。通常時は OSPF (AD=110) が勝って本線へトラフィックが流れ、本線の OSPF 隣接が落ちた瞬間に AD=200 の静的ルートが RIB に上がり、予備線へ切り替わります。隣接が復活すれば AD=110 の OSPF が再度勝って戻ります。

3-2 ラボでは R1 で同じことを「R3 Lo0 (10.0.3.1/32) への primary 経路を R2 経由・AD=1 の通常静的、backup 経路を R1↔R3 直結・AD=200 の floating static」として設定します。後段の検証節で実機の RIB と切り替えの様子を確認します。


6. メトリック: 同一プロトコル内の最適経路選定

AD は 異なるソース間 の優劣を決める指標で、同じソース内 で複数経路が出てきた場合の決め手は各プロトコルが個別に持つ メトリック となります。メトリックの設計はプロトコルごとに違い、それぞれの世界観を反映しています。

プロトコルメトリック考え方
静的(なし、複数書けば全部 RIB に載る = ECMP)管理者が next-hop を直接書いているのでプロトコル側は判断しない
RIPホップ数経由ルータ数だけを数える。16 で到達不能 (= 最大 15 ホップ)
EIGRP複合 (帯域、遅延、信頼性、負荷)デフォルトでは帯域と遅延のみを使う複合計算。MTU は経路情報として運ぶが metric 計算には使わない
OSPFコスト (デフォルト = 10^8 / 帯域 bps)帯域ベース。1Gbps なら 1、100Mbps なら 1、10Mbps なら 10 (※リファレンス帯域の調整が必要)
IS-ISコスト (デフォルト = 10)全リンク 10 固定、必要に応じて手動調整
BGPパス属性 (AS-Path 長、Local Pref、MED など)単一の数値ではなくパス属性を順序付きで評価

RIP の「ホップ数だけ」という設計は乱暴で、1 Gbps と 56 kbps が混在するネットワークで RIP を回すと、56 kbps を経由する 1 ホップ経路が 1 Gbps を経由する 2 ホップ経路に勝ってしまいます。実回線速度を見ない設計が RIP の限界として知られており、1990 年代以降は OSPF や EIGRP のような帯域ベースのプロトコルに置き換えられていきました。

OSPF のコスト計算式 10^8 / 帯域 bps は 100 Mbps を基準にした古い設計で、現代の 1 Gbps / 10 Gbps では全リンクのコストが 1 に張り付いて差が付きません。リファレンス帯域auto-cost reference-bandwidth 100000 (= 100 Gbps) などに上げて再計算させるのが定石となります。本節では深入りせず、3-5 OSPF で扱います。


7. 検証ラボ構成

3-1 のラボに R3 を 1 台足し、R1↔R2↔R3 の 三角構成 で組みます。R1↔R2 と R2↔R3 を primary path、R1↔R3 を backup path として 3 本の /31 リンクを張ります。

R1↔R2 と R2↔R3 が primary、R1↔R3 が backup
CML 上の実機トポロジ
CML2.9 で R1/R2/R3 + mgmt-sw + ext を組み上げた状態

アドレス計画は以下のとおりで、Mgmt 系は 3-1 と同じ unmanaged_switch 経由 (ext --- mgmt-sw --- R1/R2/R3) で 172.16.1.0/24 に収容します。

用途アドレス備考
R1 Gi1 (Mgmt)172.16.1.211/24Mgmt-vrf
R2 Gi1 (Mgmt)172.16.1.212/24Mgmt-vrf
R3 Gi1 (Mgmt)172.16.1.213/24Mgmt-vrf
R1 Gi2 ↔ R2 Gi210.12.0.0/3110.12.0.1/31primary path
R2 Gi3 ↔ R3 Gi210.23.0.0/3110.23.0.1/31primary path
R1 Gi3 ↔ R3 Gi310.13.0.0/3110.13.0.1/31backup path
R1 Lo010.0.1.1/32Router-ID
R2 Lo010.0.2.1/32Router-ID
R3 Lo010.0.3.1/32Router-ID

day0 config は 3-1 と同じ対称形で、各ルータに Mgmt-vrf + Gi2/Gi3 の /31 + Lo0 /32 を持たせ、ルーティング設定は何も入れない状態で起動します。投入は本文中で段階的に追加していきます。

R1 day0 config 抜粋
snippet
hostname R1
!
interface GigabitEthernet1
 vrf forwarding Mgmt-vrf
 ip address 172.16.1.211 255.255.255.0
!
interface GigabitEthernet2
 description P2P to R2 (primary)
 ip address 10.12.0.0 255.255.255.254
!
interface GigabitEthernet3
 description P2P to R3 (backup)
 ip address 10.13.0.0 255.255.255.254
!
interface Loopback0
 ip address 10.0.1.1 255.255.255.255
!
ip route vrf Mgmt-vrf 0.0.0.0 0.0.0.0 172.16.1.1

R2 / R3 は対称形で、IP の数字だけが異なります。詳細はリポジトリの labs/03-l3-routing/3-2-routing-basics/configs/ を参照してください。


8. 検証: 静的ルートで Lo0 間 ping を通す

ラボを起動直後、R1 のテーブルには直結ルートしか入っていません。R1 から R3 Lo0 (10.0.3.1) 宛 ping は 3-1 同様 0/5 で落ちます。

snippet
R1#ping 10.0.3.1 source Loopback0 repeat 5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.3.1, timeout is 2 seconds:
Packet sent with a source address of 10.0.1.1
.....
Success rate is 0 percent (0/5)

R1 / R2 / R3 の 3 台に R3 Lo0 / R1 Lo0 への静的ルート を投入します。経路は primary path 経由とします。

snippet
R1(config)# ip route 10.0.3.1 255.255.255.255 10.12.0.1
R2(config)# ip route 10.0.1.1 255.255.255.255 10.12.0.0
R2(config)# ip route 10.0.3.1 255.255.255.255 10.23.0.1
R3(config)# ip route 10.0.1.1 255.255.255.255 10.23.0.0

R2 は中継として両方向の Lo0 ルートを持たせます。3 台で 4 行投入したあと、R1 のルーティングテーブルを見ます。

snippet
R1#show ip route static
(凡例は省略)
      10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
S        10.0.3.1/32 [1/0] via 10.12.0.1

S 行が 1 つ追加されました。[1/0] の左が AD=1、右が メトリック=0 で、静的ルートは管理者が直接書いているのでメトリック概念を持ちません。経路は via 10.12.0.1 で R2 Gi2 を指しています。

この状態で R1 → R3 Lo0 ping を打ち直します。

snippet
R1#ping 10.0.3.1 source Loopback0 repeat 5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.3.1, timeout is 2 seconds:
Packet sent with a source address of 10.0.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 21/35/65 ms

100% (5/5) で通りました。この実行では 1 回目から成功していますが、ルータが next-hop 10.12.0.1 の ARP をまだ解決していない状態で打つと、初回パケットが ARP 解決待ちで取りこぼされ 3-1 §6 と同じく .!!!! (4/5) になる場合もあります。1 回目の成否は ICMP timeout 内に ARP が間に合うかという機器状態次第で、ルーティングの成立そのものとは別の話です。traceroute で経路を確認します。

snippet
R1#traceroute 10.0.3.1 source Loopback0 probe 1 timeout 1
Type escape sequence to abort.
Tracing the route to 10.0.3.1
VRF info: (vrf in name/id, vrf out name/id)
  1 10.12.0.1 6 msec
  2 10.23.0.1 115 msec

R1 → R2 (10.12.0.1) → R3 (10.23.0.1) の 2 ホップで届きました。直結ルートだけだった世界に、静的ルート 1 行ずつを足しただけで R1 と R3 の Lo0 が繋がります。これがルーティングの最小単位の動きです。


9. 検証: floating static で primary 障害時の昇格を観察する

ここからは floating static の昇格・降格の挙動だけに焦点を絞り、戻り経路の対称性は意図的に放置して片方向の RIB 切り替えを観察します。両端同期は §9 末で改めて補足します。

R1 に backup 用の floating static (AD=200, R1↔R3 直結経由) を追加投入します。

snippet
R1(config)# ip route 10.0.3.1 255.255.255.255 10.13.0.1 200

通常時の RIB を確認します。

snippet
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 10.12.0.1
      Route metric is 0, traffic share count is 1

distance 1 の primary static (R2 経由) が依然として RIB を占有しており、AD=200 の floating は控えに回っています。次に R1 の Gi2 (primary path) を shutdown して primary を消します。

snippet
R1(config)# interface GigabitEthernet2
R1(config-if)#  shutdown
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "static", distance 200, metric 0
  Routing Descriptor Blocks:
  * 10.13.0.1
      Route metric is 0, traffic share count is 1

distance 200 の floating static (R3 直結経由) に切り替わりました。primary の next-hop (10.12.0.1) が R1 から到達不可能になった瞬間に AD=1 の経路が RIB から外れ、控えていた AD=200 が昇格します。

ただし、この状態で R1 から R3 Lo0 への ping を打つと 0/3 で失敗 します。

snippet
R1#ping 10.0.3.1 source Loopback0 repeat 3
.........
Success rate is 0 percent (0/3)

R1 から R3 への往きは Gi3 経由で届きますが、R3 → R1 の 戻り経路 の static は via 10.23.0.0 (R2 経由) のままで、R2 の R1 行き next-hop も R1 Gi2 を指しています。R1 Gi2 が落ちているため戻りが届かず ping は片道通過に終わります。実運用で対称ルーティングを維持したい場合は backup 切り替え時に 両端の static を同期して張り替える か、3-3 以降で扱う動的プロトコルに任せるべき場面となります。

R1 の Gi2 を no shutdown で復旧させると、AD=1 の primary が再昇格します。

snippet
R1(config)# interface GigabitEthernet2
R1(config-if)#  no shutdown
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 10.12.0.1

primary 復活時に floating が自動で控えに戻るこの挙動が、floating static が「primary が生きている間は何もしない、死んだ瞬間だけ表に出る」と言われるゆえんです。


10. 検証: 静的・OSPF・RIP を同時投入して AD で勝敗を見る

3 台に 静的ルート (AD=1) を残したまま、OSPF area 0 (AD=110)RIP v2 (AD=120) を全 IF で起動します。同じ宛先 10.0.3.1/32 に 3 つの情報源が同時に経路を主張する状態を作り、IOS-XE が AD でどう選ぶかを実機で確認します。

各ルータに以下を投入します (R1 例)。

snippet
R1(config)# router rip
R1(config-router)#  version 2
R1(config-router)#  no auto-summary
R1(config-router)#  network 10.0.0.0
R1(config)# router ospf 1
R1(config-router)#  router-id 1.1.1.1
R1(config-router)#  network 10.0.0.0 0.255.255.255 area 0

OSPF が Hello で隣接 (FULL) を確立し、RIP が Update を一周交換して RIB が安定するまで 60 秒程度待ちます (RIP は OSPF のような隣接状態機械を持たず、周期的な Update のやり取りで経路を学習します)。R1 から show ip protocols で稼働中のプロトコルを確認すると、static は表示されません (動的プロトコルの登録テーブルなので)が、OSPF と RIP の両方が動いているのが分かります。

snippet
R1#show ip protocols
*** IP Routing is NSF aware ***

Routing Protocol is "rip"
  ...
  Sending updates every 30 seconds, next due in 16 seconds
  Default version control: send version 2, receive version 2
  Routing Information Sources:
    Gateway         Distance      Last Update
    10.13.0.1            120      00:00:11
    10.12.0.1            120      00:00:20
  Distance: (default is 120)

Routing Protocol is "ospf 1"
  Router ID 1.1.1.1
  Routing Information Sources:
    Gateway         Distance      Last Update
    3.3.3.3              110      00:01:15
    2.2.2.2              110      00:01:15
  Distance: (default is 110)

Distance が 120 (RIP) と 110 (OSPF) で並んでいます。OSPF の Routing Information Sources には 3.3.3.3 (R3 Router-ID) と 2.2.2.2 (R2 Router-ID) が見え、両側と FULL 隣接ができています。show ip ospf neighbor で確認すると以下のとおりです。

snippet
R1#show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
3.3.3.3           1   FULL/BDR        00:00:36    10.13.0.1       GigabitEthernet3
2.2.2.2           1   FULL/BDR        00:00:30    10.12.0.1       GigabitEthernet2

R1 は R2 とも R3 とも直接 OSPF 隣接を組みました。ここで宛先 10.0.3.1 を指定して RIB を見ます。

snippet
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 10.12.0.1
      Route metric is 0, traffic share count is 1

Known via "static", distance 1静的ルート (AD=1) が勝者として RIB に載っています。OSPF (AD=110) と RIP (AD=120) は同じ宛先の経路を学習していますが、AD が静的より大きいため RIB には登場しません。

ここで R1 の静的ルートを 1 行削除して、OSPF が昇格するかを確認します。

snippet
R1(config)# no ip route 10.0.3.1 255.255.255.255 10.12.0.1
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Last update from 10.13.0.1 on GigabitEthernet3, 00:00:18 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 3.3.3.3, 00:00:18 ago, via GigabitEthernet3
      Route metric is 2, traffic share count is 1

Known via "ospf 1", distance 110 に切り替わりました。静的が消えた瞬間、次に AD が小さい OSPF が RIB の席を奪います。注目すべきは next-hop で、static の時の 10.12.0.1 (R2 Gi2 経由) ではなく 10.13.0.1 (R3 直結 Gi3) が選ばれています。R1→R3 への OSPF コストを計算すると、直結ルートは Gi3 1 リンク = cost 1 + Lo0 1 = 2、R2 経由は Gi2 + Gi3 の 2 リンク = cost 2 + Lo0 1 = 3 となり、直結のほうが安いため OSPF が直結を選んでいます。

さらに OSPF を止めると RIP (AD=120) が残ります。

snippet
R1(config)# no router ospf 1
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "rip", distance 120, metric 1
  Last update from 10.13.0.1 on GigabitEthernet3, 00:00:06 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 10.13.0.1, 00:00:06 ago, via GigabitEthernet3
      Route metric is 1, traffic share count is 1

Known via "rip", distance 120 まで降りてきました。next-hop はやはり 10.13.0.1 (R3 直結) で、RIP のメトリック (ホップ数) では R1↔R3 直結が 1 ホップ、R2 経由が 2 ホップとなり、ホップ数最小の直結を選んでいます。

10.1 この検証で 2 つの判断が同時に動いている点に注意

§10 の検証により「静的 → OSPF → RIP とソースを剥がすと、次に AD が低いソースが RIB の席を取る」という AD による情報源の優劣 は観察できました。ただし上の show をよく見ると、もう 1 つの変化が 同時に 起きています。static が勝っていた時の next-hop は 10.12.0.1 (R2 経由) でしたが、OSPF/RIP に切り替わると next-hop が 10.13.0.1 (R3 直結) に変わっています。

これは AD の話ではなく メトリックの話 です。static の next-hop が R2 経由だったのは「ラボで R2 経由と書いたから」に過ぎず、OSPF や RIP は自分のメトリックで最適経路を計算し直した結果、たまたま R3 直結を選んだだけです。つまり §10 の検証は 「AD でソースが入れ替わったこと」と「新しいソースが自分のメトリックで別経路を選んだこと」が 1 つの遷移に混ざって出ています

この状態では「OSPF が R3 直結を選んだのは AD で勝ったからか、メトリックが安いからか」が show だけでは切り分けられません。そこで次の 2 節では、片方の要因を固定してもう片方だけを動かす 純化した対照実験 を 2 つ行い、AD とメトリックを完全に分離して観察します。

  • §11 (AD の純化): 経路 (next-hop) を固定したまま AD だけ を動かし、「情報源が変わっても経路は同じ」を示す。
  • §12 (メトリックの純化): 情報源 (OSPF) を固定したまま メトリックだけ を動かし、「情報源は同じでも経路が変わる」を示す。

11. 検証: AD だけを動かす (経路を固定して情報源の優劣を見る)

§10 の混在を解くために、まず 経路 (next-hop) を固定したまま AD だけを切り替える 実験を行います。ポイントは「OSPF が選んでいるのと同じ next-hop」で静的ルートを被せることです。経路が同じなら、show の変化は AD レイヤの動きだけに絞られます。

R1 を OSPF 単独で動かした状態 (静的ルートなし) から始めます。この時点で R3 Lo0 (10.0.3.1) は OSPF が R3 直結 (Gi3) で best にしています。

snippet
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Last update from 10.13.0.1 on GigabitEthernet3, 00:00:28 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 3.3.3.3, 00:00:28 ago, via GigabitEthernet3
      Route metric is 2, traffic share count is 1

distance 110、next-hop は 10.13.0.1 (R3 直結 Gi3) です。ここに OSPF が選んでいるのと同じ next-hop (10.13.0.1) で静的ルートを 1 行被せます。

snippet
R1(config)# ip route 10.0.3.1 255.255.255.255 10.13.0.1
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "static", distance 1, metric 0
  Routing Descriptor Blocks:
  * 10.13.0.1
      Route metric is 0, traffic share count is 1

Known via "static", distance 1 に変わりました。AD=1 の静的が AD=110 の OSPF を抑えて RIB の席を取っています。ただし next-hop は 10.13.0.1 のままです。情報源だけが OSPF → 静的に入れ替わり、転送先は不変です。

この静的ルートを削除して OSPF に戻します。

snippet
R1(config)# no ip route 10.0.3.1 255.255.255.255 10.13.0.1
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Last update from 10.13.0.1 on GigabitEthernet3, 00:00:18 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 3.3.3.3, 00:00:18 ago, via GigabitEthernet3
      Route metric is 2, traffic share count is 1

distance 110 の OSPF に戻り、next-hop は 10.13.0.1 のままです。distance110 → 1 → 110 と動く間、転送先 10.13.0.1 は終始固定でした。これが AD は「情報源の優劣」だけを決める指標 であることの直接的な証拠です。AD はどのソースを信じるかを決めるだけで、経路そのものには関与しません。


12. 検証: メトリックだけを動かす (情報源を固定して経路を切り替える)

今度は逆に、情報源を OSPF に固定したまま、メトリック (OSPF コスト) だけを動かして 経路が切り替わる様子を見ます。AD は終始 110 で動かしません。

混在を避けるため RIP を止めて OSPF 単独にし、R3 Lo0 への best 経路と、各リンクの OSPF コスト既定値を確認します。

snippet
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Last update from 10.13.0.1 on GigabitEthernet3, 00:01:00 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 3.3.3.3, 00:01:00 ago, via GigabitEthernet3
      Route metric is 2, traffic share count is 1
R1#show ip ospf interface GigabitEthernet3 | include Cost|line protocol
GigabitEthernet3 is up, line protocol is up
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
R1#show ip ospf interface GigabitEthernet2 | include Cost|line protocol
GigabitEthernet2 is up, line protocol is up
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name

best は via 10.13.0.1 (R3 直結 Gi3)、metric 2 です。include のフィルタには “Cost” を含む Topology-MTID Cost ... のヘッダ行も引っかかるため一緒に表示されますが、見るべきは Cost: 1 の値です。Gi3 (直結) と Gi2 (R2 経由) はどちらも Cost: 1 の既定値で、直結経路 = Gi3 (1) + R3 Lo0 (1) = 2、R2 経由 = Gi2 (1) + R2-R3 (1) + R3 Lo0 (1) = 3 となり、安い直結が選ばれています。

ここで R1 の Gi3 (直結リンク) の OSPF コストだけを 100 に引き上げます。直結経路を意図的に高コスト化して、R2 経由のほうが安くなる状況を作ります。

snippet
R1(config)# interface GigabitEthernet3
R1(config-if)#  ip ospf cost 100
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 3, type intra area
  Last update from 10.12.0.1 on GigabitEthernet2, 00:00:22 ago
  Routing Descriptor Blocks:
  * 10.12.0.1, from 3.3.3.3, 00:00:22 ago, via GigabitEthernet2
      Route metric is 3, traffic share count is 1
R1#show ip ospf interface GigabitEthernet3 | include Cost|line protocol
GigabitEthernet3 is up, line protocol is up
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 100
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name

best が via 10.12.0.1 (R2 経由 Gi2) に切り替わりました。Gi3 のコストが 100 になったため直結経路 = 100 + 1 = 101 となり、R2 経由 = 1 + 1 + 1 = 3 のほうが安くなったためです。distance 110 は変わっていません。情報源は OSPF のまま、metric が 2 → 3 に増え、next-hop だけが Gi3 → Gi2 に動きました。

コストを既定に戻すと best は直結に戻ります。

snippet
R1(config)# interface GigabitEthernet3
R1(config-if)#  no ip ospf cost
R1#show ip route 10.0.3.1
Routing entry for 10.0.3.1/32
  Known via "ospf 1", distance 110, metric 2, type intra area
  Last update from 10.13.0.1 on GigabitEthernet3, 00:00:23 ago
  Routing Descriptor Blocks:
  * 10.13.0.1, from 3.3.3.3, 00:00:23 ago, via GigabitEthernet3
      Route metric is 2, traffic share count is 1
R1#show ip ospf interface GigabitEthernet3 | include Cost|line protocol
GigabitEthernet3 is up, line protocol is up
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name

distance 110 は終始固定で、metric と next-hop だけが Gi3 のコストに連動して動きました。これが メトリックは「同一プロトコル内の経路選択」だけを決める指標 であることの直接的な証拠です。

12.1 2 つの実験のまとめ

§11 と §12 で、§10 の混在を 2 つの純化実験に分けて観察しました。show ip route 出力での 2 つの実験の見え方は以下のとおりです。

実験固定したもの動かしたものshow での見え方
§11 (AD の純化)経路 (next-hop 10.13.0.1)情報源 (OSPF ↔ static)distance が 110 ↔ 1 で動く / next-hop は不変
§12 (メトリックの純化)情報源 (OSPF)メトリック (Gi3 cost 1 ↔ 100)next-hop が Gi3 ↔ Gi2 で動く / distance は 110 で不変

show ip route[AD/Metric] という 2 つの数字は、それぞれ独立した別レイヤの判断結果です。AD はソース間の優劣 (経路には関与しない)メトリックは選ばれたソース内の経路選択 (ソースには関与しない)。§10 で 2 つが同時に動いて見えたのは、ソースを剥がすと同時に新しいソースが自分のメトリックで経路を選び直したからで、両者が連動しているわけではありません。


13. 落とし穴・補足

実運用や検証で踏みやすい注意点を 5 点挙げておきます。

  • AD と Metric を混同しない: AD はソース間 (静的 vs OSPF vs RIP) の優劣、Metric はソース内 (OSPF 同士) の優劣を決めます。show ip route[110/2] のような表記は [AD/Metric] で並びます。AD だけ見て「OSPF より EIGRP が速い」と言うのは設計上の意図 (収束特性や複合メトリック) を語っているだけで、実回線の遅延は別問題です。
  • 静的ルートの next-hop 指定 vs 出力 IF 指定: IOS / IOS-XE の classic ip route 構文はプレフィックスとマスクを分けて書きます。ip route 10.0.3.1 255.255.255.255 10.12.0.1 (next-hop) と ip route 10.0.3.1 255.255.255.255 GigabitEthernet2 (出力 IF) は AD=1 で同じですが (本節冒頭の /32 表記は説明上の略記で、実機では prefix mask 形式で投入します)、後者は broadcast / multi-access リンク (Ethernet など) で使うと宛先 ARP 解決が「全宛先について next-hop = 宛先 IP として ARP する」という暗黙挙動になり、ARP テーブルが宛先プレフィックス分膨らみます。P2P (HDLC/PPP 系) では問題になりませんが、Ethernet では next-hop 指定が原則です。
  • floating static の AD は動的プロトコル AD よりも大きく: バックアップ目的で floating static を入れる時は、想定する動的プロトコルの AD よりも 数値を大きく 設定します。OSPF が回っている区間で予備線を入れるなら AD=200 (iBGP と被りますが多くの設計ガイドラインで推奨されます)、EIGRP なら AD=255 直前の値 (例 240) などが定石です。floating static の AD を動的プロトコルと同じ値 (OSPF 相手に AD=110 など) や小さい値にしてしまうと、静的が常時 RIB を占有して「予備のはずが本線を食う」挙動になり、バックアップとして機能しません (AD が同値の場合に静的の metric 0 と OSPF cost を共通尺度として比較するわけではない点にも注意。両者の AD を必ず差を付けて優劣を確定させます)。
  • network 文の意味は実は「IF を起動するセレクタ」: RIP / OSPF / EIGRP の network 文は 「広告するプレフィックス」ではなく「プロトコルを動作させる IF を選択する」 という意味になります。network 10.0.0.0 0.255.255.255 area 0 (OSPF) は「IP が 10.x.x.x に該当する IF で OSPF を起動して area 0 に置く」という指示で、結果としてその IF のサブネットが広告されます。ここで 「ある IF を広告に載せたいが、その IF で隣接は組みたくない」 ケース (LAN 側など) には passive-interface を使います。passive-interface は対象 IF の Hello / Update 送信を止めて隣接形成だけを抑制し、その IF の接続プレフィックスは引き続き広告されます。一方、「あるプレフィックスをそもそも広告に載せたくない」 場合は別の話で、該当 IF でプロトコルを起動しない (network 文の対象に含めない)、集約や distribute-list / redistribute 制御でフィルタする、といった方法を使います。passive-interface は広告を止めるコマンドではない点に注意します。
  • 管理 VRF の静的ルートは Global テーブルとは別物: ip route vrf Mgmt-vrf 0.0.0.0 0.0.0.0 172.16.1.1 で投入した静的ルートは Mgmt-vrf の RIB に入り、Global テーブルの show ip route には表示されません。3-10 で扱う VRF Lite では VRF ごとに独立した RIB を持つのが基本で、本節のラボでも Mgmt 用と検証用の 2 系統が無干渉に動いています。show ip route vrf Mgmt-vrf で別途確認します。

14. 次節

本節では 経路の RIB 登録 (AD → Metric) と転送時の Longest Match の役割分担静的ルートと動的ルーティングの基本構図AD と Metric の役割分担、そして floating static の発想 を整理しました。CSR1000v 3 台で静的・OSPF・RIP を同時に動かして AD=1 → AD=110 → AD=120 の順で RIB の席が入れ替わる挙動を確認したうえで、AD とメトリックを分離する 2 つの純化実験 (経路を固定して AD だけを動かす / 情報源を固定してメトリックだけを動かす) を行い、[AD/Metric] の 2 つの数字がそれぞれ独立した別レイヤの判断結果であることを実機で確認しました。

3-3 RIP では動的ルーティングプロトコルの始祖である RIP (Routing Information Protocol) を扱います。RIPv2 の Distance Vector としての本質、ホップ数メトリックの限界、Split Horizon と Route Poisoning による収束、なぜ現代では使われないかを、本節の RIP セットアップを土台に深掘りしていきましょう。