STUDY · NETWORK GUIDE

3-1 IP アドレッシング詳細

クラスフルアドレッシングの限界から VLSM・CIDR・経路集約を整理し、CSR1000v 2 台 + /31 P2P リンクの実機検証で Internet address / Broadcast address / 直結ルートの見え方を確認する。Loopback 間 ping が届かない事実から 3-2 ルーティングの基本へつなぐ。

1. 1-6 からの踏み込み地点

第 3 章は L3 編である。1-6「IP アドレスとサブネットマスク」で 32 ビット構造、ネットワーク部とホスト部、サブネットマスクと CIDR 表記、クラスフルからクラスレスへの移行、プライベートアドレスまでを整理した。本節はその先、設計と実装で実際に手を動かす領域に入る。

扱うのは VLSM (Variable Length Subnet Mask)CIDR / 経路集約 (Supernetting)/31 リンク (RFC 3021)、Router-ID 用の /32 Loopback の 4 つで、最後に CSR1000v 2 台で /31 を実機に張り、IOS-XE が直結ルートをどう表示するか、Loopback 間で ping が届くのかを確かめる。

直結ルートだけで構成された世界がどこまで届き、どこから届かなくなるかを実機で押さえると、次節 3-2 で扱う静的ルートや動的ルーティングプロトコルが何を解決しに来ているのかが自然に見えてくる。


2. クラスフルアドレッシングの限界

1-6 で扱った通り、IPv4 の運用初期は クラスフルアドレッシング で割り当てが行われていた。先頭ビットのパターンから A/B/C/D/E の 5 クラスに分け、A は /8、B は /16、C は /24ネットワーク部の境界が 8 ビット刻みで固定 されていた。割り当てる側は組織規模を見て「これはクラス B」と決めるだけで、サブネットマスクを設計するという発想自体が無かった。

500 台のホストを持つ組織に /24(254 ホスト)では足りず、/16(65534 ホスト)を割り当てると 6 万 5 千個のアドレスを一括消費する。実際に使うのは 500 台分だけで、残りはクラス境界に縛られて他に転用できない。組織単位で全世界に積み上がった結果が、1990 年代前半のアドレス枯渇危機である。

同時期に インターネットバックボーンのルーティングテーブル肥大化 も進行していた。クラス C を細切れに配布した結果、コアルーターは数十万本単位のプレフィックスを抱え、メモリと検索コストが課題になっていた。

これらを同時に解決する枠組みとして 1993 年に標準化されたのが CIDR (RFC 1518/1519) である。クラス境界を捨て、サブネットマスクを 任意のビット位置に置ける 設計に切り替えた。500 台の組織には /23(510 ホスト)、4 台しかいない P2P リンクには /30(2 ホスト)、というように必要量に応じた粒度で割り当てられる。同時に、配下の細かいプレフィックスを上位ルーターで 1 本に束ねる 経路集約 が現実的に成立し、コアのルーティングテーブルを抑えられるようになった。


3. VLSM: 同一プレフィックスを必要量に応じて細切れにする

VLSM (Variable Length Subnet Mask) では、親プレフィックスの内側で サブネットごとに異なるマスク長 を設定できる。これに対して FLSM (Fixed Length Subnet Mask) は全サブネットで同一のマスク長を使う方式で、192.168.10.0/24 を 4 分割するなら全部 /26、8 分割するなら全部 /27 となる。

FLSM では、50 台 LAN・20 台 LAN・P2P 区間が混在するときに一番大きい 50 台に合わせて /26(62 ホスト)を全サブネットに当てることになり、P2P 区間で 62 個分のアドレスを抱えながら実際に使うのは 2 個だけ、という浪費が生まれる。

VLSM は親プレフィックス内でマスク長を切り替えられる。192.168.10.0/24 を「50 台 LAN × 1 + 20 台 LAN × 2 + 6 台 LAN × 1」に分割した例が以下である。

VLSM 分割例

サブネットプレフィックスアドレス範囲ホスト数用途
#1192.168.10.0/26.0.636250 台 LAN
#2192.168.10.64/27.64.953020 台 LAN
#3192.168.10.96/27.96.1273020 台 LAN
#4192.168.10.128/29.128.13566 台 LAN
余り192.168.10.136/29192.168.10.255-120将来拡張用

分割は 大きい順に切り出す。最初に 50 台 LAN を /26 で取り、20 台 LAN を /27 で 2 本、最後に 6 台 LAN を /29 で取る。逆順だと後から大きい区画を取りたいときに連続領域が残っていない事故が起きる。

境界計算はビット演算だが、慣れないうちは off-by-one を踏みやすい。/26+64 番地刻み、/27+32/28+16/29+8 で次のサブネットに進む。192.168.10.64/27 の次が .96 になるのは、.64 から 32 個進んで最後が .95、その次が .96 だからである。落とし穴の節で再度触れる。


4. CIDR と経路集約 (Supernetting)

VLSM が親プレフィックスを小さく割る方向の操作であるのに対し、経路集約 (Route Summarization / Supernetting) は複数の隣接プレフィックスを 1 本に束ねる方向の操作で、両者は CIDR の表と裏になっている。

経路集約

典型例として、ある拠点ルーターが配下に次の 4 本の /24 を持っているとする。

  • 192.168.0.0/24
  • 192.168.1.0/24
  • 192.168.2.0/24
  • 192.168.3.0/24

これらの上位ビットを 2 進で並べると、先頭 22 ビットが共通する。したがって個別の 4 本を上流に広告する必要はなく、192.168.0.0/22 という 1 本に束ねて広告できる。上流から見れば、このプレフィックス宛のパケットは拠点ルーターに送れば届くという情報だけが必要で、内訳は知らなくてよい。

集約の利点は、コアのルーティングテーブル削減、配下リンクのフラップ隔離、運用上の見通しの良さに整理できる。配下のいずれかのリンクが上下しても集約された 1 本の経路は安定したままなので、上流側にイベントが伝播しない点が特に効く。

罠もある。集約範囲の中に 実在しないアドレス が含まれていると、その宛先のパケットが拠点ルーターまで吸い込まれて行き場を失う。たとえば /22 を広告しながら配下に 192.168.2.0/24 が実在しない場合、192.168.2.5 宛のパケットは拠点まで届いて drop される(ブラックホール化)。集約は実在する連続領域だけを束ねる、というのが運用上の原則になる。


5. /31 P2P リンクの実機挙動

/31 リンク (RFC 3021) の実機検証に入る。検証は CML (Cisco Modeling Labs) 上に CSR1000v 2 台を立てた構成で行う。

検証トポロジ

R1 と R2 の CSR1000v 2 台を GigabitEthernet2 同士で直結し、各 GigabitEthernet1 を管理ネットワーク (172.16.1.0/24) に繋いで Mgmt-vrf で外部 SSH を受ける。各ルーターには Router-ID 用の Loopback0 を /32 で 1 つずつ載せる。

アドレス計画は以下のとおりである。

用途アドレス備考
R1 G1 (Mgmt)172.16.1.211/24Mgmt-vrf
R2 G1 (Mgmt)172.16.1.212/24Mgmt-vrf
R1 G2 (P2P)192.0.2.0/31RFC 5737 文書用アドレスを使用
R2 G2 (P2P)192.0.2.1/31同上
R1 Lo010.0.1.1/32Router-ID
R2 Lo010.0.2.1/32Router-ID

P2P で使う 192.0.2.0/24 は RFC 5737 で文書化用に予約された範囲で、インターネットに広告されない教材向きのアドレスである。

R1/R2 の day0 config は対称形でホスト名と IP アドレスのみ異なる。

R1 day0 config 全文
snippet
hostname R1
no ip domain-lookup
ip domain name lab.local
!
username admin privilege 15 secret 0 C1sc012345
enable secret 0 C1sc012345
!
ip ssh version 2
crypto key generate rsa modulus 2048
!
vrf definition Mgmt-vrf
 address-family ipv4
 exit-address-family
!
interface GigabitEthernet1
 description Management to lab gateway
 vrf forwarding Mgmt-vrf
 ip address 172.16.1.211 255.255.255.0
 no shutdown
!
interface GigabitEthernet2
 description P2P link
 ip address 192.0.2.0 255.255.255.254
 no shutdown
!
interface Loopback0
 description Router-ID
 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
!
line vty 0 4
 transport input ssh
 login local
!
end
R2 day0 config 全文
snippet
hostname R2
no ip domain-lookup
ip domain name lab.local
!
username admin privilege 15 secret 0 C1sc012345
enable secret 0 C1sc012345
!
ip ssh version 2
crypto key generate rsa modulus 2048
!
vrf definition Mgmt-vrf
 address-family ipv4
 exit-address-family
!
interface GigabitEthernet1
 description Management to lab gateway
 vrf forwarding Mgmt-vrf
 ip address 172.16.1.212 255.255.255.0
 no shutdown
!
interface GigabitEthernet2
 description P2P link
 ip address 192.0.2.1 255.255.255.254
 no shutdown
!
interface Loopback0
 description Router-ID
 ip address 10.0.2.1 255.255.255.255
!
ip route vrf Mgmt-vrf 0.0.0.0 0.0.0.0 172.16.1.1
!
line vty 0 4
 transport input ssh
 login local
!
end

P2P リンクへの設定は ip address 192.0.2.0 255.255.255.254 で、マスク 255.255.255.254/31 に対応する。

リンクが up になった状態で R1 の show ip interface brief を見る。

snippet
R1#show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       172.16.1.211    YES TFTP   up                    up      
GigabitEthernet2       192.0.2.0       YES TFTP   up                    up      
Loopback0              10.0.1.1        YES TFTP   up                    up

G2 の IP-Address が 192.0.2.0 で表示されている。クラスフルの感覚では .0 で終わるアドレスはネットワークアドレスとして予約されていたが、/31 ではホスト部が 1 ビットしかないので .0.1 の両方をホストアドレスに割り当てる。それぞれ R1 と R2 の P2P 端である。

次に R1 の show ip route connected で直結ルートを見る。

snippet
R1#show ip route connected
(凡例は省略)
Gateway of last resort is not set

      10.0.0.0/32 is subnetted, 1 subnets
C        10.0.1.1 is directly connected, Loopback0
      192.0.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.0.2.0/31 is directly connected, GigabitEthernet2
L        192.0.2.0/32 is directly connected, GigabitEthernet2

192.0.2.0/24 is variably subnetted, 2 subnets, 2 masks という親見出しの下に /31 のサブネット(C ルート)と /32 のローカル(L ルート)が 2 本並ぶ。クラス C 親プレフィックス内で複数のマスク長が混在していることを、IOS-XE は variably subnetted で明示する。

C (Connected) は IF に設定したサブネット全体を指すルートで、宛先がこの範囲のパケットを G2 から L2 で送出する経路にあたる。

L (Local) は IF に設定した IP アドレスそのものを /32 ホストルートとして登録するもので、ルーター自身宛のパケット(ping や SSH)を CPU プロセスに上げるための内部ルートである。IOS 12.x 系には無く、IOS 15 / IOS-XE で導入された挙動で、落とし穴の節で再度触れる。

R2 側も同じ形になる。

snippet
R2#show ip route connected
(凡例は省略)
Gateway of last resort is not set

      10.0.0.0/32 is subnetted, 1 subnets
C        10.0.2.1 is directly connected, Loopback0
      192.0.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.0.2.0/31 is directly connected, GigabitEthernet2
L        192.0.2.1/32 is directly connected, GigabitEthernet2

C の行は両端で同じ 192.0.2.0/31 を指し、L の行だけがそれぞれ自分の IP(R1 は .0/32、R2 は .1/32)になっている。

続けて G2 IF の詳細を見る。

snippet
R1#show ip interface GigabitEthernet2 | include Internet|Broadcast|MTU|Mask
  Internet address is 192.0.2.0/31
  Broadcast address is 255.255.255.255
  MTU is 1500 bytes

Internet address is 192.0.2.0/31/31 表記で出る。一方 Broadcast address is 255.255.255.255 は、/24 リンクなら 192.0.2.255 のようなサブネットブロードキャストが出るところに限定ブロードキャスト(全 1 アドレス)が表示されている。

/31 はホスト部が 1 ビットしか無く、.0.1 がいずれも両端ホストアドレスとして使われているため、サブネット内ブロードキャストを置く余地が無い。サブネットブロードキャストと限定ブロードキャストの 2 種類のうち、前者が定義不能になる結果 IOS-XE は後者の 255.255.255.255 を表示する。R2 側も同じである。

Loopback0 の表示は単純である。

snippet
R1#show interfaces Loopback0 | include line protocol|Internet
Loopback0 is up, line protocol is up 
  Internet address is 10.0.1.1/32

Loopback は /32 ホストルートで、物理 IF と違って外部接続を持たないためリンク状態は常に up に保たれる。OSPF / BGP の Router-ID にも使われるため、description Router-ID を入れてある。


6. P2P ping で /31 が機能していることを確認する

R1 から R2 の P2P 端宛に ping を打つ。

snippet
R1#ping 192.0.2.1 source GigabitEthernet2 repeat 5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.0.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.0.2.0 
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 9/12/18 ms

結果は 80% (4/5)、表示の .!!!! が 1 回目失敗・以降 4 回成功を意味する。1 回目が落ちるのは ARP 解決待ち で、R1 の ARP キャッシュにまだ 192.0.2.1 の MAC が無い状態で送ろうとした初回 ICMP Echo Request が、ARP Request/Reply のやりとり待ちで timeout する。2 回目以降はキャッシュに乗っているので即座に届く。ARP の仕組みは 2-8 の Dynamic ARP Inspection の前提として既に触れたとおりで、L3 から見るとこの形で副作用が表面化する。

ARP Request broadcast → Reply unicast → ARP cache 学習 → ICMP 1 回目 timeout → 2 回目以降成功、までを 7 ステップで追う

実運用で 4/5 だったらもう一度同じ ping を打ち、5/5 なら初回 ARP 解決による drop でリンクは正常、と判断できる。


7. Lo0 間 ping は届かない: 直結ルートの限界

次に、直結ルートの限界を見るため R1 Lo0 から R2 Lo0 宛に ping を打つ。両者の Lo0 は 10.0.1.110.0.2.1 で、いずれも /32 のホストルートとして両端に存在する。

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

結果は 0% (0/5)、1 つも届かない。

R1 のルーティングテーブルに 10.0.2.1 宛のルートが無い からである。先ほどの show ip route connected で R1 が知っているのは自分の 10.0.1.1/32、P2P リンクの 192.0.2.0/31192.0.2.0/32 の 3 本だけで、R2 の 10.0.2.1 はどのプレフィックスにも含まれない。R1 は宛先不明としてパケットを破棄する。

Loopback0 を /32 で切ったアドレスは「Loopback 自身の 1 アドレスだけ」のルートで、隣接ルーターからは直結ルートとして見えない。同じ 10.0.0.0/8 空間にあっても、互いに学習する手段が無ければ届かない。

R1 が 10.0.2.1 宛のパケットを R2 に渡すには、R1 のルーティングテーブルに「10.0.2.1 宛は next-hop 192.0.2.1」というルートを入れる必要がある。これを管理者が手で書くのが 静的ルート、ルーター同士で経路情報を自動で交換するのが 動的ルーティングプロトコル (RIP / OSPF / EIGRP / BGP) で、いずれも 3-2 で扱う。


8. VLSM 演習

VLSM の境界計算を手で動かす演習を 1 題置く。

問題: 192.168.20.0/24 から「30 ホスト LAN × 2 + 10 ホスト LAN × 1」を大きい順に切り出し、各サブネットのプレフィックス、アドレス範囲、ブロードキャストアドレスを示せ。

解答

30 ホスト → 2^5 - 2 = 30/27、10 ホスト → 2^4 - 2 = 14/28 を使う。

サブネットプレフィックスネットワーク利用可能範囲ブロードキャスト
30 ホスト LAN #1/27192.168.20.0.1.30192.168.20.31
30 ホスト LAN #2/27192.168.20.32.33.62192.168.20.63
10 ホスト LAN/28192.168.20.64.65.78192.168.20.79
余り-192.168.20.80/28 以降--

/27 は 32 個刻み (.0.32.64)、/28 は 16 個刻み (.64.80) で進める。残り .80 以降は /28 から /26 まで自由に切り出せる。


9. 落とし穴・補足

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

  • /31 リンクと RFC 3021: /31 を P2P リンクで使う運用は RFC 3021 (2000 年 12 月) で標準化される前は「P2P でもサブネットブロードキャストとネットワークアドレスを予約する必要がある」という考えが支配的で、/30 が慣行だった。/31 採用で 1 リンクあたり 2 アドレス節約でき、ISP バックボーンを中心に普及している。本節の variably subnetted ... 2 masksBroadcast address is 255.255.255.255 の見え方は、この /31 固有の振る舞いである。
  • /32 Loopback の Router-ID 慣行: Loopback は仮想 IF で物理ポートのリンク状態に依存せず常に up であるため、OSPF / BGP の Router-ID 自動選出規則でも Loopback の最大 IP が優先される。物理 IF を Router-ID にすると、その IF が down した瞬間に Router-ID が変わって隣接関係の再構築(OSPF なら隣接再起動)に発展する。/32 の Lo0 を 1 本載せておくのが定石である。
  • VLSM 境界計算の off-by-one: 192.168.10.64/27 の次のサブネットの先頭は .96 である。/27 はホスト部 5 ビット = 32 個のアドレスを含むので、.64 から 32 個進んで最後が .95、その次のサブネットが .96 から始まる。/26 は 64 個刻み、/28 は 16 個刻み、/29 は 8 個刻みである。
  • 集約の罠 (ブラックホール化): 経路集約は集約範囲の中身がすべて実在する前提で動く。集約広告した範囲に存在しないプレフィックスがあると、上流はそちらに送り込み、受け取った側は drop する。本来他経路で届くはずだったパケットを意図せず奪う動きになるため、集約は実在する連続領域だけを束ね、予備領域は別プレフィックスとして広告しない、が原則である。
  • Local ルート (L) の意味: show ip routeL 行は IOS-XE の Local ルート で、自 IF に付けた IP アドレスを /32 ホストルートとしてルーティングテーブルに載せる。自分宛のパケットを CPU プロセスに上げるための内部ルートで、外部に広告される性質のものではない。IOS 12.x には無く、IOS 15 / IOS-XE で導入された挙動である。C は IF に設定したサブネット、L は IF に設定した IP そのもの、と区別する。

10. 次節 (3-2 ルーティングの基本) への接続

本節ではクラスフルから VLSM・CIDR の歴史を整理し、/31 P2P と /32 Loopback を CSR1000v 2 台で実機に張って IOS-XE の見え方を確認した。Lo0 間 ping が 0/5 で落ちたのは、直結ルートだけで構成された世界には届かない宛先が残るためである。

続く 3-2「ルーティングの基本」では、この届かない 10.0.2.1 宛を届かせるための 静的ルート動的ルーティングプロトコル (RIP / OSPF / EIGRP / BGP の総論) を扱う。