Windows・macOS・モバイル向けのClash解説は揃いつつありますが、開発用デスクトップやクラウド上のサーバで使う Linux(Ubuntu/Debian系) は、手順が分散しがちです。本記事では、GUIに頼らず コマンドラインでバイナリを配置 し、TUNモードでシステム全体のトラフィックを透明にプロキシし、systemdでブート時に自動起動するところまで、2026年時点の実務向けに一本化して説明します。
コアはコミュニティで広く使われている Clash Meta(Mihomo) を想定します。設定の考え方は Clash Meta の詳細ガイド と整合させ、クライアントの選び方は クライアント比較記事 と併読すると理解が早いです。
一、対象環境と前提(権限・カーネル)
手順は Ubuntu 22.04/24.04 LTS や Debian 12 を想定します。他ディストリビューションでも概ね同じですが、パッケージ名やサービス管理だけ差し替えてください。TUNを使うには root相当の権限 または CAP_NET_ADMIN が必要で、カーネルに /dev/net/tun が存在することが多いです。コンテナ内や一部の制限付きVPSではTUNが無効な場合があるため、その場合はホスト側の仕様を先に確認してください。
uname -m で確認します。x86_64 なら amd64、aarch64 なら arm64 向けを選びます。誤ったアーキテクチャのファイルを置くと実行段階で失敗します。
二、バイナリの配置と実行ユーザー
一般的には /usr/local/bin に実行ファイルを置き、設定は /etc/clash またはホーム直下の ~/.config/clash にまとめます。以下は例です(ファイル名は配布物に合わせてください)。
# Example: install binary and default dirs (run with sudo where needed)
sudo install -m 0755 mihomo-linux-amd64 /usr/local/bin/mihomo
sudo mkdir -p /etc/clash
sudo chown root:root /etc/clash
運用では専用ユーザー clash を作り、設定ディレクトリの所有者をそのユーザーに寄せる方法もよく使われます。後述の systemd ユニットで User= と合わせると、権限の境界が明確になります。
三、設定ファイルとサブスクリプション
config.yaml には、ポート(例:mixed-port)、ログレベル、プロキシプロバイダー、ルール、DNS、そして tun セクションを記述します。サブスクリプションURLはプロバイダーから取得し、Clash形式であることを確認してください。初回はルールセットの取得に時間がかかるため、ログで download や provider 関連のエラーが無いかを見ます。
DNSは fake-ip や redir-host など、利用シーンに合わせて選びます。TUNと併用する場合、DNS漏洩や初回名前解決の遅延を避けるため、設定全体の一貫性が重要です。細かなキーの意味は Clash Meta の解説 の DNS 章を参照してください。
四、TUNモード:透明プロキシとしての役割
HTTPプロキシだけでは拾えないアプリや curl 直叩きの通信も、TUNインターフェース 経由でClashのルールに載せられます。設定例のイメージは次のとおりです(値は環境に合わせて調整)。
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
stack には system や gvisor など実装があり、カーネルや負荷特性に応じて選びます。ルーティングを自動で合わせる auto-route は便利ですが、既存の静的ルートや別VPNと競合する場合は、トラブル時に一時的にオフにして切り分けます。
--cap-add=NET_ADMIN や /dev/net/tun のマウントが話題になります。同じマシンで別のトンネル製品が常駐している場合は、ルートやiptablesの競合に注意してください。
五、systemdで自動起動する
手動起動で問題がなければ、systemd ユニット に落とし込みます。以下は最小構成の例です。実際のパス・ユーザー名は環境に合わせて置き換えてください。
# /etc/systemd/system/clash.service
[Unit]
Description=Clash Meta (Mihomo)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=clash
Group=clash
ExecStart=/usr/local/bin/mihomo -d /etc/clash
Restart=on-failure
RestartSec=3
AmbientCapabilities=CAP_NET_ADMIN
CapabilityBoundingSet=CAP_NET_ADMIN
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
有効化と起動は次のコマンドです。
sudo systemctl daemon-reload
sudo systemctl enable --now clash.service
sudo systemctl status clash.service
journalctl -u clash.service -e
失敗時は journalctl に、権限不足・設定パス誤り・ポート競合・TUN作成失敗などのヒントが出ます。設定を直したあとは systemctl restart clash で反映します。
六、動作確認とトラブルシューティング
まず ss -lntp で待受ポートを確認し、ブラウザや curl で期待どおり出口が変わるかを見ます。国内サイトまで海外出口に流れている場合は、ルールが Rule モードになっているか、GEOIP や DOMAIN ルールが意図どおりかを再確認してください。
よくあるつまずき: (1) バイナリと設定のパス不一致、(2) サブスク取得失敗による起動後すぐのエラー、(3) 他プロセスとのポート衝突、(4) TUNが使えない環境で tun をオンにした、(5) DNSだけが期待と違う。順にログと ip route、必要なら resolvectl status などで切り分けると早いです。
七、まとめ
Linuxでは「バイナリ+設定+サービス」という三点セットさえ押さえれば、デスクトップでもサーバでも同じ考え方で再現できます。TUNを使えばアプリ横断のトラフィック制御がしやすく、systemd に載せれば再起動後も安定して同じ状態に戻せます。他プラットフォーム向けの手順とあわせ、チーム内のドキュメントとしても使いやすい構成です。
同種のツールと比べて、Clash Meta 系はルール表現とエコシステムの厚みで運用しやすい場面が多く、長時間の接続やルール更新の扱いにも強みがあります。GUI前提でなくても、設定の見通しと再現性は十分に確保できます。