⏱ 約 75 分 · OSPF neighbor と経路自動学習
Part 2Chapter 04/ネットワーク基礎

ルーティング:実機ルータ2台でOSPFを動かす

自分では静的経路を1行も書いていないのに、別ネットワークへの道がルータの経路表に生えるところを観察します。learner01 で経路を読み、l3router01 と core01 が OSPF で会話している証拠を見ます。

所要時間約 75 分
章タイプstandard
前提知識Part 2 Chapter 1(IP と経路表)/ Chapter 2(ARP と tcpdump)/ Chapter 3(VLAN)
使用機材workstation01ssh student@learner01、観察対象: l3router01 / core01 / webserver01
関連章前: Chapter 3「Linux Bridge と VLAN」/ 次: Chapter 5「iptables と tc netem」

別ネットワークへの道が生えるところを見る

この章でできるようになることは、「同じセグメントの外へ出るとき、どのルータが道を知っているか」を経路表から読めることです。Part 2 Chapter 1 では ip route でデフォルトゲートウェイを見ました。この章では、そこから一段進んで、ルータどうしが経路を交換する様子を見ます。

受講者が打つのは learner01 側の ip / ping / curl までです。l3router01core01vtysh は管理操作なので、この教材では 管理者が取得済みの出力を観察する形にします。

この章で見る実機トポロジ
VLAN10 (172.16.10.0/24)  オフィス
  learner01 / 受講者VM
        |
        | default gateway = l3router01 172.16.10.1
        |
  l3router01 172.16.20.1
        |
        | VLAN20 (172.16.20.0/24)  サーバ網 兼 ルータ間 transit
        |   webserver01 172.16.20.10
        |   core01      172.16.20.2
        |
  core01 172.16.30.1
        |
VLAN30 (172.16.30.0/24)  db01 172.16.30.10  ※Ch4では経路確認まで
この章のゴール: learner01 から VLAN10 と VLAN20 の疎通を確認し、show ip ospf neighborFullshow ip routeO>* 172.16.30.0/24 via 172.16.20.2 を読んで、OSPF が手書きではない経路を学習したことを説明できる。

この章を終えるとできること

経路表を読む 4 動作を身につけます。設定変更ではなく、観察と切り分けが中心です。

$ ip route
default via 172.16.10.1
dev VLAN10 NIC
① 読む
同じ町と町の外を
経路表で分ける
ip route
VLAN20 172.16.20.0/24
webserver01 .20.10
core01 .20.2
② 見分ける
サーバ網と transit の
二役を混同しない
VLAN20
Neighbor ID 172.16.20.2
State Full/-
Area 0
③ 観察する
ルータ2台の
OSPF 会話を読む
show ip ospf neighbor
O>* 172.16.30.0/24
via 172.16.20.2
origin OSPF
④ 説明する
手で書いていない
経路の出どころを読む
show ip route

経路表から OSPF までの考え方

1. デフォルトゲートウェイ:同じ町は直結、町の外はルータへ

Chapter 1 で見た ip route を、ここでも最初に使います。172.16.10.0/24 は learner01 が直接つながっている VLAN10 です。一方、172.16.20.0/24172.16.30.0/24 は別の町なので、まずデフォルトゲートウェイ 172.16.10.1、つまり l3router01 へ渡します。

宛先learner01 から見た扱い次に渡す相手
172.16.10.0/24同じ VLAN10直接届ける
172.16.20.0/24別セグメント172.16.10.1 へ渡す
172.16.30.0/24さらに奥のセグメントl3router01 が core01 から学習する

2. VLAN20 の二役:サーバ網であり、ルータ間 transit でもある

この章のつまずき所は VLAN20 が二役である点です。webserver01 がいるサーバ網であると同時に、l3router01core01 が向かい合って OSPF を話す transit でもあります。

VLAN10 / オフィスlearner01 → GW 172.16.10.1
VLAN20 / サーバ網webserver01 172.16.20.10
l3router01172.16.20.1 / RID 172.16.20.1
core01172.16.20.2 / RID 172.16.20.2

コラム · なぜ VLAN20 が二役なのか

教科書では、ルータ間 transit は専用セグメントとして分けることが多いです。このラボでは実機の NIC とスイッチ構成に合わせ、webserver01 がいる VLAN20 に core01 も同居させています。

隠すと ip route やライブビューと食い違うので、ここでは正面から扱います。小規模拠点では、用途を兼ねる VLAN が現れることもあります。大事なのは、どの IP がどの役割を持っているかを表で読めることです。

3. OSPF neighbor:ルータどうしが同じ area 0 で隣人になる

OSPF は、同じ組織内のルータどうしが経路を交換するためのプロトコルです。この章では l3router01core01 が VLAN20 上で area 0 の neighbor になり、状態が Full になっていることを観察します。

観察 l3router01 · show ip ospf neighbor(管理者取得済み出力)
Neighbor ID     Pri State           Dead Time Address         Interface
172.16.20.2       1 Full/-          00:00:3x  172.16.20.2     eth2:172.16.20.1

Neighbor ID172.16.20.2StateFull です。これは core01(RID 172.16.20.2)と l3router01(RID 172.16.20.1)が、VLAN20 上で経路を交換できる状態まで進んだことを示します。

4. 経路自動学習:手で書いていない VLAN30 への道

OSPF が動くと、core01 が持つ VLAN30(172.16.30.0/24)の情報を l3router01 が学習します。この章では VLAN30 の実到達までは扱いません。見るのは、経路表に OSPF 由来の道が現れた事実までです。

観察 l3router01 · show ip route(管理者取得済み出力から抜粋)
Codes: K - kernel route, C - connected, S - static, O - OSPF, B - BGP

C>* 172.16.10.0/24 is directly connected, eth1
C>* 172.16.20.0/24 is directly connected, eth2
O>* 172.16.30.0/24 [110/20] via 172.16.20.2, eth2, weight 1

O>*O は OSPF 由来です。via 172.16.20.2 は「VLAN30 へ行くには core01 の VLAN20 側 IP に渡す」と読む、という意味です。

5. BGP は軽く:OSPF は組織内、BGP は組織間

BGP も動的ルーティングの仲間ですが、この章では深入りしません。OSPF は同じ組織内のルータどうしが経路を共有する IGP、BGP は AS という組織単位をまたいで経路をやり取りする EGP として位置づけます。

このラボの割り切り: 本来 eBGP は別組織のルータ同士で使うものです。このラボでは、コマンドと出力に触れること自体を目的に、同じ l3router01core01 の2台で OSPF(area 0 の隣人=同一組織)と eBGP(AS65001↔AS65002=別組織)をあえて併走させています。area 0 で隣接する2台が eBGP を張るのは学習用の構成だと理解してください。
観察 l3router01 · show ip bgp summary(管理者取得済み出力から抜粋)
Local AS number 65001
Neighbor        V         AS   MsgRcvd MsgSent   Up/Down State/PfxRcd
172.16.20.2     4      65002        xx      xx   00:xx:xx 1

l3router01AS65001core01AS65002 です。FRR の summary では、Established になると State/PfxRcdそのネイバーから受信した経路数が出ます。ここでは core01(AS65002)が 172.16.30.0/24 を1本広告しているので、l3router01 側の PfxRcd1 と読めます。

演習:learner01 から経路を読み、OSPF の証拠を見る

項目
操作ホストlearner01(VLAN10 / 172.16.10.0/24
接続方法workstation01 から ssh student@learner01
確認先l3router01 172.16.10.1 / webserver01 172.16.20.10
観察対象l3router01core01 の FRRouting 出力(受講者は実行しない)
必要権限受講者側は sudo 不要。router の vtysh/etc/frr/frr.conf は管理者権限が必要(受講者は実行しません)。
演習の安全範囲: この章では設定を変更しません。ip route / ping / curl は何度実行しても状態を変えない確認コマンドです。2回目に同じ結果が出るのは、設定済みの環境では正常です。

静的ルートと OSPF をライブビューで見る

STEP 01 · learner01 に入る

受講者の出発点は workstation01 です。ここからパスワード SSH で learner01 に入ります。

bash · workstation01 から SSH
ssh student@learner01

既に student@learner01 のプロンプトにいる場合は、この STEP は済んでいます。hostname で確認してから次へ進んでください。

STEP 02 · デフォルトゲートウェイを読む

learner01 の経路表を読みます。町の外へ出る先が 172.16.10.1 になっていれば、この章の前提が整っています。

bash · learner01
ip route
# 例:
# default via 172.16.10.1 dev ens18
# 172.16.10.0/24 dev ens18 proto kernel scope link src 172.16.10.20

default via 172.16.10.1 が、l3router01 へ出る道です。172.16.10.0/24 は同じ VLAN10 なので直接つながっています。

STEP 03 · VLAN10 と VLAN20 の疎通を確認する

まず同じ VLAN10 のゲートウェイへ ping し、次に VLAN20 の webserver01 へ進みます。ここで受講者が確認するのは、VLAN10 から VLAN20 へ l3router01 経由で出られることです。

bash · learner01 から疎通確認
ping -c 3 172.16.10.1
ping -c 3 172.16.20.10
curl -I http://172.16.20.10/
# HTTP/1.1 200 OK などが返れば、VLAN20 の webserver01 へ届いています
2回目以降の見え方: ping と curl は確認だけなので、成功したあとにもう一度打っても同じように成功します。ここで何かを作成したり、設定を変更したりはしていません。

STEP 04 · OSPF neighbor Full を観察する

ここからは router 側の観察です。vtysh は管理者権限が必要なので、受講者は実行しません。出力の読み方だけを確認します。

観察 l3router01 · OSPF neighbor
Neighbor ID     Pri State           Dead Time Address         Interface
172.16.20.2       1 Full/-          00:00:3x  172.16.20.2     eth2:172.16.20.1
  • Neighbor ID 172.16.20.2: 相手は core01(RID 172.16.20.2
  • State Full/-: OSPF neighbor が成立済み(/- は transit を point-to-point ネットワークにしているため。ブロードキャスト型のセグメントなら Full/DR などになります)
  • Address 172.16.20.2: VLAN20 上で隣り合っている

STEP 05 · 手で書いていない経路が生えたことを読む

l3router01 の経路表に、VLAN30 への経路が OSPF 由来として現れています。Ch4 では VLAN30 の実到達はしません。経路が生えたところまでを確認します。

観察 l3router01 · OSPF 学習ルート
O>* 172.16.30.0/24 [110/20] via 172.16.20.2, eth2, weight 1

O は OSPF、via 172.16.20.2 は core01 経由です。静的ルートを受講者が追加していないのに道が出ています。これが動的ルーティングの最初の体感です。

STEP 06 · BGP と frr.conf を軽く読む

最後に、設定ファイルを読む伏線を回収します。Part 1 Chapter 2 で「設定は /etc にいることが多い」、Chapter 5 で vim、Chapter 7 で権限を扱いました。FRRouting の設定も /etc/frr/frr.conf にあります。

観察 /etc/frr/frr.conf 抜粋(変更は ops sudo)
router ospf
 ospf router-id 172.16.20.1
 network 172.16.10.0/24 area 0
 network 172.16.20.0/24 area 0
!
router bgp 65001
 neighbor 172.16.20.2 remote-as 65002
 network 172.16.10.0/24

BGP は l3router01AS65001core01AS65002 です。ここでは「OSPF は組織内、BGP は組織間」という用途の対比だけ持ち帰ります(前述のとおり、本ラボは学習用に同じ2台で両方を併走させた割り切り構成です)。

ゴール到達 ✓ learner01 でデフォルトゲートウェイを読み、VLAN20 への疎通を確認し、router の観察出力から OSPF neighbor Full と O>* 172.16.30.0/24 via 172.16.20.2 を説明できる状態になりました。

つまずきポイント

ping 172.16.10.1 が通らない

learner01 が VLAN10 にいる前提が崩れている可能性があります。まず ip routeip addr で、自分のアドレスが 172.16.10.x/24 になっているか、デフォルトゲートウェイが 172.16.10.1 になっているかを見ます。

bash · learner01
ip addr
ip route
ping 172.16.20.10 は通らないが、172.16.10.1 は通る

learner01 から l3router01 までは届いています。次は l3router01 から VLAN20 側、または webserver01 側の問題です。受講者は router 設定を触らず、curl -I http://172.16.20.10/ の結果と ip route の出力をメモします。

管理者側の確認ポイントは、l3router01 の VLAN20 インターフェース 172.16.20.1、webserver01 172.16.20.10、VLAN20 の二役構成です。

OSPF neighbor の出力を自分で打ちたくなった

vtysh は router 上の管理 CLI です。この教材の受講者ロールでは router へ sudo しません。出力を読む練習に集中してください。

自分で検証する管理者ロールの場合は、ops で router に入り、sudo vtysh または sudo vtysh -c 'show ip ospf neighbor' を使います。これは教材本文の受講者操作とは別枠です。

AI に相談

AI ルーティングと OSPF の読み方を質問できます
この章の実機トポロジを前提に、経路表の読み方を説明します

修了確認

この章で見た経路表と OSPF の読み方を、2 問だけ確認します。

問 1 · VLAN20 の二役を説明する

VLAN20(172.16.20.0/24)には、webserver01 172.16.20.10core01 172.16.20.2 がいます。この VLAN は、教材上どの 2 つの役割を兼ねていますか?

解答を見る

1つ目は サーバ網です。webserver01 がいるので、learner01 から VLAN20 の Web サービスへ届くかを確認できます。

2つ目は ルータ間 transitです。l3router01 172.16.20.1core01 172.16.20.2 が VLAN20 上で向かい合い、OSPF neighbor になります。

問 2 · OSPF の経路を読む

次の 1 行を見て、(a) どのプロトコルで学習した経路か、(b) 次に渡す相手はどの IP か、(c) Ch4 では VLAN30 に ping するか、を答えてください。

O>* 172.16.30.0/24 [110/20] via 172.16.20.2, eth2, weight 1
解答を見る

(a) O なので OSPF です。

(b) via 172.16.20.2 なので、次に渡す相手は core01 の VLAN20 側 IP です。

(c) Ch4 では VLAN30 への実到達は扱いません。経路が生えた確認までに留め、実到達は Ch6 の発展枠で扱います。

💡 修了確認の段階ヒント(問 1・問 2 共通)

💡 段階ヒント 1 段目:まず役割名を見る
VLAN20 は「webserver01 がいる場所」と「l3router01 と core01 が話す場所」の両方です。問 2 は行頭の Ovia だけ見ます。
💡 段階ヒント 2 段目:IP をトポロジに戻す
172.16.20.2 は core01 の VLAN20 側 IP です。172.16.30.0/24 は core01 の奥にある VLAN30 です。
💡 段階ヒント 3 段目:Ch4 の範囲を切る
Ch4 は OSPF neighbor と経路自動学習を見る章です。VLAN30 への ping や db01 到達は Ch6 発展枠へ回します。ここで詰め込まないことが、ルーティングの読み方を崩さないコツです。

次の章へ

この章では、道があることと、道が OSPF で生えたことを確認しました。次の章では、その道を あえて通したり、止めたり、遅らせたり します。通信が届くかどうかだけでなく、ファイアウォールと遅延が体感にどう出るかを見ます。

Chapter 5: iptables と tc netem:
  • iptables で通信を許可・遮断する
  • tc netem で遅延を注入する
  • ping / curl の結果から原因を切り分ける