はじめに
ChatGPTを頻繁に使っていると、特に米国のVPNエンドポイント経由で接続している場合に、"Unable to load site." という苛立たしいエラーに遭遇することがあります。また、サービス側からVPNを完全にオフにするよう促されることもあります。プライバシー、ルーティング、地域ごとのネットワークアクセスのためにVPNに依存しているユーザーにとって、その助言は必ずしも現実的ではありません。
この設定をより管理しやすくするために、小さなPythonスクリプトを書き、GitHubリポジトリ The Art of Lazying で共有しました。このスクリプトは、ChatGPT関連のトラフィックに関係するドメインとIPアドレスを特定するのに役立ちます。これにより、VPNのルーティングルールを勘に頼るのではなく、より意図的に設定できます。
VPNの課題
VPNは、インターネット上でトラフィックが通る経路を変えます。それこそがVPNを使う目的ですが、一方で、不正利用対策、地域制限、リスクベースのアクセスチェックを厳格に適用するサービスでは問題を引き起こすこともあります。サービス側から見ると、共有VPN出口ノードからトラフィックが来ているように見えるため、リクエストをブロックしたり、追加確認を求めたり、正しく読み込めなかったりする場合があります。
ChatGPTユーザーにとって、目に見える症状は、ページが読み込みを拒否する、接続失敗が繰り返される、VPNを無効にするよう求めるメッセージが表示される、といった形になります。実際の課題は、単純に「VPNオン」か「VPNオフ」かではありません。より良い方法は、どのドメインが関与しているのかを理解し、そのトラフィックをどのようにルーティングすべきかを決めることです。
救いとなるPythonスクリプト
スクリプトはこちらで公開しています。
目的は単純です。ChatGPT関連のドメイン一覧を収集し、それぞれを対応するIPアドレスに解決します。その情報を使えば、より精密なVPNルール、プロキシルール、ファイアウォールルール、またはスプリットトンネル設定を作成できます。
ワークフローは次のとおりです。
- ChatGPTおよび関連サービスで使われるドメインの一覧を管理する。
- 各ドメインを1つ以上のIPアドレスに解決する。
- ローカルネットワーク設定で利用できるように、その対応関係を表示またはエクスポートする。
- その結果を使って、どのトラフィックをVPN経由にし、どのトラフィックをVPN外に逃がすかを決める。
クラウドサービスのインフラは時間とともに変わるため、正確なIPアドレスは恒久的な事実ではなく、一時的な観測結果として扱うべきです。トラブルシューティング時、ネットワーク変更後、またはルーティングルールを更新する前には、スクリプトを再実行してください。
スクリプトの動作
実行すると、このスクリプトは amp-api-edge.apps.apple.com、api.revenuecat.com、ios.chat.openai.com などの関連エンドポイントを取得または名前解決し、それらを現在のIPアドレスに対応付けます。
この対応関係は、次のような実用的な疑問に答える助けになります。
- このデバイスでChatGPTが読み込まれるとき、どのドメインが関与しているのか。
- それらのドメインは今どのIPアドレスに解決されているのか。
- VPNのバイパスリストやスプリットトンネルルールに含めるべき項目はどれか。
- サービス側の変更により、古いルーティングルールが陳腐化していないか。
典型的な使い方は、ローカルでスクリプトを実行し、出力を確認してから、得られたドメインやIP範囲をVPNクライアントのルーティング設定に適用する、というものです。VPNクライアントによって扱いは異なります。ドメインベースのルールをサポートするものもあれば、IPベースのスプリットトンネリングをサポートするものもあり、アプリケーション単位のルーティングしかできないものもあります。
利点:より安定したChatGPTアクセス
ChatGPT関連トラフィックをより明示的に把握できると、VPNユーザーは読み込みエラーを修正する際の試行錯誤を減らせます。VPNを全体で無効化する代わりに、関連するトラフィックだけを対象に、より限定的なルーティング判断を下せます。
この方法なら、VPN利用の利点を必要な場所で維持しながら、ChatGPTへのアクセスをより安定させることができます。頻繁にネットワークを切り替えるユーザー、モバイルデバイスを使うユーザー、カスタムのプロキシ/VPN構成を運用しているユーザーには特に有用です。
まとめ
このPythonスクリプトは、安全なVPN利用と途切れないChatGPTアクセスの間にある溝を埋めます。関与するドメインとIPアドレスを特定することで、スプリットトンネリングとトラフィック管理の実用的な出発点を提供します。
また、これは The Art of Lazying の精神にも合っています。繰り返し起きる技術的な煩わしさを単純化し、面倒な部分を自動化し、ネットワークが変わったときに再利用できる小さなツールを残す、ということです。
