ping6.net
移行

デュアルスタックネットワーキング:IPv4とIPv6の共存

IPv4とIPv6が共存するデュアルスタックネットワークの展開と管理方法を学びます。設定、トラブルシューティング、移行戦略をカバーします。

ping6.net2024年12月14日6 min read
IPv6デュアルスタックIPv4移行ネットワーキングトランジション

デュアルスタックネットワーキングとは#

デュアルスタックとは、同じネットワークインフラストラクチャでIPv4とIPv6の両方を同時に実行することを意味します。すべてのデバイスがIPv4アドレスとIPv6アドレスの両方を取得します。アプリケーションは、可用性と優先度に基づいて使用するプロトコルを自動的に選択します。

これは、ほとんどの組織に推奨される移行アプローチです。移行の週末やサービスの切り替えは必要ありません。IPv6を段階的に有効にしている間、IPv4は動作し続けます。既存のクライアントには中断がありません。IPv6対応のクライアントはネイティブ接続を取得します。自分のペースで移行できます。

実世界の採用はこれを反映しています。Googleの統計によると、ユーザーの40%以上がIPv6経由でサービスにアクセスしています。モバイルキャリア、クラウドプロバイダー、コンテンツ配信ネットワークなど、ほとんどの主要ネットワークは今日デュアルスタックで実行されています。もはや実験的ではありません。本番環境の標準です。

TL;DR - 要点まとめ

重要ポイント:

  • デュアルスタックはIPv4とIPv6を同時に実行 — 移行カットオーバー不要
  • アプリケーションは自動的にIPv6を優先(Happy Eyeballsアルゴリズム)し、高速IPv4フォールバック
  • 重要:両方のプロトコルに同一のセキュリティポリシーを適用(ファイアウォールルール、ACL)
  • DNSはデュアルスタックサービス用にAとAAAAレコードの両方を公開する必要がある
  • 両方のプロトコルを独立して監視 — IPv6障害はIPv4フォールバックの背後に隠れる可能性

ジャンプ: 設定例 | アドレス選択 | セキュリティ | トラブルシューティング

デュアルスタックの動作原理#

デュアルスタックネットワークでは、各インターフェイスが2つのネットワークスタックを持ちます。サーバーには、IPv4用の192.0.2.10とIPv6用の2001:db8::10がある可能性があります。両方のアドレスは独立して機能します。トラフィックは、クライアントとサーバーがネゴシエートする内容に応じて、どちらかのプロトコルで流れることができます。

┌──────────────────────────────────────┐
│   アプリケーション (curl、ブラウザ)    │
│    DNSを使用してアドレスを検索         │
├──────────────────────────────────────┤
│        TCP/UDP (非依存)               │
├───────────────────┬──────────────────┤
│   IPv4スタック     │   IPv6スタック    │
│   192.0.2.10      │   2001:db8::10   │
│   gw1経由ルート    │   gw2経由ルート   │
└───────────────────┴──────────────────┘
         │                   │
    IPv4ネットワーク      IPv6ネットワーク

ネットワーク層は別々のルーティングテーブルを維持します。IPv4パケットはIPv4ルートに従います。IPv6パケットはIPv6ルートに従います。互いに干渉しません。

アプリケーションの動作:Happy Eyeballs#

アプリケーションはプロトコルを手動で選択しません。オペレーティングシステムは、「Happy Eyeballs」(RFC 8305)と呼ばれるアルゴリズムを使用してプロトコル選択を処理します。これを理解することは、接続の問題をデバッグするのに役立ちます。

プロセス:

  1. アプリケーションがexample.comへの接続を要求
  2. DNSがA(IPv4)とAAAA(IPv6)レコードの両方を返す
  3. OSがIPv6接続を最初に試行
  4. 50〜250ms遅延後(実装によって異なる)、OSがIPv4接続を並行して開始
  5. 最初に完了した接続が勝利
  6. 結果が後続の接続のためにキャッシュされる

これにより、ユーザーはタイムアウトを待つことなく、利用可能な最速の接続を取得できます。IPv6が優先されますが、壊れたIPv6によって、数分の1秒を超えるユーザーに見える遅延が発生することはありません。

デュアルスタックの宛先に対してPingツールを使用して、この動作をテストします。IPv4とIPv6の応答時間を比較します。

DNSは両方のレコードタイプを返す#

デュアルスタックでは、DNSサーバーは同じホスト名のAレコードとAAAAレコードの両方を公開します:

$ dig example.com A +short
192.0.2.10
 
$ dig example.com AAAA +short
2001:db8::10

クライアントは両方のタイプをクエリします(またはIPv6のみのネットワークでDNS64合成を使用)。リゾルバは存在するレコードを返します。Aのみが存在する場合、クライアントはIPv4を使用します。両方が存在する場合、Happy Eyeballsが決定します。

設定例#

デュアルスタック設定は、最新のシステムでは簡単です。ほとんどのシステムは、SLAAC(ステートレスアドレス自動設定)またはDHCPv6による自動設定をサポートしています。

Linux:Netplan(Ubuntu)#

最新のUbuntuはネットワーク設定にNetplanを使用します。/etc/netplan/01-netcfg.yamlを編集します:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      dhcp6: true
      accept-ra: true

主要な設定:

  • dhcp4: true - DHCP経由でIPv4を取得
  • dhcp6: true - DHCPv6経由でIPv6を取得
  • accept-ra: true - SLAAC用のルーターアドバタイズメントを受け入れる

設定を適用します:

sudo netplan apply

両方のプロトコルを確認します:

ip addr show eth0
# "inet"(IPv4)と"inet6"(IPv6)の両方のアドレスを探す

Linux:NetworkManager(Fedora、RHEL、CentOS)#

NetworkManagerのコマンドラインインターフェイスを使用:

# 接続で両方のプロトコルを有効化
nmcli connection modify "Wired connection 1" ipv4.method auto
nmcli connection modify "Wired connection 1" ipv6.method auto
 
# 変更を適用
nmcli connection up "Wired connection 1"
 
# 設定を確認
nmcli device show eth0

静的デュアルスタック設定の場合:

# 静的IPv4とIPv6を設定
nmcli connection modify "Wired connection 1" \
  ipv4.method manual \
  ipv4.addresses 192.0.2.10/24 \
  ipv4.gateway 192.0.2.1 \
  ipv6.method manual \
  ipv6.addresses 2001:db8::10/64 \
  ipv6.gateway 2001:db8::1
 
nmcli connection up "Wired connection 1"

Windows 10/11#

Windowsはデフォルトでデュアルスタックを有効にします。確認または再設定するには:

GUIメソッド:

  1. Win + Rを押し、ncpa.cplと入力し、Enterを押す
  2. ネットワークアダプターを右クリック → プロパティ
  3. 両方のプロトコルがチェックされていることを確認:
    • インターネットプロトコルバージョン4(TCP/IPv4)
    • インターネットプロトコルバージョン6(TCP/IPv6)
  4. 必要に応じて各プロトコルのプロパティを設定

PowerShellメソッド:

# 現在の設定を確認
Get-NetIPAddress -InterfaceAlias "Ethernet"
 
# 両方のプロトコルの自動設定を有効化
Set-NetIPInterface -InterfaceAlias "Ethernet" -Dhcp Enabled
Set-NetIPInterface -InterfaceAlias "Ethernet" -AddressFamily IPv6 -Dhcp Enabled
 
# または静的アドレスを設定
New-NetIPAddress -InterfaceAlias "Ethernet" `
  -IPAddress 192.0.2.10 -PrefixLength 24 -DefaultGateway 192.0.2.1
 
New-NetIPAddress -InterfaceAlias "Ethernet" `
  -IPAddress 2001:db8::10 -PrefixLength 64 -DefaultGateway 2001:db8::1
 
# 確認
Get-NetIPAddress -InterfaceAlias "Ethernet"
Get-NetRoute -InterfaceAlias "Ethernet"

radvdを使用したLinuxルーター#

Linuxシステムをデュアルスタックルーターとして設定するには、転送を有効にし、ルーターアドバタイズメントデーモンを実行します。

IP転送を有効化:

# 一時的
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
 
# 恒久的
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

radvdをインストールして設定:

sudo apt install radvd  # Ubuntu/Debian
# または
sudo dnf install radvd  # Fedora/RHEL

/etc/radvd.confを編集:

interface eth0
{
    AdvSendAdvert on;
    MinRtrAdvInterval 3;
    MaxRtrAdvInterval 10;
 
    prefix 2001:db8::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    };
 
    RDNSS 2001:4860:4860::8888 2001:4860:4860::8844
    {
    };
};

サービスを開始:

sudo systemctl enable radvd
sudo systemctl start radvd

eth0ネットワーク上のクライアントは、ルーターアドバタイズメントを受信し、SLAAC経由でIPv6アドレスを自動的に設定します。

Cisco IOSルーター#

Ciscoルーターでデュアルスタックを設定:

! IPv6ルーティングを有効化
ipv6 unicast-routing
 
! WANインターフェイスを設定(デュアルスタック)
interface GigabitEthernet0/0
 description WAN
 ip address dhcp
 ipv6 address autoconfig
 ipv6 enable
 no shutdown
 
! LANインターフェイスを設定(デュアルスタック)
interface GigabitEthernet0/1
 description LAN
 ip address 192.168.1.1 255.255.255.0
 ipv6 address 2001:db8:1::1/64
 ipv6 enable
 ipv6 nd prefix 2001:db8:1::/64
 ipv6 nd ra interval 10
 no shutdown
 
! デフォルトルートを設定
ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0
ipv6 route ::/0 GigabitEthernet0/0
 
! 設定を確認
show ip interface brief
show ipv6 interface brief

SLAAC vs DHCPv6

ルーターアドバタイズメントはSLAACを有効にし、DHCPサーバーなしでクライアントアドレスを自動設定します。より詳細な制御(DNSサーバー、NTP、ドメイン名)については、SLAACと並行してDHCPv6を使用します。ほとんどのネットワークは簡単のためSLAACを実行します。

アドレス選択ルール#

デュアルスタッククライアントがデュアルスタックサーバーに接続する場合、使用するプロトコルをどのように選択するのでしょうか?RFC 6724は、送信元アドレスと宛先アドレスの選択アルゴリズムを定義しています。

デフォルトの優先順位#

アルゴリズムは、これらのルール(簡略化)に基づいてアドレスを評価します:

  1. 同じスコープを優先 - リンクローカルからリンクローカル、グローバルからグローバル
  2. 一致するアドレスファミリーを優先 - 送信元がIPv6の場合、IPv6宛先を優先
  3. 高い優先順位を優先 - IPv6はIPv4よりもデフォルトの優先順位が高い
  4. ネイティブトランスポートを優先 - 可能な場合はトンネリングを避ける
  5. 小さいスコープを優先 - より具体的なルートを優先
  6. 最長一致プレフィックスを使用 - より具体的なルートが勝利

デフォルトでは、IPv6がIPv4よりも優先されます。これは意図的です。IPv6の採用を促進し、より良いパフォーマンスを提供します(NATオーバーヘッドなし)。

IPv6が通常勝つ理由#

デュアルスタッククライアントとデュアルスタックサーバーの場合:

クライアントが持っている:192.0.2.100と2001:db8::100
サーバーが持っている:192.0.2.10と2001:db8::10
DNSが返す:A 192.0.2.10、AAAA 2001:db8::10

選択アルゴリズム:

  1. 両方のアドレスがグローバルスコープ → 同点
  2. クライアントがIPv4とIPv6の両方の送信元アドレスを持っている → 同点
  3. IPv6の優先順位(::ffff:0:0/96 = 35、::/0 = 40) > IPv4の優先順位(::ffff:0:0/96 = 35) → IPv6が勝利

結果:IPv6接続が壊れていない限り、接続はIPv6を使用します。

ポリシーテーブルの設定#

ポリシーテーブルを編集することで、デフォルトの動作を変更できます。これはめったに必要ありませんが、特定の要件に役立ちます。

Linux(Glibc):

/etc/gai.conf(アドレス選択ポリシー)を編集:

# IPv4をIPv6より優先(非推奨)
precedence ::ffff:0:0/96  100
precedence ::/0            50

Windows:

# 現在のポリシーテーブルを表示
Get-NetIPv6Protocol | Format-List
 
# IPv4を優先(非推奨)
Set-NetIPv6Protocol -PreferredProtocol IPv4
 
# デフォルトにリセット(IPv6を優先)
Set-NetIPv6Protocol -PreferredProtocol IPv6

IPv4優先を強制しないでください

IPv4を優先するようにデフォルトをオーバーライドすると、デュアルスタックの目的が損なわれます。ポリシー変更で隠すのではなく、壊れたIPv6接続を修正してください。IPv6のみのネットワーク(モバイルキャリア)のユーザーは、パフォーマンスの低下または障害が発生します。

IPv4が優先される場合#

IPv4は、これらのシナリオで選択されます:

  1. IPv6接続なし - IPv6ルーティングが壊れている場合、Happy EyeballsはIPv4にフォールバック
  2. 6to4またはTeredo - トンネル化されたIPv6は、ネイティブIPv4よりも優先順位が低い
  3. 明示的なアプリケーション選択 - アプリケーションがIPv4を強制(悪い習慣ですが発生します)
  4. 変更されたポリシーテーブル - 管理者が手動で優先順位を変更

「IPv4が優先される」とラベル付けされたほとんどの問題は、実際には壊れたIPv6接続がフォールバックをトリガーしています。

DNSの考慮事項#

デュアルスタックDNS設定は重要です。DNSの設定ミスは、接続遅延、障害、または予期しないプロトコル選択を引き起こします。

両方のレコードタイプの公開#

すべてのデュアルスタックサービスについて、AレコードとAAAAレコードの両方を公開します:

example.com.    300    IN    A        192.0.2.10
example.com.    300    IN    AAAA     2001:db8::10

IPv6が機能していない場合は、AAAAを公開しないでください。クライアントは最初にIPv6を試行し、失敗し、遅延後にIPv4にフォールバックします。これにより、ユーザーエクスペリエンスが低下します。

解決順序#

最新のDNSリゾルバは、AとAAAAを同時に、または最小限の遅延でクエリします。リゾルバは両方のタイプを返し、クライアントのOSがアドレス選択を実行します。

一部の古いまたは設定ミスのリゾルバは、順次クエリします(最初にA、次にAAAA)。これにより遅延が追加されますが、機能は壊れません。

1つのプロトコルが失敗した場合の動作#

IPv6が到達可能だがサービスがIPv6で応答しない場合:

  1. クライアントがIPv6接続を試行
  2. 接続がタイムアウトまたは拒否される
  3. Happy EyeballsがIPv4を並行して、または短い遅延の後に試行
  4. IPv4接続が成功

合計遅延:通常50〜250msプラス接続タイムアウト(最悪の場合1〜3秒)。目立ちますが、壊滅的ではありません。

より良い解決策:IPv6接続を修正するか、IPv6が機能するまでAAAAレコードを削除します。

TTLの調整#

AレコードとAAAAレコードに同じTTLを設定します。TTLの不一致は、一貫性のないキャッシングと奇妙なクライアントの動作を引き起こします。

# 良い
example.com.    300    IN    A        192.0.2.10
example.com.    300    IN    AAAA     2001:db8::10
 
# 悪い - TTLが一致しない
example.com.    300    IN    A        192.0.2.10
example.com.    3600   IN    AAAA     2001:db8::10

IPアドレスを変更する必要がある場合は、事前に両方のレコードのTTLを下げます。古いTTLが期限切れになるのを待ってから、IPを変更し、通常のTTLを復元します。

一般的な問題と解決策#

問題原因解決策
接続確立が遅いIPv6タイムアウト後、IPv4フォールバックIPv6接続を修正するか、AAAAレコードを削除
断続的な接続障害1つのプロトコルが壊れている、Happy Eyeballsが競合curl -4curl -6で両方のプロトコルを個別にテスト
アプリケーションがIPv4のみを使用ハードコードされたIPv4、古いライブラリ、または0.0.0.0にバインドアプリケーション設定を確認、::にバインドするようコードを更新
IPv6デフォルトルートなしルーターがRAを送信していない、またはDHCPv6がルートを提供していないルーター設定を確認、ip -6 route showを確認
WindowsがIPv4を優先TeredoまたはEto4がアクティブ(トンネリング)トンネルインターフェイスを無効化:netsh interface teredo set state disabled
ファイアウォールがIPv6をブロックIPv6ルールが設定されていない、または制限的すぎる両方のプロトコルに同じセキュリティポリシーを適用
プライバシーアドレスの変更が接続を中断RFC 4941一時アドレスのローテーションサーバーには安定したアドレス、クライアントには一時アドレスを使用
パスMTU検出が失敗ICMPv6「パケット過大」がブロックされているファイアウォールルールでICMPv6タイプ2を許可

詳細なトラブルシューティング:接続が遅い#

ほとんどのデュアルスタックの苦情は、「遅い」接続に関するものです。これは通常、壊れたIPv6がフォールバック遅延をトリガーしていることを意味します。

診断:

# IPv4のみをテスト
curl -4 -w "Time: %{time_total}s\n" -o /dev/null -s https://example.com
 
# IPv6のみをテスト
curl -6 -w "Time: %{time_total}s\n" -o /dev/null -s https://example.com
 
# デフォルト(デュアルスタック)をテスト
curl -w "Time: %{time_total}s\n" -o /dev/null -s https://example.com

-6が失敗またはタイムアウトし、-4が成功し、デフォルトで遅延が表示される場合、IPv6が壊れています。

修正オプション:

  1. IPv6を修正 - 推奨される解決策。ルーティング、ファイアウォールルール、またはISP接続をデバッグします。
  2. AAAAレコードを削除 - 一時的な回避策。IPv6を修正するまでサービスはIPv4のみになります。
  3. サーバーでIPv6を無効化しないでください - これにより問題が隠され、本当の問題が隠されます。

デュアルスタックネットワークの監視#

測定しないものは管理できません。デュアルスタックネットワークでは、両方のプロトコルを個別に監視する必要があります。

両方のプロトコルのテスト#

接続を個別にテストして、どのプロトコルが失敗するかを特定します:

# IPv4経由でPing
ping -4 google.com
 
# IPv6経由でPing
ping -6 google.com
 
# IPv4経由でTraceroute
traceroute -4 google.com
 
# IPv6経由でTraceroute
traceroute -6 google.com
 
# 特定のプロトコルを使用したCurl
curl -4 https://example.com
curl -6 https://example.com

これらのテストを監視スクリプトに組み込みます。もう一方が機能していても、1つのプロトコルが失敗した場合はアラートを出します。

追跡するメトリクス#

これらのデュアルスタック固有のメトリクスを監視します:

  1. プロトコル分布 - IPv4とIPv6を使用するトラフィックの割合
  2. 接続成功率 - プロトコルごと、失敗した接続を追跡
  3. 応答時間 - IPv4とIPv6のレイテンシを比較
  4. BGPプレフィックス - IPv4とIPv6のルートの両方がアドバタイズされていることを確認
  5. DNSクエリ比率 - AとAAAAクエリレートを追跡
  6. ICMPv6エラー率 - スパイクはルーティングまたはMTU問題を示します

これらのメトリクスを時間の経過とともにトレンドすることで、採用の進捗を示し、ユーザーに影響が出る前に問題を浮き彫りにします。

プロトコル障害に関するアラート#

各プロトコルに個別のアラートを作成します:

  • IPv4デフォルトゲートウェイ到達不能
  • IPv6デフォルトゲートウェイ到達不能
  • AAAAレコードが公開されているがIPv6サービスが到達不能
  • IPv6接続タイムアウトのスパイク
  • 非対称ルーティング(IPv6経由で送信されたトラフィック、IPv4経由で返される)

一般的な「サービスダウン」アラートに依存しないでください。プロトコル固有の可視性が必要です。

テスト用ツール#

これらのツールを使用してデュアルスタック動作を確認します:

  • ping6.netツール - さまざまな視点からIPv4とIPv6の接続性をテスト
  • curl -4/-6フラグ付き - HTTP(S)テスト用のプロトコル選択を強制
  • dig +short A/AAAA - DNSが両方のレコードタイプを返すことを確認
  • tcpdump/wireshark - プロトコル固有のトラフィックをキャプチャして分析
  • mtr -4 / mtr -6 - パスの違いを示す継続的なtraceroute

PingツールTracerouteツールは、IPv4またはIPv6の強制をサポートしているため、デュアルスタックのテストが簡単です。

セキュリティの考慮事項#

デュアルスタックは攻撃面を拡大します。両方のプロトコルに同等のセキュリティポリシーが必要です。

両方のプロトコルのファイアウォールルール#

最も一般的なデュアルスタックセキュリティの間違い:IPv6ファイアウォールルールの設定を忘れること。管理者はIPv4 ACLの構築に何年も費やし、フィルタリングなしでIPv6を有効にします。攻撃者はこれを好みます。

両方のプロトコルに同じセキュリティポリシーを適用:

IPv4ポリシーが次の場合:

すべてのインバウンドを拒否、以下を除く:
  - 管理ネットワークからのTCP 22(SSH)
  - どこからでもTCP 443(HTTPS)
  - ICMPエコー要求(ping)

IPv6ポリシーは次のようにする必要があります:

すべてのインバウンドを拒否、以下を除く:
  - 管理ネットワークからのTCP 22(SSH)
  - どこからでもTCP 443(HTTPS)
  - ICMPv6タイプ1,2,3,4,128,129(必須タイプ)
  - ICMPv6タイプ133-137(近隣探索、ローカルのみ)

ip6tablesnftables、または商用ファイアウォールなどのツールは、デュアルスタックをサポートします。両方のアドレスファミリーを設定します。

一般的な間違い:IPv4を保護するがIPv6を忘れる#

組織はコンプライアンスやテストのためにIPv6を有効にしてから、それがアクティブであることを忘れます。攻撃者はIPv6範囲をスキャンして、フィルタリングされていないホストを探します。

シナリオ例:

  1. 管理者が制限的なIPv4ファイアウォールを設定、HTTPSのみが公開される
  2. 「将来の準備」のためにルーターでIPv6が有効化される
  3. サーバーがSLAAC経由でIPv6アドレスを取得
  4. IPv6ファイアウォールルールが設定されていない
  5. 攻撃者が2001:db8::/64をスキャンし、公開されたSSH、データベース、内部サービスを見つける

予防:

  • IPv4と同様にIPv6ファイアウォールルールを監査
  • 両方のプロトコルでデフォルト拒否
  • IPv6のみのスキャンツールでテスト
  • 予期しないIPv6接続を監視

重要なセキュリティギャップ

ファイアウォールを設定せずにIPv6を有効にすることは、フィルタリングなしでサーバーを直接インターネットに配置することと同等です。AAAAレコードを公開する前に、常にIPv6セキュリティルールを設定してください。

クライアント用のプライバシー拡張#

SLAACは、インターフェイスのMACアドレス(EUI-64形式)を使用してアドレスを生成します。これにより、ネットワーク全体で追跡可能な安定した識別子が作成されます。これは、モバイルクライアントにとってプライバシーの問題です。

プライバシー拡張(RFC 4941)は、定期的にローテーションするランダムな一時アドレスを生成します。クライアントは、着信接続用の安定したアドレスを維持しながら、発信接続には一時アドレスを使用します。

プライバシー拡張を有効化:

Linux:

# ステータスを確認(2 = 一時アドレスを優先)
sysctl net.ipv6.conf.all.use_tempaddr
 
# 有効化
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2
 
# 恒久的にする
echo "net.ipv6.conf.all.use_tempaddr = 2" | sudo tee -a /etc/sysctl.conf

Windows:

プライバシー拡張は、Windows 7以降でデフォルトで有効になっています。確認:

netsh interface ipv6 show privacy

macOS:

デフォルトで有効。設定は不要です。

**重要:**サーバーでプライバシー拡張を有効にしないでください。一時アドレスはDNS、監視、ファイアウォールルールを壊します。クライアントデバイスでのみ使用してください。

IPv6のみを検討すべき場合#

デュアルスタックは移行戦略であり、最終目標ではありません。最終的には、ネットワークはIPv6のみに移行し、運用を簡素化し、IPv4アドレスの不足を解消します。

モバイルキャリアは既にIPv6のみを使用#

主要なモバイルキャリア(T-Mobile USA、Reliance Jio、EE UK)は、IPv6のみのコアネットワークを実行しています。必要に応じて464XLAT(NAT64 + CLAT)を使用してIPv4接続を提供します。

ユーザーは気づきません。電話はIPv6アドレスを持ち、レガシーIPv4のみのアプリは変換を通じて透過的に機能します。

IPv4アクセス用のNAT64/DNS64#

IPv6のみのネットワークは、NAT64とDNS64を使用してIPv4サービスにアクセスします:

  1. クライアントがIPv4のみのサービスのDNSをクエリ
  2. DNS64がNAT64プレフィックスを使用してAAAAレコードを合成:64:ff9b::192.0.2.10
  3. クライアントが合成されたアドレスにIPv6トラフィックを送信
  4. NAT64ゲートウェイがIPv4に変換、サービスに転送
  5. 応答がIPv6に変換される

これにより、IPv6のみのクライアントは、デュアルスタックを実行せずに残りのIPv4インターネットに到達できます。

IPv6のみを展開する場合:

  • モバイルネットワーク(既に標準)
  • 新しいデータセンター構築(IPv4を完全に回避)
  • レガシー要件のないグリーンフィールド展開
  • クライアントとアプリケーションを完全に制御できる組織

デュアルスタックを維持する場合:

  • 既存のエンタープライズネットワーク(IPv4依存関係の排除には何年もかかる)
  • レガシーハードウェア/ソフトウェアを使用するネットワーク
  • すべてのクライアントを制御できない環境
  • インターネット向けサービス(デュアルスタックが到達可能性を最大化)

簡素化のメリット#

2つではなく1つのプロトコルを実行すると、以下が削減されます:

  • ルーティングテーブルサイズ(2つではなく1つのテーブル)
  • ファイアウォールの複雑さ(2つではなく1つのポリシー)
  • IPアドレス管理のオーバーヘッド
  • 監視とアラートの複雑さ

しかし、これらのメリットは、IPv4を完全に排除した後にのみ実現されます。デュアルスタックは、IPv4のみまたはIPv6のみよりも複雑ですが、ほとんどのネットワークにとって唯一の実用的な移行パスです。

関連記事#

デュアルスタックネットワークをテスト

-4および-6フラグを使用したPingツールで両方のプロトコルを個別にテストし、Tracerouteツールでルーティングパスを確認します。

よくある質問#

デュアルスタックは帯域幅の使用量を2倍にしますか?

いいえ。トラフィックは各接続にIPv4またはIPv6のいずれかを使用し、両方を使用しません。デュアルスタックとは、両方のプロトコルが利用可能であることを意味しますが、個々の接続は1つを選択してそれに固執します。

一部のプロトコル(BGPなど)は、両方のアドレスファミリーでルーティング情報を交換する可能性がありますが、これは無視できるオーバーヘッドです。

デュアルスタックネットワークがIPv4のみよりも遅いのはなぜですか?

そうあるべきではありません。パフォーマンスの低下は通常、壊れたまたは設定ミスのIPv6がIPv4にフォールバックする前に接続タイムアウトをトリガーしていることを示します。curl -4curl -6で各プロトコルを個別にテストして、どちらが失敗しているかを特定します。

IPv6が遅いが機能している場合は、ルーティングの非効率性またはISPピアリングの問題を確認してください。IPv6パスは、IPv4パス(まだ)ほど最適化されていない場合があります。

NATでデュアルスタックを実行できますか?

はい。IPv4はNATを使用でき、IPv6はNATなしでグローバルアドレスを使用します。これは、エンタープライズおよびホームネットワークで一般的です。ルーターは、IPv6をそのまま通過させながら、プライベートIPv4アドレス(192.168.x.x、10.x.x.x)を変換します。

IPv6はNATを必要としません。セキュリティにNATに依存する代わりに、ファイアウォールを使用してください。

使用していない場合、IPv6を無効にする必要がありますか?

いいえ。Microsoft、Apple、Linuxディストリビューションはすべて、積極的に使用していなくてもIPv6を有効にしたままにすることを推奨しています。IPv6を無効にすると、DirectAccess、HomeGroup、Windows Updateなどの機能が壊れ、DNS解決の遅延が発生する可能性があります。

本当に必要ない場合、有効にしていても無害です。後で必要になるかもしれない場合は、有効にしておくことで再設定の労力を節約できます。

トラフィックがIPv4とIPv6のどちらを使用しているかを知る方法は?

次のコマンドでアクティブな接続を確認します:

# Linux/macOS
netstat -tuln | grep -E '(tcp|udp)'
 
# Windows PowerShell
Get-NetTCPConnection | Select-Object LocalAddress,RemoteAddress
 
# またはtcpdumpを使用して実際のパケットを確認
sudo tcpdump -n -i eth0 'ip6 or ip'

IPv6アドレスは長く、コロンを含みます。IPv4アドレスはドット区切りの10進数です。ほとんどの監視ツールは、プロトコル別にトラフィックにラベルを付けます。

ping6.netにアクセスして、サイトへの到達に使用しているプロトコルを確認してください。