世界を動かす技術を、日本語で。

IPv4接続なしでインターネットを利用する

概要

  • 電源障害 後、ISPのIPv4接続が利用不可となる事象発生
  • IPv6接続 は正常、しかし多くのWebサイトが非対応でアクセス不可
  • Hetzner VPS を活用し、WireGuardトンネルでIPv4通信を復旧
  • NAT/CG-NAT/IPv6 の基礎と実践的な設定例を解説
  • Linux環境 での具体的な対策と構成例の紹介

電源障害とIPv4接続障害

  • ある朝、 ブレーカーが落ちて停電、復旧後もIPv4経由の通信が不能となる事象
  • GitHub等多くのWebサイト に接続できず、GoogleやMetaなど一部のみ利用可能
  • ping -6やtraceroute を利用し、IPv6は正常でIPv4のみ障害と特定
  • 問い合わせの結果、 CG-NAT(キャリアグレードNAT) の不具合が原因と判明
  • ISPの対応待ち は数日必要、業務や学業に支障が出るため早急な解決が必須

NATとCG-NATの仕組み

  • IPv4アドレス枯渇 問題への対策としてNATが利用される現状
    • 家庭内の複数端末が 1つのグローバルIPv4アドレス を共有
    • ルーターが 送信元IPアドレスとポート番号 を変換・管理
    • conntrackツール でNATテーブルの確認が可能
  • CG-NAT はISP側でさらにNATを重ねる技術
    • 各家庭ルーターの更に上位で 複数家庭をまとめてNAT
    • ポート開放やサーバ公開時の障壁
  • NATトラバーサル や回避策についてはTailscaleの解説記事が非常に有用

IPv6の特徴とNAT不要性

  • IPv6アドレス空間 の膨大さ(128bit、約3.4×10^38個)によりNAT不要
    • 一般家庭でも /64サブネット が割り当てられ、端末ごとに固有のグローバルアドレス
    • NATなし でインターネットから直接アクセス可能
  • 逆に ファイアウォール構成 の重要性が増す
    • 任意の外部からの接続を防ぐため、適切なルール設定が必須
  • IPv6非対応サイト が多く、IPv4通信の復旧が必要となる場合が多い

Hetzner VPSとWireGuardによるIPv4トンネリング

  • Hetzner VPS (IPv4/IPv6両対応)を既に所有していたことが幸い

  • WireGuard をVPSと自宅Linuxに導入し、 IPv6経由でトンネル を構築

    • VPS上で Arch Linux 環境を利用(HetznerはISOマウントにも対応)
  • WireGuardの設定例 を提示

    • サーバ側:IPv4/IPv6両方のアドレス付与、NAT設定、転送有効化
    • クライアント側:VPSのIPv6アドレス指定、全トラフィックをトンネル経由に設定
  • NATの細かい設定 (MASQUERADEとSNATの使い分け)や、 IPv6での直接アドレス指定 の利点も解説

    • 直接アドレス指定 :VPSで/64ブロックを持っていればNAT不要、各端末がグローバルIPv6を持てる
    • NAT利用時 :Unique Local Address(ULA)で内部アドレス割当、ip6tablesでSNAT/MASQUERADE設定

まとめと教訓

  • ISP障害時でもIPv6が活用できれば復旧策は多い
  • VPSとWireGuard の組み合わせで、 IPv6しか使えない環境でもIPv4通信が可能
  • NATやCG-NAT、IPv6の仕組み を理解しておくことの重要性
  • セキュリティ対策 としてファイアウォール設定の見直しも忘れずに

Hackerたちの意見

誰かがこれに遭遇したら、SSHプロキシの設定はすごく簡単だよ。ssh -D 8080 user@hostname ってやるだけ。接続ができたら、ブラウザの設定でlocalhost:8080をSOCKSプロキシとして使うようにすればOK。

同じアドバイスをしようと思ってたところだよ。これは一時的な問題に対するずっとシンプルな解決策だし、プロキシを使いたいときの永久的なツールでもある。これを使うには、sshd_configで「AllowTcpForwarding」を有効にするのを忘れないでね。

公共のWi-Fiを使うときはいつもこうしてるよ。VPNにお金を払う必要もないし、信頼する必要もないから、すべてを自分のinfomaniakサーバーにソックスフォワードしてる。

ちょっと誤解を招くタイトルだね。これは「VPSを通じてIPv6トンネル経由でIPv4インターネットにアクセスする」って感じ。4in6とも呼ばれてるし、面白いけどね!うちのISPでは、IPv4で何か壊すと、IPv6で壊すのとは全然違うサポートの問題が出ることがわかる。IPv4が壊れると、ざっくり言うと、結構厳しい「ダウン」状態になる。みんな不満はあるけど、少なくともシンプルなんだよね。IPv6が壊れると、変な感じになって部分的にダウンするから、ユーザーには部分的な障害や、フォールバックによる遅いスタートが見える。特に、ゲートウェイが存在しないのにIPv6があると思ってるときはね。

自分の経験と同じだな。IPv6の問題はトリアージや再現が難しくて、よく「うちでは動くのに」みたいなことになる。

確かにIPv4の長い尾はあるけど、最後にIPv4が家で壊れた時、妻は全然気づかなかったよ。GoogleやFacebook、Apple/iCloud、CloudFlareがホストしてるサイトは全部IPv6で動いてたからね。

最後にIPv4がダメになった時、Githubが使えなくなったから気づいたよ。最近はほとんどの消費者向けウェブサイトがIPv6で動いてるからね。とはいえ、ルーターがIPv4のDNSサーバーしか設定されてなかった人は完全にダウンしてたけど。もしMicrosoftが無能なことをやめてくれたら、私の一番の心配はルーターに割り当てたmDNSホスト名を思い出すことだったな。IPv4が戻ったか確認するためにログインしたいから。

ほとんどのISPは、まだIPv6を完全にブロックしてるよ。小規模なビジネスは一度IPv6を試して、その後AAAAレコードを更新するのを忘れちゃうみたいで、ユーザーにはお気に入りのニッチなものが動いているように見えるけど、実際には支払っているサービスでは動かないから問題が起こるんだ。ちょっと変な問題だよね。IPv4がいつか消え去ることを期待する以外に良い解決策があるかはわからない。Happy eyeballsがこれを解決するはずだったけど、問題はアプリケーション層で発生することが多くて、アプリケーションが何でもできるから、一般的なプロトコルで解決するのは難しいんだ。私がスムーズにするために妥協しているのは、ネットワークでIPv6を有効にして、すべてのブラウザでIPv6 DNSを無効にすることなんだけど、これはあんまり満足できないね。

AppleのApp Storeのルールで気に入ってるのは、すべてのアプリがIPv6専用ネットワークで動くことを求めているところ。これ、何年も前からあるルールなんだ。開発者として初めてこれに直面したときはちょっと驚いたけど、ユーザーとしてはあって嬉しい。

アプリを使っていれば、githubはIPv6でアクセスできるの?

そうだね、でもサーバーにIPv6アドレスは必要ないよ。

その神話のようなIPv6専用インターネットユーザー、実際に存在するんだね :) すごいネットワークエンジニアリングだ。昔、IPv4専用の接続の中でIPv6の作業をするために、そんな感じのが必要だったことがある。サーバーを完全にコントロールできるなら、もっと限定的だけど早い解決策があるよ。ssh -D 1080 -N myserver でSOCKS5プロキシを設定して、ブラウザをそれに合わせた。システム全体で設定できるかもしれないけど、元のSSH接続が壊れちゃうか心配だな :)

Hacker Newsで議論の続きを見る