ネットワーク

ネットワーク研修 ルーティングの基礎と経路表の読み方

ネットワークエンジニア研修の3回目です。前回のスイッチの動作とVLANで、VLANを分けると別のサブネットになり、通信させるにはL3の機器が必要だと分かりました。今回はその「L3の機器が何をしているか」、つまりルーティングと経路表を扱います。

この回で身につくこと

  1. PCが「同じサブネット宛て」と「別サブネット宛て」で動作を変えていることを説明できる
  2. 経路表の各行が何を意味するかを読める
  3. 複数の経路が候補になったとき、どれが選ばれるかを判断できる(ロンゲストマッチ)
  4. 同じ宛先を別のプロトコルが持ってきたとき、どちらが採用されるかを説明できる(AD値)
  5. VLAN間ルーティングの2つの実現方法を説明できる

前提/環境

  • 手を動かす環境: Windows 11 のコマンドプロンプト(管理者権限は不要)
  • コマンド出力の例: Cisco IOS のルータ/L3スイッチ
  • 例に使うアドレス: 192.168.10.0/24、192.168.20.0/24、10.0.0.0/8(すべてプライベートアドレス)

座学

PCは送信のたびに判断している

PCは、パケットを送る前に必ず次の判断をしています。第1回のサブネット計算は、実はこの判断のためにあります。

  宛先IPアドレスと、自分のIPアドレス・サブネットマスクを比べる

  ┌─ 同じサブネット?
  │
  ├─ YES → 宛先のMACアドレスをARPで聞いて、直接フレームを送る
  │         (第2回の内容。スイッチが届けてくれる)
  │
  └─ NO  → デフォルトゲートウェイのMACアドレスをARPで聞いて、
            「宛先IPは相手、宛先MACはゲートウェイ」で送る

ここが理解の山場です。別サブネット宛てのパケットでも、IPアドレスの宛先は最終目的地のままです。変わるのは宛先MACアドレスだけで、ルータを通過するたびに書き換えられていきます。

  PC-A (192.168.10.50) から Server (192.168.20.10) へ送る場合

  区間1: PC-A → R1
    宛先IP  192.168.20.10   ← 最終目的地のまま
    宛先MAC R1のMAC         ← 次に渡す相手

  区間2: R1 → Server
    宛先IP  192.168.20.10   ← 変わらない
    宛先MAC ServerのMAC     ← 書き換わった

  IPアドレス = 最終目的地、MACアドレス = 次に渡す相手

ルータがやっていること

  1) パケットを受け取る
  2) 宛先IPアドレスを見て、経路表(ルーティングテーブル)を引く
  3) 一致する経路があれば、その出口インタフェースから次のルータへ送る
  4) 一致する経路が無ければ捨てる(宛先到達不能を返す)
  5) 転送のたびに TTL を1減らし、0になったら捨てる(ループ対策)

  スイッチとの違い
    スイッチ  宛先MACアドレスを見る。テーブルに無ければフラッディング
    ルータ    宛先IPアドレスを見る。経路表に無ければ破棄

「無ければ捨てる」がスイッチとの決定的な違いです。ルータは知らない宛先に対して、とりあえず全方向に送るということをしません。だからこそ経路表の設計が必要になります。

経路表に載る3つの経路

  直接接続(Connected)
    自分のインタフェースに設定したIPアドレスから自動で載る
    設定は不要。インタフェースが up であることが条件

  スタティック(Static)
    管理者が手で書く。相手が増えるたびに書き足す必要がある
    小規模、または経路を固定したい場合に使う

  ダイナミック(Dynamic)
    ルータ同士が経路情報を交換して自動で載せる
    OSPF、EIGRP、BGP、RIP など
    規模が大きいほど有利。障害時の切り替えも自動

ロンゲストマッチ

宛先に一致する経路が複数あったとき、プレフィックス長が最も長い(=範囲が最も狭い)経路が選ばれます。これがロンゲストマッチです。

  経路表に次の4つがあるとき、宛先 10.1.1.50 はどれを使うか

    0.0.0.0/0      → すべてに一致する(範囲が最も広い)
    10.0.0.0/8     → 10.x.x.x に一致
    10.1.0.0/16    → 10.1.x.x に一致
    10.1.1.0/24    → 10.1.1.x に一致(範囲が最も狭い)  ← これが選ばれる

  ・一致する中で最も長いプレフィックスが勝つ
  ・AD値やメトリックを見るのは、プレフィックス長が同じ場合だけ

この順序は覚えておく必要があります。プレフィックス長 → AD値 → メトリックの順で絞り込みます。

デフォルトルート

  0.0.0.0/0 は「それ以外のすべて」を意味する経路

  ・プレフィックス長が 0 なので、他に一致する経路があれば必ず負ける
  ・つまり「どれにも当てはまらなかったときの行き先」になる
  ・PCの「デフォルトゲートウェイ」と同じ考え方
  ・これが無いルータは、経路表に載っていない宛先をすべて捨てる

AD値(アドミニストレーティブディスタンス)

同じ宛先・同じプレフィックス長の経路を、複数の方法で知ってしまうことがあります。そのとき「どの情報を信用するか」を決める値がAD値です。小さいほど優先されます。

  経路の出どころ          AD値
  ---------------------------
  直接接続                  0
  スタティック              1
  eBGP                     20
  EIGRP(内部)            90
  OSPF                    110
  RIP                     120
  EIGRP(外部)           170
  iBGP                    200
  到達不能(使わない)     255

  例: 10.1.1.0/24 を OSPF(110)とスタティック(1)の両方で知った場合
      → スタティックが採用され、経路表にはそちらだけが載る

メトリックは、同じプロトコルの中で経路を比べる値です(OSPFならコスト、RIPならホップ数)。AD値とメトリックは別のもので、比べる場面が違います。

VLAN間ルーティング

第2回の「VLANを分けたら通信できない」の答えがここです。方法は2つあります。

  方法1: ルータオンスティック
    ルータとスイッチを1本のトランクでつなぎ、
    ルータ側にVLANごとのサブインタフェースを作る

    [SW]===トランク===[R1]
      VLAN10 → Gi0/0.10 (192.168.10.1)
      VLAN20 → Gi0/0.20 (192.168.20.1)

    ・安価だが、VLAN間の通信がすべて1本のリンクを往復する
    ・小規模向け

  方法2: L3スイッチ(SVI)
    スイッチ自身にVLANインタフェースを作る

      interface Vlan10 (192.168.10.1)
      interface Vlan20 (192.168.20.1)

    ・スイッチ内部で転送するので速い
    ・現在の構成ではこちらが主流
  ルータオンスティックの設定

  R1(config)# interface GigabitEthernet0/0.10
  R1(config-subif)# encapsulation dot1Q 10
  R1(config-subif)# ip address 192.168.10.1 255.255.255.0
  R1(config-subif)# exit
  R1(config)# interface GigabitEthernet0/0.20
  R1(config-subif)# encapsulation dot1Q 20
  R1(config-subif)# ip address 192.168.20.1 255.255.255.0

  L3スイッチの設定

  SW1(config)# ip routing                      ← これを忘れやすい
  SW1(config)# interface Vlan10
  SW1(config-if)# ip address 192.168.10.1 255.255.255.0
  SW1(config-if)# no shutdown

コマンド出力を読む

R1# show ip route
Codes: L - local, C - connected, S - static, R - RIP,
       O - OSPF, IA - OSPF inter area, D - EIGRP, B - BGP

Gateway of last resort is 192.168.10.254 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 192.168.10.254
      10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
S        10.1.0.0/16 [1/0] via 192.168.20.2
O        10.1.1.0/24 [110/2] via 192.168.20.2, 00:12:33, GigabitEthernet0/1
      192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.10.0/24 is directly connected, GigabitEthernet0/0
L        192.168.10.1/32 is directly connected, GigabitEthernet0/0

読み方です。

  1. 行頭の記号が経路の出どころです。C=直接接続、L=自分自身のアドレス、S=スタティック、O=OSPF。
  2. [1/0] の左がAD値、右がメトリックです。[110/2] ならOSPF(AD 110)でコスト2。
  3. via の後ろが次に渡す相手(ネクストホップ)、最後がその出口インタフェースです。
  4. S** はデフォルトルートの印です。Gateway of last resort の行と対応します。
  5. L の行が /32 なのは、自分自身のアドレスをピンポイントで示すためです。
R1# show ip route 10.1.1.50
Routing entry for 10.1.1.0/24
  Known via "ospf 1", distance 110, metric 2
  Routing Descriptor Blocks:
  * 192.168.20.2, from 192.168.20.2, 00:13:10 ago, via GigabitEthernet0/1

宛先アドレスを指定すると、実際にその宛先で選ばれる経路だけが表示されます。ロンゲストマッチの結果を確認するときはこれを使います。経路表を目で追って数えるより確実です。

ハンズオン

自分のPCの経路表を見る

C:\> route print -4

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク      ゲートウェイ    インターフェイス  メトリック
          0.0.0.0          0.0.0.0     192.168.10.1     192.168.10.50     25
     192.168.10.0    255.255.255.0         リンク上      192.168.10.50    281
    192.168.10.50  255.255.255.255         リンク上      192.168.10.50    281
   192.168.10.255  255.255.255.255         リンク上      192.168.10.50    281
        224.0.0.0        240.0.0.0         リンク上      192.168.10.50    281
  255.255.255.255  255.255.255.255         リンク上      192.168.10.50    281

PCもルータと同じ経路表を持っています。確認してほしいのは次の点です。

  1. 1行目の 0.0.0.0 / 0.0.0.0 がデフォルトルート。ゲートウェイ欄が ipconfig のデフォルトゲートウェイと一致します。
  2. 192.168.10.0 / 255.255.255.0 の行が直接接続。ゲートウェイが「リンク上」=ルータを通さず直接届ける、という意味です。
  3. 自分のアドレス 192.168.10.50/32 と、ブロードキャスト 192.168.10.255/32 の行があります。第1回で計算したブロードキャストアドレスがここにも出てきます。
  4. 224.0.0.0/4 はマルチキャスト用です。

どの経路が使われるかを確かめる

C:\> tracert 192.168.20.10

192.168.20.10 へのルートをトレースしています (最大ホップ数 30)

  1     1 ms     1 ms     1 ms  192.168.10.1      ← まずゲートウェイへ
  2     2 ms     1 ms     1 ms  192.168.20.10     ← 相手に到達

トレースを完了しました。
C:\> ping 192.168.10.20        ← 同じサブネットの相手
C:\> arp -a                    ← 相手のMACが載る

C:\> ping 192.168.20.10        ← 別サブネットの相手
C:\> arp -a                    ← 相手のMACは載らない。載るのはゲートウェイ

この2つを見比べるのが今回のいちばん大事なハンズオンです。座学で説明した「別サブネット宛てはゲートウェイのMAC宛てに送る」が、そのまま目で確認できます。

Linux の場合

$ ip route
default via 192.168.10.1 dev ens192 proto static metric 100
192.168.10.0/24 dev ens192 proto kernel scope link src 192.168.10.50

$ ip route get 192.168.20.10
192.168.20.10 via 192.168.10.1 dev ens192 src 192.168.10.50

$ ip route get 192.168.10.20
192.168.10.20 dev ens192 src 192.168.10.50 uid 1000

ip route get は、その宛先で実際にどの経路が使われるかをカーネルに聞くコマンドです。別サブネット宛てには via(ゲートウェイ経由)が付き、同じサブネット宛てには付きません。

演習問題

1〜4は、次の経路表を持つルータを前提に答えてください。

S*    0.0.0.0/0 [1/0] via 192.168.10.254
S     10.0.0.0/8 [1/0] via 192.168.20.2
O     10.1.0.0/16 [110/3] via 192.168.30.2
O     10.1.1.0/24 [110/2] via 192.168.40.2
C     192.168.10.0/24 is directly connected, GigabitEthernet0/0
  1. 宛先 10.1.1.50 のパケットは、どのネクストホップへ送られるか。
  2. 宛先 10.1.9.9 のパケットは、どのネクストホップへ送られるか。
  3. 宛先 10.9.9.9 のパケットは、どのネクストホップへ送られるか。
  4. 宛先 172.16.1.1 のパケットは、どのネクストホップへ送られるか。
  5. 同じ 10.1.1.0/24 を、OSPF(メトリック2)とスタティックの両方で知った。経路表に載るのはどちらか。理由も答えよ。
  6. ルータが経路表に一致する経路を持たない宛先のパケットを受け取ったら、どうするか。
  7. PCから別サブネットの相手にpingしたとき、arp -a に載るのは誰のMACアドレスか。
  8. VLAN 10 と VLAN 20 の間で通信させたい。実現方法を2つ挙げよ。
  9. L3スイッチでSVIを作り、IPアドレスも付けたのにVLAN間で通信できない。真っ先に疑う設定は何か。
  10. 経路を選ぶとき、プレフィックス長・AD値・メトリックはどの順で比較されるか。

解答と解説

1〜4(ロンゲストマッチ)

  1. 192.168.40.2
     10.1.1.50 に一致するのは 0.0.0.0/0、10.0.0.0/8、10.1.0.0/16、
     10.1.1.0/24 の4つ。最も長い /24 が選ばれる。
     AD値が110で他より大きいが、プレフィックス長が先に見られるので関係ない。

  2. 192.168.30.2
     10.1.9.9 は 10.1.1.0/24 には含まれない。
     一致するうち最長は 10.1.0.0/16。

  3. 192.168.20.2
     10.9.9.9 に一致するのは 0.0.0.0/0 と 10.0.0.0/8。最長は /8。

  4. 192.168.10.254
     172.16.1.1 はどの経路にも含まれないので、
     デフォルトルート 0.0.0.0/0 が使われる。

5〜7

  5. スタティック。
     プレフィックス長が同じ /24 なので、次にAD値を比べる。
     スタティックは1、OSPFは110。小さいほうが優先される。
     ※ 経路表にはスタティックだけが載り、OSPFの経路は
        表示されない(データベースには残っている)。

  6. 破棄する。
     送信元へ「宛先到達不能(ICMP Destination Unreachable)」を返す。
     スイッチのようにフラッディングはしない。

  7. デフォルトゲートウェイのMACアドレス。
     宛先IPは相手のままだが、フレームの宛先MACはゲートウェイになる。
     相手のMACアドレスは、そもそも別サブネットなのでARPで聞けない。

8〜10

   8. ルータオンスティック(トランク1本+サブインタフェース)と、
      L3スイッチのSVI(interface Vlan10 など)。

   9. ip routing が有効になっていない。
      L3スイッチは既定でルーティングが無効な機種がある。
      SVIにIPを付けただけでは転送しない。
      あわせて、SVIが up になっているか(そのVLANに
      up しているアクセスポートがあるか)も確認する。

  10. プレフィックス長 → AD値 → メトリック の順。
      長いプレフィックスが最優先で、
      同じ長さのときにAD値、同じプロトコル内でメトリックを比べる。

現場でのつまずき方

行きはあるが戻りが無い

  R1 には 10.2.0.0/16 への経路がある
  R2 には 192.168.10.0/24 への経路が無い

  → 行きのパケットは届くが、応答が戻ってこない
  → 症状としては「pingが通らない」だけに見える

ルーティングは往復で成立します。片側だけ設定して満足しない、というのが最初の教訓です。切り分けでは、経路の両端でそれぞれ show ip route を確認します。

デフォルトゲートウェイが同じサブネットにない

第1回のつまずき方でも扱った内容です。PCはゲートウェイが同じサブネットにいる前提でARPを出すため、範囲外のアドレスを指定すると、そもそもゲートウェイに到達できません。ipconfig の結果を、第1回のサブネット計算で必ず突き合わせます。

スタティックルートのネクストホップが遠い

  誤り: ip route 10.2.0.0 255.255.0.0 10.9.9.9
        ← 直接つながっていないアドレスを指定している

  正しい: ip route 10.2.0.0 255.255.0.0 192.168.20.2
        ← 隣のルータ(直接接続されたセグメント上)を指定する

ネクストホップには「自分が直接届けられる相手」を書きます。遠くのアドレスを書いても、そこへの経路を再帰的に探しに行き、見つからなければ経路自体が有効になりません。

経路はあるのに通信できない

  確認する順番

  1) 経路はあるか          show ip route 宛先アドレス
  2) 戻りの経路はあるか    対向機器でも確認する
  3) ACLで落ちていないか   show access-lists(ヒットカウントを見る)
  4) NATの対象になっていないか
  5) 相手側のファイアウォールやOSの設定

経路表に載っていることと、通信が通ることは別です。経路を確認したら、次はフィルタを疑います。

L3スイッチで ip routing を忘れる

演習9の内容ですが、実務でも定番です。SVIにIPアドレスを付け、PCのゲートウェイもそこに向けたのに通信できない。show ip route を打っても直接接続の経路すら出てこない、という場合はまず ip routing を確認します。

SVIが up にならない

  interface Vlan10 が up になる条件

  ・そのVLANがスイッチに作られていること
  ・そのVLANに割り当てられたポートが1つ以上 up していること
  ・no shutdown されていること

  → PCを1台もつないでいないVLANのSVIは down のまま。
     検証中に「設定は正しいのに動かない」と悩む原因になる

ルーティングループとTTL

設定を誤って、R1とR2が互いを次ホップとして指し合うと、パケットは2台の間を往復し続けます。これを止めているのがTTLで、転送のたびに1ずつ減り、0になった時点で破棄されます。tracert で同じアドレスが交互に何度も出てきたら、ループを疑います。

フローティングスタティックの向きを間違える

  ip route 10.2.0.0 255.255.0.0 192.168.20.2         ← AD 1(主系)
  ip route 10.2.0.0 255.255.0.0 192.168.30.2 200     ← AD 200(予備系)

  AD値を大きくした経路は、主系が消えたときだけ経路表に載る。
  ここで予備系のAD値を小さくしてしまうと、
  常に予備系が使われるという逆の設定になる。

-ネットワーク
-, ,