【AWS WAF】許可 IP なのに繋がらない!原因は CloudFront の「IPv6 有効化」でした

  • URLをコピーしました!
目次

はじめに

「AWS WAF で特定の IP アドレス(IPv4)のみ許可する設定入れた」 「自分のグローバル IP を確認し、間違いなく許可リスト(IP Set)に登録した」

よし、これで接続できるはず……とブラウザを叩いた瞬間、返ってきたのは非情な 403 Forbidden

「えっ、なんで? IP 合ってるよね?」

何度設定を見直してもミスはない。でも繋がらない。 そんな謎のトラブルに遭遇したことありませんか?

調査の結果、犯人は WAF の設定ミスではなく、「IPv6」「Windows の仕様」 の組み合わせにありました。

この記事では、なぜ「IPv4 を許可しているのにブロックされるのか」というメカニズムと、CloudFront 環境でこの問題を解決する(IPv6 を無効化する)手順について解説します。

この記事でわかること
  • WAF の IP 制限がすり抜けてしまう原因(IPv6 優先の罠)
  • Windows クライアントの通信仕様について
  • CloudFront で IPv6 を無効化して、強制的に IPv4 で接続させる方法

原因: Windowsは「IPv6」を優先して使いに行く

トラブルの原因は、「CloudFront の仕様」「Windows の仕様」 が組み合わさった結果、意図せず IPv6 通信が発生していた ことにありました。

トラブル発生のメカニズム

一連の流れは以下のようになります。

STEP
CloudFront はデフォルトで「IPv6 有効」

CloudFront ディストリビューションを作成すると、初期設定で IPv6 が有効(Enable)になっています。 そのため、DNS 名前解決を行うと、IPv4 アドレス(Aレコード)だけでなく、IPv6 アドレス(AAAA レコード) も応答します。

STEP
クライアント環境の IPv6 対応

最近のインターネット回線(IPoE/v6プラスなど)や、テザリング環境では、PC に IPv6 アドレスが割り当てられていることが一般的です。

STEP
OS は「IPv6」を優先する

ここが最大のポイントです。Windows 10 や 11 などの現代的な OS は、「通信相手が IPv6 に対応しているなら、IPv4 よりも IPv6 を優先して使う」 という仕様(RFC 3484/6724)になっています。

つまり、あなたがブラウザに URL を打ち込んだ瞬間、Windows は裏側で「おっ、IPv6 で行けるやん! じゃあ新しい方の IPv6 で行こう!」と勝手に判断していたのです。

WAF の穴

ここで WAF の設定との不整合(穴)が生じます

あなたの設定

WAF の許可リスト(IP Set)には、自分の IPv4 アドレス だけを登録している。

実際の通信

PC は IPv6 でアクセスしてくる。

WAF から見ると、やってきた通信の送信元 IP は「登録されていない IPv6 アドレス」です。 当然、許可リストにはマッチしないため、WAF ルールに従って通信は ブロック(Block) されてしまいます。

これが、「IPv4 は許可しているのに繋がらない」現象の正体です。

具体的な通信フロー

対処法: CloudFront で IPv6 を無効化する

原因が「勝手に IPv6 で接続してしまうこと」であれば、対策はシンプルです。 接続先である CloudFront 側で IPv6 を無効化 してしまえばよいのです。

サーバー側が IPv6 に対応していなければ、クライアント(OS)は諦めて、大人しく IPv4 で接続しに来てくれます。

設定手順

設定は AWS マネジメントコンソールから数クリックで行えます。

  1. CloudFront コンソールを開き、対象のディストリビューションを選択します。
  2. 「General」 タブを開き、「Edit」 をクリックします。
  3. 設定項目の中にある 「Enable IPv6」 のチェックを 外します(OFF にする)
  4. 最下部の 「Save changes」 をクリックして保存します。

保存後、CloudFront のステータスが Deploying から Deployed に変われば反映完了です。 これで、DNS の応答から AAAA レコード(IPv6 アドレス)が消え、クライアントは必ず IPv4 で接続するようになります。

補足: WAF で IPv6 を許可する方法は?

「IPv6 を無効化せずに、WAF 側で IPv6 アドレスを許可すればいいのでは?」と思われるかもしれません。 もちろん技術的には可能ですが、企業ユースの IP 制限(社内からのアクセスのみ許可など)では、IPv6 の許可は運用難易度が高い ケースが多いです。

IP アドレスが変動しやすい

家庭用回線やスマートフォンの IPv6 アドレスは、プロバイダの割り当てによって頻繁に変わることがあります。

アドレスが長くて管理が大変

IPv4 に比べて桁数が多く、範囲指定(CIDR)の計算も複雑になりがちです。

そのため、「固定のグローバル IPv4 アドレス」を持っている環境であれば、今回のように 「あえて IPv6 を無効化して、IPv4 に一本化する」 のが、最も確実で管理しやすい解決策となります。

まとめ

本記事では、AWS WAF で「許可された IPv4 から接続しているのにブロックされる」事象について解説しました。

原因

Windows などの OS は、IPv6 が使える環境では IPv6 を優先 して使おうとする。

WAF の穴

WAF の許可リストに IPv4 しか書いていないと、IPv6 で来た通信は「許可外」として弾かれる。

対策

CloudFront の 「Enable IPv6」 を無効化し、強制的に IPv4 で通信させる。

最近は、意図しなくてもクライアント側が IPv6 対応(デュアルスタック)になっていることが当たり前になってきました。 「IP 制限がなぜか効かない!」という時は、設定ミスを疑う前に 「プロトコル(v4/v6)の違い」 を疑ってみてください。

以上、最後までお読みいただきありがとうございました。


よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次