Day 4: IPアドレス、NAT、DHCP
今日学ぶこと
- IPv4アドレスのクラスとCIDR表記
- サブネットマスクとサブネッティング
- プライベートIPアドレスとパブリックIPアドレス
- NAT(ネットワークアドレス変換)の種類と仕組み
- DHCP(動的ホスト構成プロトコル)のDORAプロセス
- IPv6の概要と移行メカニズム
IPv4アドレス
IPv4アドレスは32ビットの数値で、通常はドット区切りの10進数(ドット付き10進表記)で表します。
192.168.1.100
↓
11000000.10101000.00000001.01100100
IPアドレスの構造
IPアドレスはネットワーク部とホスト部の2つの部分で構成されます。
flowchart LR
subgraph IP["IPアドレス: 192.168.1.100/24"]
direction LR
Net["ネットワーク部\n192.168.1"]
Host["ホスト部\n.100"]
end
style Net fill:#3b82f6,color:#fff
style Host fill:#22c55e,color:#fff
style IP fill:#1e293b,color:#fff
IPアドレスのクラス
従来、IPアドレスはクラスで分類されていました(クラスフルアドレッシング)。
| クラス | 先頭ビット | 範囲 | ネットワーク部 | ホスト数 | 用途 |
|---|---|---|---|---|---|
| A | 0 | 0.0.0.0 〜 127.255.255.255 | 8ビット | 約1677万 | 大規模ネットワーク |
| B | 10 | 128.0.0.0 〜 191.255.255.255 | 16ビット | 約65000 | 中規模ネットワーク |
| C | 110 | 192.0.0.0 〜 223.255.255.255 | 24ビット | 254 | 小規模ネットワーク |
| D | 1110 | 224.0.0.0 〜 239.255.255.255 | - | - | マルチキャスト |
| E | 1111 | 240.0.0.0 〜 255.255.255.255 | - | - | 実験用(予約) |
CIDR(Classless Inter-Domain Routing)
クラスフルアドレッシングはIPアドレスの無駄が大きいため、現在はCIDR表記が使われています。スラッシュの後にネットワーク部のビット数を記述します。
192.168.1.0/24 → ネットワーク部が24ビット、ホスト部が8ビット
10.0.0.0/8 → ネットワーク部が8ビット、ホスト部が24ビット
172.16.0.0/12 → ネットワーク部が12ビット、ホスト部が20ビット
サブネットマスクとサブネッティング
サブネットマスク
サブネットマスクは、IPアドレスのネットワーク部とホスト部の境界を示すために使われます。
| CIDR | サブネットマスク | ネットワーク部 | ホスト数 |
|---|---|---|---|
| /8 | 255.0.0.0 | 8ビット | 16,777,214 |
| /16 | 255.255.0.0 | 16ビット | 65,534 |
| /24 | 255.255.255.0 | 24ビット | 254 |
| /25 | 255.255.255.128 | 25ビット | 126 |
| /26 | 255.255.255.192 | 26ビット | 62 |
| /27 | 255.255.255.224 | 27ビット | 30 |
| /28 | 255.255.255.240 | 28ビット | 14 |
| /30 | 255.255.255.252 | 30ビット | 2 |
ホスト数 = 2^(ホスト部のビット数) - 2(ネットワークアドレスとブロードキャストアドレスを除く)
サブネッティングの例
192.168.1.0/24 を4つのサブネットに分割する場合:
ホスト部8ビットのうち、2ビットをサブネット用に借りる → /26
flowchart TB
subgraph Original["/24 ネットワーク(254ホスト)"]
O["192.168.1.0/24"]
end
subgraph Subnets["4つのサブネット(各62ホスト)"]
S1["192.168.1.0/26\nホスト: .1 〜 .62\nブロードキャスト: .63"]
S2["192.168.1.64/26\nホスト: .65 〜 .126\nブロードキャスト: .127"]
S3["192.168.1.128/26\nホスト: .129 〜 .190\nブロードキャスト: .191"]
S4["192.168.1.192/26\nホスト: .193 〜 .254\nブロードキャスト: .255"]
end
O --> S1
O --> S2
O --> S3
O --> S4
style Original fill:#3b82f6,color:#fff
style S1 fill:#22c55e,color:#fff
style S2 fill:#f59e0b,color:#fff
style S3 fill:#8b5cf6,color:#fff
style S4 fill:#ef4444,color:#fff
計算手順:
- 4つのサブネットに分割 → 2^n ≥ 4 → n = 2ビット必要
- 元のプレフィックス長 /24 + 2 = /26
- 各サブネットのホスト数: 2^6 - 2 = 62台
- サブネットの境界: 256 / 4 = 64 ごと
| サブネット | ネットワークアドレス | 使用可能範囲 | ブロードキャスト |
|---|---|---|---|
| 1 | 192.168.1.0 | 192.168.1.1 〜 .62 | 192.168.1.63 |
| 2 | 192.168.1.64 | 192.168.1.65 〜 .126 | 192.168.1.127 |
| 3 | 192.168.1.128 | 192.168.1.129 〜 .190 | 192.168.1.191 |
| 4 | 192.168.1.192 | 192.168.1.193 〜 .254 | 192.168.1.255 |
プライベートIPアドレスとパブリックIPアドレス
RFC 1918 で定義されたプライベートIPアドレスは、インターネット上ではルーティングされない内部ネットワーク用のアドレスです。
| クラス | プライベートIPアドレス範囲 | CIDR | ホスト数 |
|---|---|---|---|
| A | 10.0.0.0 〜 10.255.255.255 | 10.0.0.0/8 | 約1677万 |
| B | 172.16.0.0 〜 172.31.255.255 | 172.16.0.0/12 | 約104万 |
| C | 192.168.0.0 〜 192.168.255.255 | 192.168.0.0/16 | 約65000 |
flowchart LR
subgraph Private["プライベートネットワーク"]
PC1["PC\n192.168.1.10"]
PC2["PC\n192.168.1.20"]
PC3["PC\n192.168.1.30"]
end
Private -->|"NAT"| Router["ルーター\nプライベート: 192.168.1.1\nパブリック: 203.0.113.5"]
Router -->|"パブリックIP\n203.0.113.5"| Internet["インターネット"]
style Private fill:#3b82f6,color:#fff
style Router fill:#f59e0b,color:#fff
style Internet fill:#8b5cf6,color:#fff
特殊なIPアドレス
| アドレス | 用途 |
|---|---|
| 127.0.0.0/8 | ループバック(自分自身) |
| 0.0.0.0 | 全ネットワーク(デフォルトルート) |
| 255.255.255.255 | 制限付きブロードキャスト |
| 169.254.0.0/16 | リンクローカル(DHCP失敗時に自動割当) |
NAT(Network Address Translation)
NATは、プライベートIPアドレスとパブリックIPアドレスを変換する技術です。IPv4アドレスの枯渇を緩和する重要な技術として広く使われています。
スタティックNAT
プライベートIPとパブリックIPを1対1で固定的に対応付けます。
- 外部からのアクセスが必要なサーバーに使用
- パブリックIPの節約にはならない
ダイナミックNAT
プライベートIPをパブリックIPのプールから動的に割り当てます。
- 通信開始時にプールから空いているIPを割り当て
- 通信終了後にプールに返却
PAT(Port Address Translation)/ NAPT
最も一般的なNATの形態です。1つのパブリックIPを複数のプライベートIPで共有します。ポート番号で通信を区別します。
sequenceDiagram
participant PC1 as PC1<br/>192.168.1.10:3000
participant PC2 as PC2<br/>192.168.1.20:3000
participant NAT as ルーター(NAT)<br/>203.0.113.5
participant Web as Webサーバー<br/>93.184.216.34:443
PC1->>NAT: src: 192.168.1.10:3000<br/>dst: 93.184.216.34:443
Note over NAT: NATテーブル<br/>192.168.1.10:3000 ⇔ 203.0.113.5:40001
NAT->>Web: src: 203.0.113.5:40001<br/>dst: 93.184.216.34:443
PC2->>NAT: src: 192.168.1.20:3000<br/>dst: 93.184.216.34:443
Note over NAT: NATテーブル<br/>192.168.1.20:3000 ⇔ 203.0.113.5:40002
NAT->>Web: src: 203.0.113.5:40002<br/>dst: 93.184.216.34:443
Web->>NAT: src: 93.184.216.34:443<br/>dst: 203.0.113.5:40001
NAT->>PC1: src: 93.184.216.34:443<br/>dst: 192.168.1.10:3000
| NATの種類 | 対応 | パブリックIP | 用途 |
|---|---|---|---|
| スタティックNAT | 1対1(固定) | 複数必要 | 公開サーバー |
| ダイナミックNAT | 1対1(動的) | プール必要 | 中規模ネットワーク |
| PAT/NAPT | 多対1 | 1つでOK | 家庭・小規模オフィス |
DHCP(Dynamic Host Configuration Protocol)
DHCPは、ネットワーク上のデバイスにIPアドレスやその他のネットワーク設定を自動的に割り当てるプロトコルです。
DHCPが割り当てる情報
- IPアドレス
- サブネットマスク
- デフォルトゲートウェイ
- DNSサーバーのアドレス
- リース期間
DORAプロセス
DHCPのIPアドレス取得は、DORA(Discover、Offer、Request、Acknowledge)の4つのステップで行われます。
sequenceDiagram
participant C as クライアント<br/>(IPアドレスなし)
participant S as DHCPサーバー<br/>192.168.1.1
C->>S: 1. DHCP Discover(ブロードキャスト)<br/>「IPアドレスをください」
Note over C: src: 0.0.0.0<br/>dst: 255.255.255.255
S->>C: 2. DHCP Offer(ブロードキャスト)<br/>「192.168.1.100はいかがですか?」
Note over S: 提案: IP, マスク, GW, DNS, リース期間
C->>S: 3. DHCP Request(ブロードキャスト)<br/>「192.168.1.100をお願いします」
Note over C: 複数サーバーがある場合の選択通知も兼ねる
S->>C: 4. DHCP Acknowledge(ブロードキャスト)<br/>「承認しました。使ってください」
Note over C: IPアドレス取得完了<br/>192.168.1.100
DHCPリースの更新
- リース期間の**50%**経過時: DHCPサーバーにユニキャストで更新要求
- 更新失敗時、**87.5%**経過時: ブロードキャストで再要求
- リース期間満了: IPアドレスを返却し、DORAプロセスを再実行
# Check current DHCP lease (Linux)
cat /var/lib/dhcp/dhclient.leases
# Release and renew DHCP lease (Linux)
sudo dhclient -r eth0 # Release
sudo dhclient eth0 # Renew
# Release and renew (Windows)
ipconfig /release
ipconfig /renew
IPv6の概要
IPv4アドレスの約43億個では世界中のデバイスに対応できないため、IPv6が開発されました。
IPv4 vs IPv6
| 特徴 | IPv4 | IPv6 |
|---|---|---|
| アドレス長 | 32ビット | 128ビット |
| アドレス数 | 約43億 | 約340澗(3.4×10^38) |
| 表記 | 10進数(192.168.1.1) | 16進数(2001:0db8::1) |
| ヘッダ | 可変長(20〜60バイト) | 固定長(40バイト) |
| NAT | 必要 | 不要(原則) |
| セキュリティ | IPsecはオプション | IPsecが標準 |
| 自動設定 | DHCP | SLAAC + DHCPv6 |
IPv6アドレスの表記
完全表記: 2001:0db8:0000:0000:0000:0000:0000:0001
短縮表記: 2001:db8::1
- 各グループの先頭の0は省略可能
- 連続する0のグループは
::で1回だけ省略可能
IPv6アドレスの種類
| 種類 | プレフィックス | 説明 |
|---|---|---|
| グローバルユニキャスト | 2000::/3 | インターネット上で一意(パブリックIP相当) |
| リンクローカル | fe80::/10 | 同一リンク内でのみ有効(自動生成) |
| ユニークローカル | fc00::/7 | プライベートIP相当 |
| マルチキャスト | ff00::/8 | マルチキャスト通信 |
| ループバック | ::1 | 自分自身(127.0.0.1相当) |
IPv4からIPv6への移行メカニズム
flowchart TB
subgraph Transition["移行メカニズム"]
DS["デュアルスタック\nIPv4とIPv6を同時に使用"]
Tunnel["トンネリング\nIPv6パケットをIPv4で包む"]
Trans["変換(NAT64/DNS64)\nIPv4⇔IPv6を相互変換"]
end
style DS fill:#22c55e,color:#fff
style Tunnel fill:#3b82f6,color:#fff
style Trans fill:#8b5cf6,color:#fff
style Transition fill:#1e293b,color:#fff
| メカニズム | 説明 | 利点 | 欠点 |
|---|---|---|---|
| デュアルスタック | 両方のプロトコルを同時実行 | 互換性が高い | リソース消費が大きい |
| トンネリング | IPv6をIPv4で包んで転送 | 段階的な移行が可能 | オーバーヘッドがある |
| NAT64/DNS64 | プロトコル間の変換 | IPv6のみの環境からIPv4にアクセス可能 | 一部のアプリが動作しない場合がある |
まとめ
本日の学習内容
| トピック | ポイント |
|---|---|
| IPv4アドレス | 32ビット。ネットワーク部とホスト部で構成 |
| CIDR | /24のようにプレフィックス長でネットワーク部を指定 |
| サブネッティング | ネットワークを小さなサブネットに分割する技術 |
| プライベートIP | 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 |
| NAT | プライベートIP⇔パブリックIPの変換。PATが最も一般的 |
| DHCP | DORAプロセスでIPアドレスを自動割り当て |
| IPv6 | 128ビットアドレス。NATが不要。移行は段階的に進行中 |
キーポイント
- サブネッティング計算: ホスト数 = 2^n - 2、必要なビット数から逆算
- PAT/NAPT: 1つのパブリックIPで複数のプライベートIPを共有(ポート番号で区別)
- DHCP DORA: Discover → Offer → Request → Acknowledge
- IPv6は128ビット: アドレス枯渇の根本的な解決策
練習問題
基礎レベル
- 以下のIPアドレスがクラスA、B、Cのどれに属するか答えてください。
- 10.0.0.1
- 172.16.0.1
- 192.168.1.1
- サブネットマスク
255.255.255.0をCIDR表記で書いてください。 - DHCPのDORAプロセスの4つのステップを説明してください。
中級レベル
192.168.1.0/24のネットワークを4つの等しいサブネットに分割してください。各サブネットのネットワークアドレス、使用可能なIPアドレス範囲、ブロードキャストアドレスを答えてください。- PAT(NAPT)で、内部の3台のPC(192.168.1.10、.20、.30)がすべてポート80の同じWebサーバーにアクセスする場合、NATテーブルがどのようになるか示してください。
- IPv6アドレス
2001:0db8:0000:0000:0000:0000:0000:0001を短縮表記で書いてください。
チャレンジレベル
- ある企業に
10.10.0.0/16のネットワークが割り当てられています。以下の要件を満たすサブネット設計を行ってください。- 本社: 500台のホスト
- 支社A: 200台のホスト
- 支社B: 100台のホスト
- サーバーセグメント: 50台のホスト
- NATが「インターネットの透過性」を損なうと言われる理由を、具体的な技術的問題(P2P通信、FTPなど)を挙げて説明してください。
- IPv6のSLAAC(Stateless Address Autoconfiguration)の仕組みを、Router SolicitationとRouter Advertisementの流れを含めて説明してください。
参考リンク
- RFC 1918 - Address Allocation for Private Internets
- RFC 2131 - Dynamic Host Configuration Protocol
- RFC 8200 - Internet Protocol, Version 6
- CIDR / Subnet Calculator
次回予告
Day 5: ルーティング では、静的ルーティングと動的ルーティングの違い、ルーティングテーブルの読み方、RIP・OSPF・BGPといったルーティングプロトコル、そしてtracerouteでパケットの経路を追跡する方法を学びます。