TUNモードの概要
LinuxでClash Metaを利用する場合、通常はデスクトップ環境のシステムプロキシ設定を変更するか、各アプリケーションにHTTPプロキシやSOCKSプロキシを指定します。しかし、すべてのアプリケーションがこの設定を読み取るとは限りません。ターミナル、コンテナ、ゲーム、アップデーター、バックグラウンドサービスなどは、GUIで指定したプロキシを無視して直接通信することがあります。
TUNモードは、仮想ネットワークインターフェースを作成し、OSから見えるIP通信をClash Metaへ取り込む機能です。アプリごとにプロキシを設定しなくても、ルーティングルールに従って通信を振り分けられるため、Linux全体の接続を一元管理できます。国内サイトは DIRECT、指定した海外サービスはプロキシ、広告や不要な追跡ドメインは拒否という構成も可能です。
ただし、TUNモードは単にスイッチを押すだけの機能ではありません。仮想インターフェース、ルート、DNS、権限、IPv6の扱いが互いに関係しています。設定を誤ると、インターネット全体が切断されたり、DNSだけが直接接続になったりするため、変更前に現在の設定を保存してから段階的に確認することが重要です。
この記事のゴール
Linux上でClash MetaのTUNモードを安全に有効化し、プロキシ経由・直接接続・DNS解決が期待どおりに動作しているかを確認できる状態を目指します。
1事前準備と注意点
作業を始める前に、使用しているクライアントが本当にMihomoまたはClash Metaコアを搭載しているか確認してください。Linux向けのGUIクライアントには、設定画面が似ていてもTUN機能を持たないものや、別のコアを利用しているものがあります。クライアントの「About」、「Kernel」、「Core」などの画面でバージョンを確認し、TUNをサポートする構成を選びます。
- 有効な設定ファイル:プロキシノード、プロキシグループ、ルールが読み込まれた
config.yamlを用意します。 - 管理者権限:仮想インターフェースやルーティングを作成するため、通常はroot権限または適切なLinux capabilitiesが必要です。
- ネットワーク情報:現在のデフォルトゲートウェイ、DNS、VPN、DockerやWireGuardの利用状況を把握します。
- 復旧手段:SSH接続だけで作業する場合、設定を壊すと接続できなくなる可能性があります。ローカルコンソールや別の管理経路を確保してください。
設定ファイルをバックアップする
GUIで設定を変更する場合でも、最初にプロファイルを複製しておくと安心です。手動編集なら、次のように日付付きのコピーを作成します。実際のパスはクライアントに合わせて読み替えてください。
バックアップは、TUNを無効にしても直らない場合に役立ちます。特にDNS設定やルールを同時に変更すると原因が分かりにくくなるため、最初はTUN関連だけを追加し、動作確認後にDNSや自動ルートの調整を行うのが安全です。
SSH利用時の注意
リモートサーバーでTUNを有効にする場合、SSHの接続先までプロキシへ送らないよう、管理ネットワークやサーバーのIPを除外するルールを準備してください。
2Linux版クライアントの準備
TUNモードを使うには、Clash Metaコアを動かすクライアントと、読み込み可能なプロファイルが必要です。ここでは、GUIを備えたクライアントを利用する場合と、コアをサービスとして動かす場合に共通する考え方を整理します。具体的なボタン名はクライアントによって異なりますが、「Profile」で設定を読み込み、「Kernel」でMihomoを選び、「TUN」または「Service Mode」を有効にする流れはほぼ同じです。
- 使用しているディストリビューションとCPUアーキテクチャに合うLinux版クライアントをダウンロードします。
- パッケージまたはAppImageをインストールし、アプリケーションを起動します。
- 「Profiles」からプロバイダーのサブスクリプションURLを登録し、設定ファイルを取得します。
- 取得したプロファイルを選択して、ノードとルールが表示されることを確認します。
- 「Kernel」または「Core」でMihomo、Clash MetaなどTUN対応のコアを指定します。
プロファイルの確認
プロファイルを有効化する前に、YAMLのインデントを確認してください。YAMLは空白の数が構造を決めるため、タブ文字を混ぜたり、項目を一段ずらしたりするとコアが起動しません。オンラインエディターへ設定ファイルを貼り付けるのは、アクセストークンやノード情報が漏れる危険があるため避け、ローカルの検証機能やクライアント内のチェック機能を使うことをおすすめします。
また、サブスクリプションの更新で手動変更が消える場合があります。元ファイルを直接編集するより、クライアントのMerge機能やオーバーライド機能を使ってTUN設定を分離すると、プロファイル更新後も変更を維持しやすくなります。
3TUNモードの設定
まずは必要最低限の設定から始めます。次の例はMihomo系の一般的な書式です。クライアントのバージョンやディストリビューションによって対応項目が異なるため、認識されない項目がある場合はログを確認し、公式ドキュメントに合わせて調整してください。
enableはTUN機能の有効化、stackは通信スタックの指定です。一般的にはTCPとUDPの両方を扱える mixed が扱いやすく、環境によっては system や gvisor の方が安定する場合もあります。最初から複数の項目を変更せず、まずは標準値で起動できるかを確認してください。
自動ルートとDNSハイジャック
auto-route: trueを有効にすると、Clash MetaがTUNインターフェースへ必要なルートを追加します。手動でルートを作成するより設定が簡単ですが、NetworkManager、systemd-networkd、WireGuardなど別のネットワーク管理機能が同じルートを操作していると競合することがあります。
dns-hijackは、アプリが外部DNSサーバーへ直接問い合わせるのを防ぎ、ClashのDNS処理へ送るための設定です。TUNを有効にしたのにドメイン解決だけが失敗する場合や、DNSリークが疑われる場合に重要です。ただし、社内DNSやローカルネットワークの名前解決を利用している環境では、すべての53番ポートを横取りすると内部サービスへアクセスできなくなる場合があります。
DNS設定を整える
TUNモードでは、通信経路だけでなく名前解決の経路も確認する必要があります。次の例では、通常の名前解決用サーバーと、必要に応じて利用するフォールバックを指定しています。実際には使用中のプロバイダーや地域、プライバシー要件に合わせて変更してください。
fake-ipは多数のドメインを効率よく処理できますが、特定のゲーム、プリンター、社内システムなどで問題が起きることがあります。その場合はFake-IPフィルターへ対象ドメインを追加するか、環境に応じて redir-host を試してください。DNSモードを変更した後は、ブラウザーのキャッシュやsystemd-resolvedのキャッシュも影響するため、変更結果を複数の方法で確認します。
4権限とルーティングの確認
TUNインターフェースを作成できない場合、設定そのものではなく権限が原因である可能性があります。Linuxでは通常、ネットワークデバイスの作成に CAP_NET_ADMIN が必要です。GUIクライアントが権限昇格を要求する場合は、画面の案内を確認し、出所が明確なアプリケーションだけに許可してください。
ip link showでClashが作成したインターフェースが存在するか、ip routeでデフォルトルートや除外ルートが意図どおりかを確認します。DNSポートやMixedポートを変更している場合は、最後のコマンドで待ち受け状態を確認できます。
権限を最小限にする
検証時に毎回rootでクライアントを起動すると簡単ですが、通常運用では推奨できません。サービス化する場合は専用ユーザーを作り、必要なcapabilityだけを付与し、設定ファイルやログの所有者も整理します。ディストリビューションによってsystemdのユニットファイルや権限の扱いが異なるため、既存サービスを上書きする前にコピーを作成してください。
Dockerコンテナ内で動かす場合は、ホストのネットワーク名前空間や /dev/net/tun へのアクセスが必要になることがあります。コンテナへ過剰な権限を与えると、プロキシ設定以上のセキュリティリスクが生じます。自宅サーバーであっても、公開ポートや管理画面のアクセス制御を忘れないようにしましょう。
5動作確認の方法
TUNのスイッチがオンになっただけでは、通信が正しくプロキシを通っているとは限りません。インターフェースの作成、Clashのログ、IPアドレス、DNS、アプリケーションの順に確認すると、問題の切り分けが容易になります。
- ClashのログでTUNインターフェース作成成功のメッセージを確認します。エラーやpermission deniedが出ていないことが重要です。
ip link showを実行し、設定した名前のインターフェースが表示されることを確認します。- Clashの接続画面で、テスト用ドメインの通信が指定したプロキシグループへ割り当てられているか確認します。
- ブラウザーだけでなく、ターミナルからHTTPS通信を実行して、GUIアプリ以外でも動作するかを調べます。
- 国内サービスを開き、ルールに従ってDIRECTになっているか確認します。
外部IP確認サイトの結果は、プロキシノードの地域やサービス側の判定によって変わります。IPが変わらない場合は、ルールがDIRECTになっていないか、TUNがアプリケーションの通信を取り込めているか、IPv6が別経路で接続していないかを確認してください。IPv4だけ成功してIPv6で失敗する場合は、当面 ipv6: false で挙動を比較する方法もあります。
確認は一度に一つずつ
TUN、DNS、ルール、IPv6を同時に変更すると原因を特定できません。設定を一項目ずつ変更し、各段階でログと通信結果を記録してください。
DNSとルールの確認
ドメインがプロキシ経由でも、DNSだけがISPやローカルルーターへ送られているケースがあります。ClashのDNSログに問い合わせが記録されているか、OS側の resolvectl status が意図しないDNSを示していないかを確認します。さらに、ルールの末尾にあるMATCHが想定外のグループを指していないかも見てください。
ルールは上から順番に評価されるため、広い DOMAIN-SUFFIX を先に置くと、後ろに追加した細かなルールへ到達しないことがあります。テスト用に特定ドメインだけをプロキシへ送るルールを先頭へ置き、動作確認が終わったら全体の構成を整理すると安全です。
6失敗時の対処と復旧
TUNを有効にした直後に通信できなくなった場合は、慌てて複数の設定を削除せず、まずClashのTUNをオフにします。GUIへアクセスできない場合は、プロセスを停止してバックアップした設定へ戻し、ネットワーク管理サービスを再起動します。復旧後にログを確認すると、失敗した段階を特定しやすくなります。
インターフェースを作成できない
「operation not permitted」や「failed to open tun device」と表示される場合は、カーネルのTUNモジュール、権限、コンテナのデバイス割り当てを確認します。次のコマンドでデバイスの存在を確認できます。環境によっては管理者権限が必要です。
デバイスが存在しない場合、仮想マシンや特殊なホスティング環境ではTUN自体が提供されていない可能性があります。その場合、ホスト側で有効化を依頼するか、TUNを使わずシステムプロキシや特定アプリのプロキシ設定を利用する必要があります。
TUN後にインターネットが切断された
自動ルートがデフォルト経路を上書きし、Clash自身の接続までTUNへ戻してしまうと、プロキシが確立できず通信が停止することがあります。まず strict-route を無効にして比較し、LAN、ゲートウェイ、DNS、プロキシサーバーに必要な除外ルールを追加します。WireGuardや別VPNを併用している場合は、どのサービスがデフォルトルートを管理するかを一つに決めてください。
元の状態へ戻す手順
- ClashのTUNモードをオフにし、システムプロキシも一度無効にします。
- Clashのプロセスを停止し、仮想インターフェースが残っていないか確認します。
- 追加した設定を削除するか、バックアップした
config.yamlを復元します。 - NetworkManagerやsystemd-networkdを利用している場合は、必要に応じて接続を再起動します。
- ブラウザーとターミナルの両方で直接通信を確認してから、再設定を始めます。
復旧できない場合
SSH接続が失われたときは、何度も再起動を繰り返さず、プロバイダーのコンソールや物理端末からTUN設定とルートを戻してください。ネットワーク設定ファイルを無計画に削除するのは避けましょう。
まとめとおすすめ設定
Linux版Clash MetaのTUNモードは、アプリごとのプロキシ指定を減らし、デスクトップ全体の通信をルールで管理できる便利な機能です。特に、プロキシ設定を持たないターミナルツールやバックグラウンドサービスを扱う場合、システムプロキシだけでは得られない一貫性があります。一方で、仮想インターフェース、DNS、ルーティング、権限を同時に扱うため、設定を急いで複雑にしないことが安定運用のポイントです。
単純なシステムプロキシ設定は導入が早く、ネットワークを壊しにくい反面、対応していないアプリには効果がありません。別のVPNクライアントは導入が簡単な場合がありますが、国内外の通信を細かく分けたり、ドメイン単位でノードを選んだりする自由度は限られます。Clash Metaなら、ルール・DNS・プロキシグループを一つの設定で管理でき、ログを見ながら通信経路を調整できます。
- 段階的に導入できる:最初はTUNと自動ルートだけを有効にし、動作確認後にDNSやFake-IPを調整できます。
- ルールの透明性が高い:接続ログから、どのドメインがどのグループへ送られたかを確認できます。
- Linuxとの相性が良い:CLI、コンテナ、開発ツールなど、GUIのプロキシ設定を利用しない通信も対象にできます。
- 復旧しやすい:設定ファイルのバックアップとTUNの無効化を先に用意しておけば、問題発生時に元へ戻せます。
最初は信頼できるプロファイルを読み込み、TUN設定を最小構成で有効にしてください。その後、Clashのログ、ip route、DNSの問い合わせ結果を確認しながら、必要なルールだけを追加します。環境に合う設定が整えば、アプリごとにプロキシを指定する手間を減らしつつ、国内通信の速度と海外通信の安定性を両立できます。