IPv6
IPv4 のアドレス枯渇を根本解決し、設計上の改善も多い次世代 IP。 ヘッダ構造、アドレスの種類、SLAAC、NDP、移行技術までこと細かに。
IPv6 が必要な理由
- IPv4 アドレス(約 43 億)がすでに枯渇
- NAT で延命中だが、End-to-End 通信が壊れた状態
- P2P / VoIP / IoT で困る
- モバイル / クラウドの普及でアドレス需要が爆増
- IPv6 は 2^128 ≒ 3.4 × 10^38 個のアドレス(地球上の砂粒以上)
表記
2001:0db8:85a3:0000:0000:8a2e:0370:7334
└──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘
16b 16b 16b 16b 16b 16b 16b 16b = 128 bit
省略ルール
- 各 16 ビットブロックの先頭 0 を省略
2001:0db8:0000:0000:0000:0000:0000:0001 → 2001:db8:0:0:0:0:0:1
- 連続する 0 ブロックを「::」に短縮(1 アドレスに 1 回だけ)
2001:db8:0:0:0:0:0:1 → 2001:db8::1
- 大文字小文字: 表記は小文字を推奨(RFC 5952)
例
| 完全表記 | 省略表記 |
|---|---|
| 0000:0000:0000:0000:0000:0000:0000:0001 | ::1(ループバック) |
| 0000:0000:0000:0000:0000:0000:0000:0000 | ::(未指定) |
| fe80:0000:0000:0000:0204:61ff:fe9d:f156 | fe80::204:61ff:fe9d:f156 |
| 2001:0db8:0000:0000:0000:ff00:0042:8329 | 2001:db8::ff00:42:8329 |
URL での書き方
ポート番号と区別するため角括弧で囲む:
http://[2001:db8::1]:8080/path
ssh user@[fe80::1%en0] ← Link-local はゾーン ID 必須
プレフィックス
IPv6 ではマスク表記は使わず常に CIDR /n。
- 典型的なサブネットは /64(SLAAC が前提)
- サイトに割り当てられるのは普通 /48 や /56
- /64 内にサブネットを切らないのが原則(MAC ベースの自動設定が壊れる)
アドレスの種類
| 範囲 | 名称 | 用途 |
|---|---|---|
| ::/128 | 未指定 | 未割当を表す |
| ::1/128 | ループバック | localhost |
| ::ffff:0:0/96 | IPv4-mapped | IPv6 ソケットで IPv4 を扱う表現 |
| 2000::/3 | グローバルユニキャスト | インターネット上の通常アドレス |
| fc00::/7 | ULA(ユニークローカル) | プライベート相当(RFC 4193) |
| fe80::/10 | リンクローカル | 同一リンク内のみ |
| ff00::/8 | マルチキャスト | グループ通信 |
| 2001:db8::/32 | ドキュメント用 | 例示・教材用(RFC 3849) |
ブロードキャストはない
IPv6 にはブロードキャストの概念がなくなった。代わりにマルチキャストを使う。
主要なマルチキャストアドレス
- ff02::1 — リンクローカル全ノード
- ff02::2 — リンクローカル全ルータ
- ff02::1:ff00:0/104 — Solicited-Node(NDP の隣接探索)
- ff02::5 / ff02::6 — OSPFv3
- ff02::9 — RIPng
- ff02::fb — mDNSv6
リンクローカル (fe80::/10)
- 同一リンク内でのみ有効、ルータを越えない
- すべての IPv6 対応 NIC が必ず持つ
- NDP / DHCPv6 / RA など制御通信で使われる
- 通信先を指定するときにゾーン IDが必要 (
fe80::1%en0)
ULA (fc00::/7)
- IPv4 のプライベートアドレス相当
- fc00::/8 は予約、fd00::/8 が実用
- fd の後に40 ビットのランダム IDでグローバル衝突を回避
- 例:
fd12:3456:789a::/48
IPv6 ヘッダ
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Source Address +
| (128 bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Destination Address +
| (128 bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- 固定 40 バイト(IPv4 は可変)
- Header Checksum なし(上位層に任せる)
- Fragmentation はホスト側のみ(ルータでは行わない)
- Flow Label: フロー識別。QoS や ECMP のヒント
- Next Header: 次に続くヘッダのタイプ(拡張ヘッダ)
拡張ヘッダ
IPv4 の Options に相当。連結式で挟む。
- Hop-by-Hop Options
- Routing
- Fragment
- Destination Options
- Authentication Header (AH) / IPsec
- Encapsulating Security Payload (ESP) / IPsec
インタフェース ID(下位 64 ビット)
EUI-64(古典)
MAC アドレスから機械的に生成:
MAC: 00:1a:2b:3c:4d:5e
↓ 真ん中に ff:fe を挟む
00:1a:2b:ff:fe:3c:4d:5e
↓ 7 ビット目を反転 (Universal/Local bit)
02:1a:2b:ff:fe:3c:4d:5e
結果: ::21a:2bff:fe3c:4d5e
ただし MAC が漏れて追跡可能になるためプライバシー上の問題あり。
プライバシー拡張(RFC 4941)
- 下位 64 ビットをランダムに決める
- 定期的(24 時間など)に変更
- iOS / Android / Windows / macOS で標準化
安定プライベート(RFC 7217)
ランダムだが同じネットワーク内では一貫。NAT 越し DHCP のような挙動。Linux NetworkManager 既定。
SLAAC(Stateless Address Autoconfiguration)
DHCP なしで自分で IPv6 アドレスを生成する仕組み。RFC 4862。
動作
- NIC 起動時に Link-Local アドレス (fe80::xxxx) を生成
- DAD(Duplicate Address Detection)で重複検査
- Router Solicitation (RS) を送信
- ルータが Router Advertisement (RA) でプレフィックスを通知
- プレフィックス + インタフェース ID でグローバルアドレスを組み立てる
- もう一度 DAD
- 同時に複数のグローバルアドレスを持てる(一時 / 永続)
RA で配布される情報
- プレフィックス(通常 /64)
- 有効期間 / 推奨期間
- デフォルトルータ
- MTU
- RDNSS(DNS サーバ)— RFC 8106
- Other / Managed フラグ(DHCPv6 を使うかどうか)
NDP(Neighbor Discovery Protocol)
IPv4 の ARP / ICMP Redirect / Router Discovery を統合。ICMPv6 上で動く(RFC 4861)。
主要メッセージ(ICMPv6)
| Type | 名称 | 用途 |
|---|---|---|
| 133 | Router Solicitation (RS) | ルータを探す |
| 134 | Router Advertisement (RA) | ルータの広告 |
| 135 | Neighbor Solicitation (NS) | 隣接の MAC を聞く(ARP 相当) |
| 136 | Neighbor Advertisement (NA) | NS への応答 |
| 137 | Redirect | より良い経路を通知 |
Solicited-Node マルチキャスト
ARP のブロードキャストの代わりに、該当ノードだけに届くマルチキャストアドレスを使う。 無関係なホストは割り込まれない。
DAD(Duplicate Address Detection)
新しいアドレスを使う前に、同じアドレスを持つノードがいないかNS をマルチキャストして確認。 誰かが NA を返したら自分のアドレスを使えない。
DHCPv6
SLAAC で十分なケースもあるが、厳密管理したい場合は DHCPv6。
- ステートフル DHCPv6: アドレスも DHCP が配布
- ステートレス DHCPv6: アドレスは SLAAC、DNS 等の追加情報だけ DHCP
- UDP 547(サーバ) / 546(クライアント)
- マルチキャストアドレス ff02::1:2
- DHCPv6-PD(Prefix Delegation): ISP がプレフィックス /48 等を配布、ルータがさらに分配
グローバル / 一時アドレスの両立
IPv6 は 1 NIC が複数のアドレスを同時に持てる:
- fe80::xxxx — リンクローカル
- 2001:db8:1::xxxx — 永続グローバル(着信用)
- 2001:db8:1::yyyy — 一時グローバル(発信用、定期的にローテ)
OS が「どのアドレスで送るか」をRFC 6724 の優先順位に従って選ぶ。
ICMPv6 のその他の役割
- MLD (Multicast Listener Discovery) — IGMP 相当
- Path MTU Discovery(IPv4 と同じく Packet Too Big で通知)
- エラー通知
移行技術
デュアルスタック
IPv4 と IPv6 を両方動かす。最も互換性が高い。OS / アプリ / ルータ全てが両方を扱える必要。
Happy Eyeballs(RFC 8305)
IPv6 と IPv4 を並列に試して速い方を採用。 IPv6 が遅い環境でも体感を悪くしない。ブラウザに広く実装。
NAT64 / DNS64
- IPv6 only のクライアントが IPv4 サーバにアクセスする仕組み
- DNS64 が「IPv4 アドレスしか無い」サーバの A レコードから合成 AAAAを返す
- NAT64 が IPv6 → IPv4 にトランスレート
- iOS / モバイルキャリアで広く使用
464XLAT
モバイルで主流。クライアント側でも変換することで IPv4 only アプリが IPv6 only 網を使える。
DS-Lite
ISP 側で 1 つのグローバル IPv4 を多くの加入者で共有。日本では IPv6 IPoE + DS-Lite が普及。
6to4 / Teredo(廃止傾向)
過渡期の自動トンネル。現代では推奨されない。
確認コマンド
# 自 IPv6
ip -6 a # Linux
ifconfig | grep inet6 # macOS
# 隣接表(NDP)
ip -6 neigh
ndp -an # macOS
# IPv6 ルート
ip -6 route
# 疎通
ping6 ipv6.google.com
ping -6 2001:4860:4860::8888
# 経路
traceroute6 ipv6.google.com
# DNS(AAAA レコード)
dig AAAA example.com
Linux で IPv6 を無効化(非推奨)
# /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
現代では IPv6 は有効のままが原則。無効化はトラブルの引き金。
ファイアウォールでの IPv6
- iptables の代わりに
ip6tables(古典) - nftables なら統一
- クラウドのセキュリティグループはIPv4/IPv6 両方のルール必須
- 「IPv4 だけ閉じて IPv6 は素通し」という事故が多い
IPv6 普及率(2026 年初頭)
- Google アクセス比率: 世界平均で 45% 前後、日本 50% 超
- モバイルは特に高い(米国・インド・日本)
- 大手 CDN / クラウドはほぼ全て対応
- 家庭向けは ISP 次第(IPoE 化で進行)
よくある誤解
- ❌ 「IPv6 は速い」 — 物理層は同じ。経路の混雑次第
- ❌ 「NAT が無いから危険」 — FW を正しく使えば問題ない。NAT はセキュリティ機能ではない
- ❌ 「IPv4 が完全に消える」 — 当面はデュアルスタック。完全移行はかなり先
- ❌ 「IPv6 はサブネット切らなくていい」 — /64 が最小単位で固定だが、サイト内では /48 を /64 に分ける
セキュリティ
- RA Guard で不正な RAを防ぐ(rogue router 攻撃)
- DHCPv6 Snooping
- NDP のキャッシュ汚染(NDP Spoofing)対策
- 巨大な拡張ヘッダ攻撃
- IPv6 を意識せずに FW を作ると素通りするので注意
手元の ip a で fe80::... や 2001:... を見てみる。
Web ブラウザで https://ipv6.google.com に繋がれば、すでに IPv6 が動いている。
ブログのコメントで「IPv6 で繋がりません」と書く前に、自分の環境を確認するクセを。