接続トラブルシューティング · Clash 技術ブログ

OpenClash invalid tun stack:旧コアで復旧

OpenClash 更新後に invalid tun stack が出て、続いて無効化されたと表示されますか?実際の設定にある mips と旧コアの互換性を確認し、バックアップ後に動作確認済みの Mixed を選んで再び有効にします。実際のリクエストと再起動で検証し、改善しなければ元の設定へ戻します。

  • OpenClash
  • invalid tun stack
  • mips
  • Mixed
  • コアの起動
目次

OpenClash 更新後にコアが繰り返し終了し、その後プラグインが無効と表示される場合、起動ボタンを押し続けても改善するとは限りません。ログの最初に invalid tun stack が出ていれば、生成された設定のスタックと実際のコアの互換性を確認し、プラグインを再び有効にする必要があります。

更新後に起動しないときは、最初のコアエラーを確認

OpenClash #5361 では、v0.47.156 から v0.48.002 へ更新し、旧コアを使い続けた際にこの現象が報告されています。報告者の Kwrt の fake-ip-tun モードでは、未保存の stack_type が空なのに、実際の設定には mips が書き込まれていました。

その旧コア alpha-fe22fdd はこの値の設定検証に失敗し、mixed に変更すると検証を通過して起動しました。報告はまだ未解決で、公式の修正判断も出ていません。本記事は固定バージョンのソースと整合する条件付きの切り分け手順であり、ルーター実機での再現検証は行っていません。

この組み合わせのエラーが出る場合に確認を続ける
Parse config error: invalid tun stack
OpenClash Now Disabled, Need Start From Luci Page, Exit...

まず本記事の対象に当てはまるか確認

実際の状況次に行うこと
最初に invalid tun stack が出て、生成された tun.stack が mips現在動作に使うコアがその値をサポートするか確認し、元に戻せる比較を行います。
プラグインが無効との表示だけで、その前にコアエラーがない起動ログをさかのぼります。別の起動失敗によって無効化された可能性があります。
コアは正常に動作し、ウェブページや DNS だけが利用できない実際の接続エラーを調べます。この状況だけでスタックの互換性が原因とは判断できません。

スタックを変えても無効と表示される理由

v0.48.002 の設定画面では、mips が TUN スタックの既定値です。生成スクリプトはまず渡されたスタック値を使い、空なら別の引数を参照し、それも空の場合に mips へフォールバックします。自分の環境で最終的に生成された設定を確認し、すべてのサブスクリプションが無条件で上書きされるとは考えないでください。

ここでの mips は TUN スタックの名称で、ルーターの MIPS プロセッサーアーキテクチャでも、MASQUE アウトバウンドの ip-stack でもありません。この名称を見ただけで、コアのアーキテクチャやアウトバウンドのノード設定を変えないでください。

Mihomo v1.19.30 の固定バージョンの解析コードには gvisor、system、mixed だけがあり、v1.19.31 にはすでに mips が含まれ、v1.19.32 でも使えます。コアによって対応する値が異なることは確認できますが、自分が使っているビルドをプラグインのバージョンだけで判断することはできません。

OpenClash は起動失敗時に enable を 0 に書き換えます。起動処理は無効な状態を検出すると、そのまま終了します。このため、stack_type を変更してから start を実行するだけでは、無効との表示が続く場合があります。復旧時には、プラグインが再び有効になったことも必ず確認してください。

バックアップを取り、実際のコアと元の値を確認

まずルーターを管理できるローカル接続を確保し、中断できない転送は一時停止します。プラグイン設定、サブスクリプション、カスタム設定を別の場所へ保存して、コピーが読み取れることを確認します。以前動作していたモードとスタック、プラグインの有効・無効の状態も記録してください。

プラグインのコア情報と起動ログで、実際に読み込まれた Mihomo のバージョンを確認します。端末から実行できる別のコアが、プラグインの使用中のコアと同じとは限りません。アプリのバージョンやファイル名だけで、対応するスタックを判断しないでください。

ルーターの端末を使っている場合は、次の設定を読み取り専用で確認
uci -q get openclash.config.stack_type
uci -q get openclash.config.enable

最初のコマンドに出力がない場合、その項目が未設定の可能性があります。最終的な設定も空とは限りません。プラグインが生成した実行用設定の tun.stack を別途確認し、最初の解析エラーを記録してください。設定全体、サブスクリプションのアドレス、ノードのパスワード、コントローラーの secret は公開しないでください。

追加の検証が必要なら、プラグインが現在使っているコアと実際の設定で設定チェックを行います。チェックの成功が示すのは解析できたことだけで、転送、DNS、ローカルネットワークの通信処理まで正常とは限りません。本記事では、テスト用コアのダウンロードや報告者のバイナリの実行は必要ありません。

動作確認済みのスタックを選び、プラグインを再び有効にする

エラー、最終的な mips の値、コアの互換性が一致する場合に限り、以下の項目だけを変えて比較します。Mixed は今回の報告者が動作を確認し、前述の旧バージョンの固定コードでも使える選択肢です。あらゆるネットワーク環境に最適な値という意味ではありません。

自分の LuCI 画面で復旧する

  1. 元の設定を記録して Mixed を選択

    「プラグイン設定 → 動作モード設定 → ネットワークスタックの種類」を開き、元の値を記録してから Mixed を選びます。表示名は画面の言語によって異なる場合があります。プロセッサーアーキテクチャの選択項目と取り違えず、サブスクリプション、DNS、動作モードも同時には変更しないでください。

  2. 設定を適用して有効化を確認

    「設定を適用」を押し、サービスの再起動が完了するのを待って、プラグインが有効になったことを確認します。固定ソースの「設定を保存」は設定の保存だけを行い、「設定を適用」で再び有効にして再起動します。なお無効と表示される場合は、LuCI で明示的に有効にしてからログを確認してください。

  3. 新しく生成された設定とログを確認

    最終的な tun.stack が mixed になり、実際のコアから invalid tun stack が返らず、サービスが動作し続けていることを確認します。設定が実行用設定へ反映されていない場合は、使用中の設定と保存結果を先に確認し、一時的な YAML を繰り返し編集しないでください。

  4. 同じネットワークとリクエストで検証

    ノード、サブスクリプション、その他の設定は変えず、新しいウェブページやアプリのリクエストを送信して、実際の出口とログを確認します。既存の接続やスイッチの色だけでは、新しいスタックが通信を処理している証拠にはなりません。

プラグインが生成し、後から上書きされる可能性がある実行用 YAML は直接編集しないでください。問題を見えなくするために既定値のスクリプトを手で書き換えることも避けます。公式コアへの更新は後で個別に検討できますが、プラットフォームのアーキテクチャ、設定の互換性、バックアップを確認する必要があります。本記事ではコアを入れ替える更新手順全体を検証していません。

復旧後は名前解決・接続・再起動も確認

次の検証結果を保存

  • 元の stack_type と enable の状態、現在のコアのバージョン、独立した設定のコピーを記録・保存している。
  • 最終的な tun.stack が意図した値で、起動ログに invalid tun stack が出ず、プラグインが無効との表示も繰り返されない。
  • サービスが動作し続け、同じドメインの名前解決と、同じウェブページやアプリの新規リクエストが完了する。
  • ルーターの管理接続と、従来プロキシが必要だったローカルネットワークの機器が、どちらも想定どおりに動作する。ノードの遅延テストだけでこれらの確認を済ませない。
  • 通常のサービス再起動を一度行い、実際のコア、最終的な設定、有効・無効の状態、新しいリクエストを再確認して、設定が保持されていることを確かめる。

今回のネットワーク、時刻、変更前後のスタック値、リクエストの結果をまとめて保存します。設定チェックを通過しても接続できない場合は、ルーティング、権限、DNS、ノードの実際のエラーをさらに確認する必要があります。すべての症状をこの解析エラーだけに結び付けないでください。

復旧しない場合の取り消しと報告

記録しておいた元のスタックと有効・無効の状態に戻し、以前動作を確認した独立した設定や動作モードを使います。バックアップをインポートする必要がある場合は、先に現在の状態を別途保存し、バックアップが対応するバージョンを確認してください。データを全消去したり、唯一の設定コピーを古いプラグインで上書きしたりしないでください。

旧コアを使い続けると元の解析エラーが再発する場合は、その失敗する組み合わせの利用をいったん停止し、以前動作を確認した接続方法で管理できる状態に戻します。一時的な接続復旧と TUN の修正完了は、それぞれ別に検証する必要があります。特定のスイッチを切ればすべてのルーターが直るとは保証できません。

プロジェクトへの報告には、プラグインと実際のコアのバージョン、ファームウェアと機器、元のスタック値、最終的な tun.stack、再び有効にしたかどうか、最初の解析エラー、最小限の再現手順を含めます。サブスクリプションの Token、ノードの認証情報、secret は除き、機密情報を含む設定全体のアップロードを避けてください。

今後の公式修正、既定値の変更、新たな対象範囲については、プロジェクトのメンテナーとリリース記録を基準にしてください。本記事で確認したのはユーザー報告と明確なバージョンの上流ソースです。報告者による Dev ソースの比較を、複数バージョンでの実行検証とは扱いません。

参考資料