2321 words
12 minutes
wwwだけ繋がらない。CloudflareのDNSを疑い続けたら、犯人はWi-Fiだった

Cloudflare Pagesで公開しているサイトに独自ドメインを設定した。

example.com 自体はすでに表示できている。

次にやりたかったのが、

www.example.com
↓ 301
example.com

という、よくあるwwwなしへの統一。

まあCNAMEを追加して、Cloudflareでリダイレクト設定すれば終わるやろ。

と思っていた。

終わらなかった。

ちなみに、解決方法や確認ポイントだけサクッと見たい場合は、HowTo版にまとめている。

→ Cloudflare Pagesでwww→apexへリダイレクトする設定方法

設定手順だけ抜き出してまとめているので、「Wi-Fiが犯人とかはええねん、設定だけ教えてくれ」という場合はこちらへ。

wwwのカスタムドメインがずっと「検証中」#

まずCloudflare Pagesのカスタムドメインに、

www.example.com

を追加した。

Cloudflareからは、

名前: www
ターゲット: xxxx.pages.dev

というCNAMEを追加するように言われる。

DNSを見ると、CNAMEは設定したはず。

ところがPages側はずっと、

検証中

から変わらない。

「Proxyが悪いんかな?」

と思って、ProxiedからDNS onlyに変えてみたりもした。

変わらない。

「DNSレコードを確認」も何度か押した。

変わらない。

この辺から、最初は簡単なwww対応だったはずなのに、だんだん雲行きがCloudflare色になってきた。

DNS一覧を見たら、wwwにNSレコードがいた#

DNSレコードをwwwで絞り込んでみた。

すると、妙なものが見つかった。

www.example.com NS dns1.onamae...
www.example.com NS dns2.onamae...

wwwにNSレコードが2ついる。

今回やりたいのは、

www.example.com
↓
Cloudflare Pages

なので、ここに昔のお名前.com向けのNSがいるのはどう考えても気になる。

この2つを削除。

そのうえで改めて、

Type: CNAME
Name: www
Target: xxxx.pages.dev

を設定した。

すると、

PagesのカスタムドメインがActiveになった。

よし。

終わった。

と思った。

終わってなかった。

今度はERR_QUIC_PROTOCOL_ERROR#

www.example.comをChromeで開いてみる。

出たのはサイトではなく、

ERR_QUIC_PROTOCOL_ERROR

だった。

さっきまではERR_TIMED_OUTだったので、何かは変わっている。

「Cloudflareまで届くようにはなったんかな?」

と考えた。

PagesはActiveになったばかりなので、SSL証明書やCloudflare Edgeへの反映に時間がかかっている可能性も疑った。

じゃあ別ブラウザならどうか。

Firefoxで開いてみる。

今度は、

SSL_ERROR_RX_RECORD_TOO_LONG

だった。

エラーの種類まで変わった。

やめてほしい。

SSL証明書を見る。でもActive#

CloudflareのSSL/TLS設定を確認する。

モードは、

Full

Edge Certificatesを見ると、

*.example.com
example.com

のUniversal SSLが、

Active

になっている。

wwwはワイルドカードの対象なので、証明書がないという感じでもない。

PagesのカスタムドメインもActive。

DNSのwwwも、

www.example.com
CNAME
xxxx.pages.dev
Proxied

になっている。

だんだん、

設定画面を見る限り全部正常

という、トラブルシューティングで一番嫌な状態になってきた。

nslookupしてみる#

まず、

Terminal window
nslookup www.example.com

を実行した。

すると、18.x.x.x系のIPが返ってきた。

一方で、

Terminal window
nslookup xxxx.pages.dev

では、

172.66.x.x
172.66.x.x

が返ってきた。

結果が違う。

「wwwが別のところを向いてる?」

と疑った。

Google Public DNSやCloudflare DNSに直接問い合わせても、wwwには同じ18.x.x.x系が返ってきた。

さらに、

Terminal window
nslookup -type=CNAME www.example.com

も試した。

結果は、

Can't find www.example.com: No answer

ただし、wwwはCloudflareでProxiedにしている。

この状態ではCloudflareがCNAMEそのものを外から見せず、A/AAAAとして応答するため、CNAMEが見えないこと自体は異常とは限らない。

また一つ、決定打にならなかった。

リダイレクトが悪い?#

そもそもの目的は、

https://www.example.com/*

を、

https://example.com/${1}

へ301リダイレクトすることだった。

Cloudflareにはすでにそのルールを作っていた。

「もしかして、このルールがおかしい?」

と思い、一旦無効化。

その状態でwww.example.comを開いてみる。

変わらない。

リダイレクト、お前でもないのか。

ルールは元に戻した。

ここでスマホから開いてみた#

調査がCloudflareの設定画面をぐるぐる回り始めたところで、スマホからアクセスしてみた。

Wi-Fiを切って、モバイル回線から、

https://www.example.com

へアクセス。

普通に開いた。

ん?

これはかなり大きな違和感だった。

Cloudflare側の設定そのものがおかしいなら、PCでもスマホでもダメになりそうなものだ。

ところが、

スマホ + モバイル回線 → OK
Mac + 自宅Wi-Fi → NG

になっている。

そこでMacもスマホのテザリングにつないでみた。

開いた。

さらにスマホを自宅Wi-Fiに戻す。

開かない。

ここまで来ると、疑う場所が変わった。

Cloudflareじゃない。

自宅Wi-Fi側では?

最後に見つかったのはJ:COMのアプリ#

使っていたのはJ:COMのWi-Fi。

そのアプリでは、接続している端末ごとの状況を確認できる。

そこで対象端末の状態を見てみると、

今回設定していたドメインが拒否される状態になっていた。

ドメインを拒否しないように設定変更。

そのあとwww.example.comへアクセス。

普通に表示された。

終わった。

DNSでもなかった。

SSLでもなかった。

QUICでもなかった。

IPv4でもIPv6でもなかった。

最後に立っていたのは、Wi-Fi側のフィルタだった。

DNSを触りまくったせいだったのか?#

ここは断定できていない。

今回、wwwを有効化する過程で、

  • カスタムドメインの追加
  • CNAMEの変更
  • Proxy設定の変更
  • NSレコードの削除
  • SSLが安定していない状態でのアクセス

などを短時間に繰り返していた。

そのため、何らかのタイミングでWi-Fi側のセキュリティ機能に引っかかった可能性は考えた。

ただし、

「CloudflareのDNS設定を何度も変更したからJ:COMにブロックされた」ことまでは確認していない。

分かった事実は、

J:COMのWi-Fiアプリ上で対象ドメインが拒否されており、許可したらアクセスできるようになった

ここまで。

原因を綺麗に説明したくなるけど、確認できていないところまで物語を完成させると、また別の沼が始まる。

今なら、もっと早く別ネットワークで試す#

今回の調査で一番効いたのは、難しいコマンドではなかった。

スマホのWi-Fiを切ったことだった。

途中では、

Terminal window
nslookup www.example.com

を実行したり、

Terminal window
dig A www.example.com
dig AAAA www.example.com

を見たり、SSL証明書を確認したりした。

もちろん、それぞれ切り分けとして意味はあった。

でも、

自宅Wi-Fi → NG
モバイル回線 → OK

が分かった瞬間、調査対象がCloudflareから自宅ネットワークへ一気に移った。

今同じ症状に遭遇したら、

  1. 別ブラウザで試す
  2. 別端末で試す
  3. 別ネットワークで試す

をかなり早い段階でやると思う。

特に、

DNSは合っている SSLもActive サービス側もActive なのに自分の環境だけ繋がらない

となったら、ルーターやISP側のセキュリティ機能も候補に入れる。

設定を触った直後ほど、設定を疑いすぎる#

今回ハマった理由は分かりやすい。

直前までCloudflareのDNSを触っていた。

だから繋がらなくなれば、

「さっき触ったCloudflareがおかしい」

と思う。

実際、途中には不要なNSレコードも残っていたので、その疑い自体は間違っていなかった。

ただ、それを直してPagesがActiveになったあとも、頭の中ではCloudflareの調査が続いていた。

DNS。

SSL。

QUIC。

IPv6。

リダイレクト。

一通り回ったところで、Wi-Fiを切ったら普通に開いた。

今回のJ:COM側のブロックも、結果だけ見れば、ホテルのフロントが「怪しそうだったので預かっておきました」と荷物を止めていたようなものだった。

守るための仕組みなのは分かる。

ただ、そのことをこっちには特に知らせてくれない。

荷物が届かないので配送業者に問い合わせて、住所を確認して、配送経路まで調べたあと、フロントに聞いてみたら、

「あ、それならこちらで止めてます」

みたいな感じ。

いや、止めるのはええとして、止めてることはどっかで言っといてくれ。

今なら、同じ状態になったらかなり早い段階で別ネットワークを試す。

DNS、SSL、ブラウザ、端末。切り分ける対象はいろいろあるけど、回線そのものを変えるという手も忘れないようにしたい。

ということで今回、一番仕事をしたデバッグツールは、nslookupでもdigでもなくスマホのテザリングだった。