2026年8月19日

2026年8月19日

IPv4 と IPv6 の違い|アドレス・仕組み・サーバー運用で気を付ける点

IPv4 と IPv6 の最も大きな違いはアドレスの長さで、IPv4 は32ビット、IPv6 は128ビットです。この差から、アドレスの表記、NAT の要否、アドレスの割り当て方、ネットワーク内の仕組み(ARP と NDP など)まで多くの点が変わります。この記事では、両者の違いを仕組みの面から整理したうえで、Web サーバーや WordPress を運用するときに IPv6 で気を付けるべき点を説明します。読み終えるころには、自分のサイトが IPv6 に対応しているかを確認し、対応時の落とし穴を避けられるようになります。

違いの一覧

まず主な違いを表にまとめます。細かい点は後の節で説明します。

項目 IPv4 IPv6
アドレス長 32ビット 128ビット
表記 192.0.2.10(10進数を4つ) 2001:db8::10(16進数を8組、:: で0の連続を省略)
ループバック 127.0.0.1 ::1
プライベート用途 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 ユニークローカル fc00::/7、リンクローカル fe80::/10
ブロードキャスト あり なし(マルチキャストで代替)
同一リンク上の相手の解決 ARP NDP(ICMPv6 を利用)
アドレスの自動設定 DHCP SLAAC と DHCPv6
経路途中での分割(フラグメント) ルーターも行う 送信元だけが行う
ヘッダ 可変長(20バイト以上) 固定40バイト+拡張ヘッダ
DNS レコード A AAAA

アドレスと表記の違い

IPv4 のアドレスは約43億個しかなく、すでに新規の割り当てはほぼ尽きています。IPv6 は桁違いに多く、一般的な回線でも利用者ごとに /64 以上のまとまった範囲が割り当てられます。

IPv6 の表記には省略のルールがあります。各組の先頭の0は省略でき、0が続く組は :: で1回だけまとめられます。例えば 2001:0db8:0000:0000:0000:0000:0000:0010 は 2001:db8::10 と書きます。同じアドレスでも書き方が複数あるため、ログを検索したり設定ファイルで比較したりするときは、表記をそろえてから比べる必要があります。

URL に IPv6 アドレスを直接書くときは、ポート番号の : と区別するため角括弧で囲みます。

curl -I 'http://[2001:db8::10]:8080/'

なお、本記事で例に使っている 192.0.2.0/24 と 2001:db8::/32 は、どちらも文書の例示用に予約された範囲です。

NAT とファイアウォールの考え方

IPv4 では、家庭や社内の機器はプライベートアドレスを持ち、ルーターの NAT で1つのグローバルアドレスを共有するのが一般的です。NAT があるため、外部から内部の機器へは、ポート開放をしない限り直接接続されません。

IPv6 ではアドレスが十分にあるため、各機器がグローバルアドレスを持つのが基本で、NAT は通常使いません。そのため「NAT があるから外から見えない」という前提は成り立たず、ファイアウォールで受信を制御することが重要になります。サーバーでは、IPv4 用と IPv6 用のファイアウォールルールが別々に管理される場合があります(iptables と ip6tables など)。IPv4 側だけ閉じて IPv6 側が開いたまま、という設定漏れはよくある事故です。ufw や nftables の inet ファミリーのように両方をまとめて扱える仕組みでも、IPv6 が有効になっているかを確認してください。

ネットワーク内の仕組みの違い

IPv6 では ARP の代わりに NDP(近隣探索)が使われ、これは ICMPv6 のメッセージで動きます。また、IPv6 ではルーターが途中でパケットを分割しないため、経路の途中で通せる最大サイズ(MTU)を超えた場合は、ICMPv6 の「Packet Too Big」で送信元に知らせます。

このため、IPv4 の感覚で ICMP をすべて遮断すると、IPv6 では「接続はできるが大きなページや画像の読み込みが途中で止まる」といった分かりにくい障害が起きます。ICMPv6 は必要な種類を許可するのが基本です。IPv6 で保証される最小の MTU は1280バイトです。

アドレスの割り当てでは、IPv6 の SLAAC により、ルーターの通知をもとに端末が自分でアドレスを作れます。端末によってはプライバシー保護のため一時的なアドレスを定期的に作り直すため、同じ利用者でも時間によって IPv6 アドレスが変わることがあります。

サーバー・WordPress 運用で気を付ける点

DNS に AAAA レコードを追加する前に

AAAA レコードを公開すると、IPv6 を使える利用者は IPv6 で接続してきます。クライアントは IPv4 と IPv6 の両方を試して早く応答した方を使う仕組み(Happy Eyeballs)を持つことが多いものの、IPv6 側が「つながるが応答しない」状態だと、表示が遅くなる利用者が出ます。AAAA を追加する前に、Web サーバーが IPv6 で待ち受けているか、ファイアウォールで 80/443 番が IPv6 でも許可されているか、証明書と表示内容が IPv4 と同じかを確認してください。

dig AAAA example.com +short
curl -6 -I https://example.com/
curl -4 -I https://example.com/

IP アドレスを扱う設定とコード

IPv6 で接続が来ると、PHP の $_SERVER['REMOTE_ADDR'] には IPv6 のアドレスが入ります。IPv4 を前提にした処理は、次の点で問題が起きやすくなります。

  • .htaccess や nginx のアクセス制限に IPv4 アドレスだけを書いていると、IPv6 で接続した管理者が締め出される、または制限をすり抜ける。
  • アドレスを保存するデータベースの列が短すぎる。IPv6 の文字列表記は最大45文字程度になるため、余裕のある長さにする。
  • 正規表現で IPv4 の形式だけを想定している。

アドレスの判定には、PHP の filter_var() を使うのが確かです。

<?php
$ip = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';

if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
    // IPv6 のアドレス
} elseif ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
    // IPv4 のアドレス
}

IPv6 では1つの利用者が /64 などの範囲をまるごと使えるため、1つのアドレスを遮断しても、範囲内の別のアドレスから接続し直せます。ログイン試行の制限などで IPv6 を扱うときは、/64 単位で数えるかどうかを検討してください。対応はセキュリティプラグインによって異なるため、各プラグインの説明を確認します。

リバースプロキシや CDN の背後にある場合

Cloudflare などの CDN やロードバランサーを使っていると、サーバーに届く接続元は CDN 側のアドレスになり、利用者の本来のアドレスは X-Forwarded-For などのヘッダで渡されます。このとき、CDN とサーバーの間が IPv4 で、利用者は IPv6、ということも起こります。ヘッダの値を信用するのは、信頼できるプロキシから来た接続に限ってください。

IPv6 の普及状況をどう考えるか

IPv6 の利用率は国や回線によって差があり、日本でも固定回線・携帯回線の両方で IPv6 の利用が広がっています(2026年10月現在)。一方で IPv4 しか使えない利用者や社内ネットワークも残っているため、サイトを公開する側は IPv4 と IPv6 の両方で同じように接続できる状態(デュアルスタック)を目指すのが現実的です。

まとめ

  • IPv4 は32ビット、IPv6 は128ビットで、表記・NAT・自動設定・近隣探索の仕組みが異なります。
  • IPv6 では NAT に頼れないため、IPv4 と IPv6 の両方でファイアウォールを設定します。
  • ICMPv6 をすべて遮断すると、MTU の調整が働かず通信が途中で止まることがあります。
  • AAAA を公開する前に、IPv6 での待ち受け・許可ルール・証明書を確認します。
  • WordPress のIP制限やコードは、IPv6 のアドレスと /64 単位の割り当てを前提に見直します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲