この記事の目次
はじめに
自宅のSynology DS725+でホスティングしている当ブログ(ara-garage.com)が、自宅のChromeだけで開けなくなっていることに気づきました。アドレスバーには正しくURLが表示されるのですが、ページの内容が読み込まれず、タイムアウトしてしまう状態です。一方でSafariからは何の問題もなく開くことができ、原因の特定にしばらく苦戦しました。なお、いつから発生していたかは特定できていませんが、以前利用していたSynology標準のDDNS(synology.me)から独自ドメインへ移行したことが引き金になったのではないかと思われます。今回は、最終的にたどり着いた本当の原因と、その解決方法を記載しました。
最初の仮説:ウイルスバスターを疑う
真っ先に疑ったのは、Mac用ウイルスバスターの「Web脅威対策」機能でした。個人ドメインは「未評価サイト」として保守的にブロックされることがあるためです。コントロールパネルの「許可するWebサイト」にara-garage.comを複数の書式で登録し、Chromeを再起動しましたが、状況は変わりませんでした。シークレットモードでも同様に開けなかったことから、Chromeの拡張機能ではなくシステムレベルの何かが関係していると考え、調査を続けました。
切り分け開始:拡張機能削除とキャッシュクリア
次に、ChromeのHSTSおよびDNSキャッシュをクリアし、Macを再起動しました。それでも改善しなかったため、ウイルスバスターの「Web脅威対策」自体を一時停止しましたが、これも変化なし。さらにChromeの拡張機能を確認すると、システム本体とは別に「Trendツールバー for Mac」という拡張機能が独自にインストールされていることが分かりました。これを削除してみましたが、結果は同じでした。ここまでで、ウイルスバスター関連はすべて原因ではないことが、消去法で確認できました。
ブラウザを飛び越えて検証:curlでOSレベルから確認
ブラウザ側の要因が一通り否定されたため、ブラウザの仕組みを一切使わないターミナルのcurlコマンドで直接確認しました。curlとは、ブラウザを介さずにサーバーへ直接通信を試すことができるコマンドです。
curl -v https://www.ara-garage.com
結果は「Operation timed out」。約75秒待っても、サーバーの公開IPアドレスのポート443に接続すらできていませんでした。これは非常に重要な手がかりで、問題がChromeというアプリケーション固有のものではなく、Mac全体のネットワーク経路、あるいはそれより手前の段階で起きていることを意味していました。
真因の特定:Hairpin NAT(ヘアピンNET : NATループバック)とは
調査の結果、原因は自宅ルーターの「Hairpin NAT(NATループバック)」未対応であることが分かりました。これは、LAN内の機器が、サーバーの「外部公開アドレス」経由で、同じLAN内にある別の機器(今回はNAS)にアクセスしようとした際に起きる現象です。一度ルーターの外に出てから内側に戻ってくるという折り返し通信を、ルーターが正しく処理できずに止まってしまうことがあります。なお「Hairpin(ヘアピン)」という名前は、外へ出ていった通信が同じ場所でU字型に折り返して内側へ戻ってくる様子が、ヘアピンカーブのような形に見えることに由来します。多くの家庭用ルーター、特にISP提供のホームゲートウェイでは、この機能に対応していないことが少なくありません。実際に、Mac上の/etc/hostsファイルにNASの内部IPアドレスを直接記載したところ、即座に問題は解消し、この仮説の正しさを確認できました。
なぜSafariだけ開けたのか:プライベートリレーという伏線
最後に残った疑問が「なぜSafariだけ最初から開けていたのか」でした。確認すると、Safariの設定で「IPアドレスを非公開」が「トラッカーとWebサイトに非公開」となっており、すべての通信がiCloudプライベートリレー(Appleの中継サーバー)経由になっていました。つまりSafariの通信だけは自宅ルーターを経由せず、外部のApple中継サーバーを経由してアクセスしていたため、Hairpin NATの問題を回避できていたのです。実際にこの設定を一時的にOFFにすると、Safariでも同じくタイムアウトすることが確認できました。同様に、iPhoneのWi-FiをOFFにしてモバイル回線(5G)でアクセスした場合も、自宅LANを経由しないため正常に開けました。すべての結果が、Hairpin NATという一つの仕組みで説明できたことになります。
解決策:自宅NASにDNSサーバーを立てて内部直結にする
恒久対策として、自宅ルーター(NEC Aterm BL3000HM)にHairpin NAT回避用の設定や、独自のローカルDNS機能がないか確認しましたが、この機種にはどちらの機能もなく、DHCPで配布するDNSサーバーのアドレスも変更できない仕様であることが分かりました。そこで、Synology NASの「DNS Server」パッケージを利用し、ara-garage.com専用のプライマリゾーンを作成。ドメイン名(および www サブドメイン)をNASの内部IPアドレスに直接対応させるAレコードを登録しました。それ以外のドメインについては、ルーターへ通常通り転送する設定も合わせて行っています。最後に、Mac側のネットワーク設定(Wi-Fi・Ethernet・USB LANの各サービス)でDNSサーバーをNASのアドレスに変更し、フォールバック用にパブリックDNS(8.8.8.8)も併記しました。これにより、自宅LAN内からのアクセスはNAS側で直接名前解決され、ルーターのHairpin NAT問題を回避できるようになりました。なお、将来ブログ運営をやめる場合は、NASのDNS Serverでara-garage.com用のゾーンを削除し、各端末のDNS設定を「自動」に戻すだけで、今回の変更を元に戻すことができます。フォールバック用にパブリックDNS(8.8.8.8)も併記しているため、NASを停止しただけでも自動的に通常の名前解決に切り替わり、急いで戻す必要はありません。
まとめ:サイトは最初から世界に公開されていた
今回の現象は、サイト自体が壊れていたわけではなく、「自宅LAN内から、自分の公開URLでアクセスしようとした時だけ」発生する、いわば内輪の問題でした。X経由でブログにアクセスしてくださった読者の方々は、自宅LANの外からアクセスするため、最初から何の問題もなく閲覧できていたことになります。原因の切り分けには時間がかかりましたが、ウイルスバスター→拡張機能→OSレベル検証→Hairpin NAT特定→Safariの謎解明、という一連の過程は、自宅サーバー運用者であれば一度は遭遇しうる典型的なトラブルかもしれません。同じ症状に困っている方の参考になれば幸いです。
