目次
Wi-Fi からモバイル回線への切替時や、パソコンでネットワークを変更した後に、ノードには接続できても一部のサイトがタイムアウトすることがあります。古い DNS 応答が残っている可能性はありますが、新しいネットワーク、DNS の問い合わせ先、ノードにも原因は考えられます。まず比較用の記録を残し、そのうえでキャッシュを消すか判断しましょう。
回線を変えた後、一部のドメインだけ開かないときは?
FlClash v0.9.2 の正式版では、手動操作とネットワーク変更時に DNS キャッシュを消去する機能が追加されました。この記事は同バージョンの画面とバージョンを固定したソースコードに基づき、Android とデスクトップ版の操作を説明します。回線切替後の切断がすべてキャッシュ消去で直るとは限りません。
キャッシュ消去を試す前に、状況を切り分ける
| 確認できた状態 | 次に行うこと |
|---|---|
| 通常の通信はできるが、FlClash では同じドメインへの接続が失敗する | Profile、ノード、ドメインを変えずに問い合わせ結果を記録し、一度だけ消去して前後を比較します。 |
| FlClash による通信の処理を止めても、通常の通信でアクセスできない | まず新しいネットワークやシステムの名前解決を復旧します。アプリのキャッシュ消去だけでは、接続障害の調査を代替できません。 |
| 特定のノードだけ失敗し、別のノードでは同じドメインに接続できる | 先にノードと送信経路を調べます。サイトが開かないという理由だけで、古いキャッシュが原因とは判断しません。 |
| 設定を再読み込みした直後に Fake-IP の対応付けがおかしくなった | Fake-IP と再読み込みの条件を別に調べます。この記事のボタンは Fake-IP のアドレスプールを初期化するものではありません。 |
このボタンで消えるもの、変わらないもの
DNS クエリ画面のボタンは FlClash コアの clearDnsCache を呼び出し、最終的に dns.ClearAll() を実行します。コアに保存された DNS 応答を消去し、関連する DNS 問い合わせ先へのクライアント接続をリセットすることで、その後の問い合わせで結果を取得し直します。
このバージョンが使うクライアント向けのコアでは、デスクトップ側でシステムの nameserver 一覧も再読み込みします。Windows や macOS のシステム DNS キャッシュを更新するコマンドを実行する操作ではなく、ブラウザやほかのアプリのキャッシュも一緒に消えるとは限りません。
DNS 応答の消去と Fake-IP の対応付けの消去は別の操作です。確認したソースコードには、別途 FlushFakeIP があります。今回の消去を仮想アドレスプールの削除と捉えたり、そのために fake-ip-range を変えたり、サブスクリプションの再取り込みやアプリデータの全削除を行ったりしないでください。
DNS クエリの一覧は観測記録です。キャッシュの消去はこの履歴を削除する操作ではないため、一覧が残っていても、ボタンが機能しなかったとは判断できません。その後の新しい問い合わせ時刻と実際の通信を確認し、一覧が空になるのを待つ必要はありません。
消去前に、同じドメインの結果を記録する
変える条件は一つだけにする
バージョンと現在のネットワークを記録する
実際に起動しているアプリが v0.9.2 であることを確認し、システム、ネットワークの種類、切替時刻、現在の Profile、ノード、元の DNS 上書き設定を控えます。旧版にこのボタンがない場合は、ほかの設定で似た名前のスイッチを探して代用しないでください。
通常のネットワーク接続が使えるか確認する
FlClash による通信の処理を短時間止め、同じネットワークから元の接続先へアクセスします。直接接続が許される用途でのみ試してください。プロキシが必須の作業は先に中断し、直接接続できたことをプロキシの復旧とは見なしません。
元の設定に戻り、新しい問い合わせを記録する
同じ Profile とノードで対象へのリクエストを送り直し、ツール内の DNS 画面で該当ドメインを探します。A または AAAA、時刻、取得元、応答コード、回答を記録してください。記録がなければ、まずそのリクエストが FlClash DNS を経由しているか確認します。
システムやブラウザに以前の応答や接続が残っている場合があります。DNS 画面に新しい問い合わせがないときは、ページの再読み込みだけでコアが名前解決し直したとは判断できません。新しい問い合わせ記録と照らし合わせ、必要に応じてアプリからリクエストを送り直します。複数の DNS 設定を同時に変更しないでください。
v0.9.2 の「ツール → DNSクエリ」で消去する
手動で消去し、すぐに結果を確かめる
DNS クエリ画面を開く
「ツール」から「DNSクエリ」を選び、問い合わせ記録の画面であることを確認します。上部にあるほうきのボタンには「DNSキャッシュをクリア」というヒントが表示されます。画面の移動方法や配置は、ウィンドウ幅によって変わる場合があります。
一度だけ消去を実行する
ほうきを押して結果を待ちます。成功時は「DNSキャッシュをクリアしました」、失敗時は「DNSキャッシュのクリアに失敗しました」と表示されます。成功表示が意味するのは、このコア操作が成功を返したことだけです。サイトにアクセスできるかは別に確認してください。
元のリクエストを送り直す
同じネットワーク、Profile、ノード、DNS 設定を保ち、同じドメインへのリクエストを送り直します。同じレコード種類の新しい時刻、取得元、応答コード、回答を照合したうえで、実際の HTTPS ページや業務のリクエストが完了するか確認します。
失敗と表示されたら、まずログを保存し、コアの稼働状態を確認します。連続で押したり、設定をすべて削除したりしないでください。この項目がない場合は、先にバックアップを取り、プロジェクトの正式版 v0.9.2 とシステムの対応状況を確認します。通常の更新方法で対応版を入手し、アプリ内部のコアを独断で上書きしないでください。
回線切替時に自動消去されても、確認が必要な理由
ネットワーク変更時の消去は、このバージョンに組み込まれた動作です。ソースコード上、ユーザーが有効にする必要のある自動消去スイッチはありません。ただし、Wi-Fi の状態表示が変わるたび、ページを再読み込みするたび、あるいはすべてのプラットフォームのイベントで同じ処理が動くとは限りません。
デスクトップ側のネットワークコールバックは、コアが接続済みで、VPN の有無が変わっていない場合の該当処理でのみ、約 200ms の間に起きた通知をまとめてから DNS を消去します。この処理自体が、すべての使用中の接続を直接閉じるわけではありません。
Android はネイティブのネットワーク監視を使います。優先ネットワークの DNS 一覧が変わると、コアが使うシステム DNS を更新します。すでにある優先ネットワークが A から B へ切り替わる処理では、resetNetwork を通じて使用中の接続を先に閉じ、その後に DNS を消去します。自動消去でも既存の接続が途切れないとは限らず、デスクトップの動作から Android の動作を推測することもできません。
回線切替後も異常が続く場合は、接続先を変えず、一度だけ手動で消去して前後を比べます。新しい問い合わせと実際のアクセスの両方で確かめられた場合に限り、この端末で復旧したと記録してください。コールバックを無理に発生させるために、ネットワークを何度も切断する必要はありません。
成功表示に加えて、何を確認すればよい?
消去後の確認事項
- バージョン、ネットワーク、Profile、ノード、DNS 上書き設定を記録し、消去前後に設定を同時変更していない。
- 同じドメインと A または AAAA を比較し、新しい問い合わせ時刻を確認した。取得元、キャッシュの有無、応答コード、回答も記録した。
- IP が変わることや、最初の記録で必ずキャッシュが「いいえ」になることを条件にしていない。同時リクエストが先にキャッシュを埋める場合があり、正しい DNS 応答が以前と同じアドレスであることもある。
- 元の HTTPS ページや業務リクエストが実際に完了し、接続記録に想定どおりの送信経路が表示されている。ノードの遅延値や VPN アイコンだけで済ませていない。
- その後、通常の利用中に回線が変わった際も同じ対象を再確認する。問題が再発したら、ネットワーク、問い合わせ、接続記録の時刻を対応付けて保存する。
新しい問い合わせでもタイムアウト、拒否、名前解決エラーが出る場合は、現在のネットワーク、DNS の問い合わせ先、ルール、ノードを引き続き調べます。消去前後の違いだけで、キャッシュが唯一の原因だったとは証明できません。一度消せば回線切替の問題が永久に解決するとも限りません。
解決しない場合に、設定を戻して報告するには?
消去したキャッシュをボタンで元に戻すことはできません。その後の問い合わせによって再び作られます。今回、設定を変えずに消去だけ行った場合は、元の Profile と DNS をそのまま使います。追加の比較で設定を変えた場合は、今回変更した項目だけを元の値に戻してください。消去に失敗しても、アプリ全体のバックアップを復元する必要はありません。
更新後に別の互換性問題が起きた場合は、まず影響を受ける操作を止め、元の対応方法で該当バージョンと独立したバックアップに戻します。複数のバージョンで同じデータディレクトリを共用しないでください。通信の処理を止めた後に通常のネットワークが使えるか確認し、プロキシが必要な作業は引き続き中断します。
プロジェクトへの報告には、アプリとシステムのバージョン、回線切替の種類と時刻、同じドメイン・レコード種類の前後の問い合わせ結果、消去の成功または失敗表示、実際のリクエストの送信経路とエラーを添えます。公開する資料からはサブスクリプションのトークン、パスワード、非公開のドメインを隠し、元のバックアップは手元の端末に残してください。
参考資料
- FlClashv0.9.2 正式版:手動操作と回線切替時の DNS キャッシュ消去
- FlClashv0.9.2 の DNS クエリ画面、消去ボタン、結果表示
- FlClashv0.9.2 の消去コマンドとコア呼び出し
- FlClashv0.9.2 でデスクトップの回線変更時に消去する条件
- FlClash coreこのバージョンのクライアント用コアにおける ClearAll の対象
- FlClash coreこのバージョンのコアにある独立した Fake-IP 消去処理
- FlClashv0.9.2 における Android の優先ネットワークと DNS 変更の処理
- FlClashv0.9.2 の DNSクエリというナビゲーション名の対応付け
