Linux / Debian 12 · · 読了まで約 18 分

Debian 12 に Clash Meta(mihomo):バイナリ導入から systemd 自起動・mixed-port 初手順(2026)

Debian 12(bookworm)は LTS 志向のサーバーと、ミニマルなデスクトップの両方でよく選ばれますが、Ubuntu のような PPA 文化や、公式の「Clash 専用 deb 一本道」は期待しにくいのが現実です。そこで本稿は 上流が配布する静的バイナリ(mihomo コア)apt 周辺の作法に沿って置き、mixed-port を最初の設計軸に据えたうえで systemd による常駐とブート時自動起動までを、Debian 固有の前提(ファイル配置・リゾルバ・ファイアウォール)に寄せて整理します。職場・教育機関・ホスティング契約では利用が制限されている場合があります。導入前にポリシーを確認してください。

1. Debian 12 固有の前提と他稿との棲み分け

当サイトの Ubuntu に Clash Meta を deb で載せる記事は、dpkg と apt の一本道に最適化されています。一方 Debian 公式アーカイブだけを見ると、mihomo 本体が常にパッジングされているとは限らないため、実務では GitHub Release 等の静的リンクから取得したバイナリを /usr/local/bin に置くパターンが一般的です。検索で「Ubuntu の手順をそのまま」持ち込むと、パッケージ名・サービス名・ディレクトリ慣習のズレで戸惑いやすいので、本稿は bookworm を第一視点に立てています。

Fedora 向けの稿dnf と SELinux の話が前面に出ます。Arch 向けの稿は AUR や pacman の導線が軸です。Debian 12 では AppArmor が有効なことがある点は Ubuntu と近い一方、SELinux は通常オフです。最初の一歩として ループバック上の mixed-port だけを立て、カーネル越えの TUN や透明プロキシは後段に回すと、権限とポリシーの段階的な追加がしやすくなります。

購読 URL の扱いやプロファイルの考え方は、サブスクリプション導入ガイドと共通です。ルールの評価順は ルールルーティング解説を併読すると、mihomo 特有の挙動も追いやすくなります。

2. apt で入れる準備とバイナリの配置

展開と HTTPS 取得に必要な最低限を apt で入れます。最小インストールの VPS では curlca-certificates がまだないことがあります。

# Debian 12: common tools for download and extract
sudo apt update
sudo apt install -y curl ca-certificates tar gzip

バイナリは利用リリースのアーキテクチャ(amd64 か arm64 か)に合わせて取得します。ファイル名はリリースごとに変わるため、ここではプレースホルダにしています。uname -mx86_64aarch64 かを確認してから選んでください。日々のクライアント入手の第一候補は ダウンロードページに寄せ、Linux 向けビルドやドキュメントへ辿る運用が、手順の陳腐化を避けやすいです。

# Example: adjust archive name to match your release asset
sudo tar -C /usr/local/bin -xzf ./mihomo-linux-amd64-v*.gz
sudo mv /usr/local/bin/mihomo /usr/local/bin/clash-meta
sudo chmod 755 /usr/local/bin/clash-meta

実際の圧縮形式やトップレベルディレクトリの有無はビルドによって異なります。tar tf で中身を確認してから mv するのが安全です。サーバーでは /usr/local/bin を選ぶと、パッケージ更新のたびに上書きされにくいというメリットがあります。逆にセキュリティ監査で「承認済みパッケージ以外は置かない」方針なら、社内手順に合わせて配置パスを変えてください。

3. mixed-port を軸にした初回 config の骨格

mixed-port は、単一の TCP ポートで HTTP プロキシと SOCKS をまとめて待ち受けるための設定です。ブラウザの手動プロキシ、シェルの http_proxyhttps_proxy、一部アプリの「システムと同じ」設定を、同じ番号に揃えやすいのが利点です。初回はポート競合を避けるため、例では 7890 に固定します。すでに別の VPN や開発ツールが同番号を掴んでいないか、ss -lntp で確認してから決めてください。

以下は動作確認用のミニマム例です。実運用ではプロバイダから配られる購読を proxy-providersproxies に差し替え、ルールセットを足してください。ダミーのノード名は読み替えが必要です。

# Minimal skeleton — replace proxies and rules with your profile
mixed-port: 7890
bind-address: '*'
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: ""

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  nameserver:
    - 1.1.1.1

proxies:
  - name: placeholder
    type: ss
    server: 127.0.0.1
    port: 1
    cipher: dummy
    password: dummy

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - placeholder

rules:
  - MATCH,PROXY

external-controller を開く場合は secret を空にしないのが鉄則です。上記は説明用に空文字を置いているだけなので、実機ではランダムな文字列を設定し、API へはループバックからだけ届くようにしてください。bind-address を広げると LAN 共有の布石になりますが、allow-lan まわりの整理とセットで設計しないと、意図せず外向きのプロキシが露出します。

4. 設定ディレクトリと専用ユーザー

systemd で非対話ユーザとして動かすなら、ホームを設定ディレクトリにした専用ユーザーを作る方法が扱いやすいです。以降 /etc/clash-meta を例にします。

sudo mkdir -p /etc/clash-meta
sudo cp /path/to/your/config.yaml /etc/clash-meta/config.yaml
sudo useradd --system --home /etc/clash-meta --shell /usr/sbin/nologin clash 2>/dev/null || true
sudo chown -R clash:clash /etc/clash-meta

GeoIP や rule-providers のキャッシュがディレクトリ内に伸びる構成では、ディスククォータとローテーションも視野に入れてください。更新失敗の切り分けは rule-providers/GEOIP 更新の記事と補完関係にあります。

5. 手動起動での疎通確認

ユニット化の前に、サービスと同じユーザー・同じ -d でフォアグラウンドまたは短時間のバックグラウンド起動を試し、ログに致命的エラーがないことを確認します。

sudo -u clash -H /usr/local/bin/clash-meta -d /etc/clash-meta

別シェルから curl -x http://127.0.0.1:7890 https://example.com -I のように叩き、期待する経路に出ているかを見ます。ここで失敗しているのに systemd だけ整えても、同じ失敗がループするだけです。購読 URL が拒否されている、ルート CA が古い、プロキシ先のポートが閉じている、など OS 周辺の問題もこの段階で切り分けます。

6. systemd ユニット例と enable

/etc/systemd/system/clash-meta.service を作成します。パスは環境に合わせて必ず置き換えてください。

[Unit]
Description=Clash Meta (mihomo) on Debian 12
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=clash
Group=clash
WorkingDirectory=/etc/clash-meta
ExecStart=/usr/local/bin/clash-meta -d /etc/clash-meta
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

読み込みと有効化は次のとおりです。

sudo systemctl daemon-reload
sudo systemctl enable --now clash-meta.service
sudo systemctl status clash-meta.service

enable --now はブート時自動起動と即時起動を一度に行います。ノート PC ではサスペンド復帰後だけ挙動が変わることがあるため、その場合は NetworkManager の再接続後に systemctl restart clash-meta.service を織り込む余地もあります。サーバーでは network-online.target が期待どおり待てているか、クラウドイメージによっては調整が必要な場合があります。

7. journalctl と失敗時の止め方

ログは journal に集約されるため、journalctl -u clash-meta.service が第一の観測口になります。ブート単位で切り出すなら -b、追従なら -f を付けます。

journalctl -u clash-meta.service -b --no-pager
journalctl -u clash-meta.service -f

設定ミスで高速に落ちるループに入ったら、sudo systemctl stop clash-meta.service で一旦止め、文法とポートを直してから再開します。Restart=always は便利ですが、障害が長引くとログが埋め尽くされるので、初期検証では on-failure の方が安全です。

8. ufw・ローカル待受とデスクトップ代理

127.0.0.1 のみで mixed-port を Listen する構成であれば、外向きのファイアウォール穴あけは通常不要です。逆に bind-address を LAN 側に広げたり、別マシンから管理 API を触りたい場合は、nftables や ufw のルールを明示的に設計する必要があります。VPS では「プロキシを外向きに晒さない」が鉄則なので、まずはループバック固定から始めるのが無難です。

コアが systemd で立っていても、アプリがプロキシを知らなければトラフィックは流れません。GNOME では設定アプリのネットワーク/プロキシから 127.0.0.1mixed-port で指定した番号を手動プロキシに入力するのが素直です。シェルだけ通したい場合は export http_proxy=http://127.0.0.1:7890 のように環境変数を ~/.bashrc などへ追記します。

TUN まで広げたい場合の枠組みは TUN モード解説を参照しつつ、Debian カーネルと競合しがちな他製品 VPN の有無を先に洗い出してください。GUI クライアント併用の話は CFW 代替・移行ガイドとも読み替え可能です。

9. systemd-resolved と mihomo 側 DNS の距離感

Debian 12 のデスクトップや一部サーバーでは systemd-resolved127.0.0.53 を介して名前解決を握っています。mihomo 側で dns.listen を立てる構成にすると、ポート番号の衝突や、アプリがどのリゾルバを見に行くかのズレが表面化しやすいです。最初は mixed-port 経由の HTTP(S) だけを通し、DNS は段階的に寄せる、という割り切りも有効です。

すでに fake-ip と Sniffer を本格運用している場合は、ログに出るホスト名と実経路の一致を追う必要があります。IPv6 デュアルスタック環境では IPv6 漏れの稿も併読すると、Debian 上での切り分けが速くなります。

10. よくあるつまずき

ポート競合:以前の手動起動や別プロキシが残っていないか ss -lntp で確認します。権限エラーnamei -l /etc/clash-meta で所有者を追い、サービスユーザーに書き込みが必要なパスを揃えます。DNS だけおかしい:mihomo の DNS セクションと、resolved/NetworkManager が握っているリゾルバの関係を整理します。

apt full-upgrade 後にだけ壊れる:libc や OpenSSL の更新で TLS 挙動が変わった、rule-providers の取得先が変わった、などが考えられます。journal のエラー行を起点に、HTTP ステータスと証明書エラーを切り分けてください。

11. まとめ

Debian 12 では Ubuntu の deb 手順をそのまま当てはめられないぶん、最初に バイナリの実体・作業ディレクトリ・systemd ユニットを自分で揃える必要があります。その代わり、mixed-port を中心に据えたローカル代理から始めれば、ブラウザ・シェル・デスクトップ設定を同じ番号に寄せやすく、後から TUN や LAN 共有へ広げるときの軸もブレにくいです。会社の検証サーバーや、自宅の bookworm マシンでも、手順の骨格は同じです。

Fedora や Arch の稿と対照しながら読むと、パッケージマネージャの差の外側では同じ mihomo の設定言語が続いていることが把握しやすくなります。安定した入手導線とドキュメントがあると、試行錯誤のストレスも小さくなります。

まずは自分のアーキテクチャに合ったビルドを選び、購読を取り込んだうえで mixed-port とログを確認するのが確実です。Windows や macOS 向けの GUI ビルドも含め、 → 無料で Clash をダウンロードし、快適な接続体験を試す から環境にあったクライアントを選べます。

トピックの近さで選んだ関連記事 — 同じカテゴリの Clash 実践ガイド。