例示用IPアドレスについて知る

Tech

TL;DR

IPアドレス(v4, v6)にはドキュメントへの記載用のアドレスが予約されています。(RFC5737 / RFC3849)
ドキュメントに記載するアドレス際は、適切な専用のIPアドレスを使いましょう。

素朴な疑問

弊社ではwebアプリケーションの開発をおこなっています。
そんな業務の中で、先日「IPアドレスでの入力はinvalidにする(ドメイン名での入力を求める)」というケースの実装をすることがありました。

実装を終え、いざテストを書こうとしたときに、テストで使えるIPアドレスを知らないことに気づきました。(職業柄、ドメイン名(example.comなど)を扱うことはあってもIPアドレスを扱うケースは多くないので…)

その時に調べた例示用IPアドレスについて、まとめておこうと思います。

IPv4

RFC1166

例示用IPv4アドレスはRFC1166で登場しました。
当初は192.0.2.0/24のみでした。

また、「例示用」という明確な定義はなく、”TEST”というネットワーク名が付けられている。というくらいの曖昧な位置づけだったようです。
※ 一応、研究用途であることや、インターネットでは利用されない前提であることは決まっていたようです。

RFC5737

例示用のIPv4アドレスに関しては、RFC5737が最新です。

こちらでは、以下の3つアドレスブロックを例示用と位置づけています。

  • 192.0.2.0/24 (TEST-NET-1)
  • 198.51.100.0/24 (TEST-NET-2)
  • 203.0.113.0/24 (TEST-NET-3)

上記のアドレスブロックは、明確に「例示用」とされており、ルーターやファイアウォールなどのネットワーク機器で「外部ネットワークに出さない/内部ネットワークに入れないIPアドレス」とすることをネットワーク運用者に求めています。

つまり、(誤って)実際のプログラムで使われてしまっても、外部ネットワークに出ていかない安全なIPアドレスということになります。

「例示用」の位置づけですが、IPアドレスとして機能しないものであり、テストでの利用も問題ありません。

128.66.0.0/16

少し脱線しますが、RFC5737の5章では、128.66.0.0/16というIPアドレスが過去に例示用に使われたことに言及しています。

このIPアドレスは現在、特別な意味を割り当てられていないため通常のIPアドレスとして(注意すれば)使って良い。とされています。

あまり気にする必要は無さそうですが、古い設定などが残ってる環境などは、意図しない挙動になる可能性があるので、少し注意しておく必要はあるかもしれません。

IPv6

RFC3849

IPv6の例示用アドレスはRFC3849で定義されています。

2001:db8::/32 です。

IPv4同様、インターネット上にパケットが流通しないように、ネットワーク運用者が管理することが求められています。

RFC9637

比較的最近(2024年)、RFC3849を拡張する形でRFC9637が定義されました。

3fff::/20 です。

RFC3849で定義されている2001:db8::/32はネットワーク部で32bit使っており、より大規模なネットワークを例示するユースケースで使えない。という問題があったようです。

なぜネットワーク部を20bitとしたのかについては、3章で具体的に説明されていました。(現在の利用状況から20bitとしておけば、将来的にも困らないだろう…ということのようです)

まとめ

長年この業界にいますが、example.comだけで困らなかったので、久々に「へーちゃんと用意されてるんだ」と感じました。

テストやドキュメントを書くときは、RFCに従って書いていきましょう!

タイトルとURLをコピーしました