mudfish-excludeユーザーガイド
このプログラムは Mudfish Cloud VPN 6.5.4 以降でのみ利用可能です。
mudfish-excludeは、Linux用Mudfishの特定のプログラムのみをMudfishパスから除外して実行するコマンドラインツールです。特に、Full VPNモードを使用しながら、ブラウザ、メッセンジャー、ビデオプレーヤー、ダウンロードツールなどのトラフィックは、既存のインターネット回線に直接送信したい場合に使用できます。
通常のプログラム -> Mudfishの経路 -> 中継サーバー
mudfish-excludeアプリ -> 元のデフォルト経路 -> インターネット
このツールはMudfishダッシュボードに設定を追加しません。除外するプログラムを通常の実行コマンドの代わりに mudfish-excludeで起動するだけです。
サポート範囲: 現在、LinuxとIPv4のみをサポートしています。 Windows、macOS、Androidでは使用できず、IPv6トラフィックには別のバイパスポリシーは適用されません。
必要な環境
次の条件がすべて必要です。
- Linux用Mudfishがインストールされている必要があります。
- cgroup v2
/sys/fs/cgroupにマウントされている必要があります。 ipとiptablesコマンドとiptablesのcgroup match機能が利用可能である必要があります。- ポリシールーティングとファイアウォールルールを設定できるようにする
sudo権限が必要です。 - Linuxのメインルーティングテーブルには通常のIPv4デフォルトパスが必要です。
インストールされた実行可能ファイルは通常、次の場所にあります。
/opt/mudfish/<Mudfishのバージョン>/bin/mudfish-exclude
現在のインストール・パスは、次のコマンドで見つけることができます。
ls /opt/mudfish/*/bin/mudfish-exclude
実行可能ファイル PATHに登録されていない場合は、以下の例の mudfish-excludeを上記で確認したフルパスに置き換えます。たとえば、バージョン6.5.4のデフォルトのインストールパスは、 /opt/mudfish/6.5.4/bin/mudfish-excludeです。
基本使用法
- Mudfishを実行し、目的のアイテムまたはFull VPNモードを正常に接続します。
- 除外するプログラムがすでに実行されている場合は、トレイまたはバックグラウンドプロセスまで完全に終了します。
- 端末で次の形式でプログラムを再実行します。
sudo mudfish-exclude <プログラム> [プログラムのオプション...]
たとえば、Discord を Mudfish から除外するには、次のように実行します。
sudo mudfish-exclude discord
Firefoxを除いてプライバシーウィンドウを開くには、次のように実行します。
sudo mudfish-exclude firefox --private-window
実行可能ファイルのパスにスペースがある場合は、引用符で囲みます。
sudo mudfish-exclude "/path/to/My Program" --option
sudoはネットワークポリシーを設定するために使用されます。 sudo mudfish-exclude ...で実行したプログラム自体は、可能な場合 sudoを呼び出した元のユーザーのUID、GID、ホームディレクトリ、およびデスクトップセッション環境で実行されます。
知っておくべき点
- 除外ポリシーは
mudfish-excludeで新しく開始されたプロセスとその子プロセスに適用されます。 - すでに実行されているプログラムにポリシーを後で付けることはできません。シングルインスタンスプログラムが既存のプロセスを再利用しないようにするには、まず完全にシャットダウンする必要があります。
- 通常の1回実行方法では、プログラムと子プロセスの両方が終了すると、ポリシーは自動的にクリーンアップされます。
- 複数
mudfish-excludeコマンドを同時に実行できます。共通ポリシーは、最後の除外プログラムが終了した後にクリーンアップされます。 - 除外されたプログラムのIPv4トラフィックは、Mudfish中継サーバー、アクセラレーション機能、およびその経路のパブリックIPを使用しません。
正常動作確認
Full VPN 接続前のパブリック IPv4 アドレスと Full VPN 中継サーバーのパブリック IPv4 アドレスが異なる場合に最も簡単に確認できます。
まず、Full VPNが接続されている一般端末でアドレスを確認します。
curl -4 https://myip.mudfish.net
同じコマンドを mudfish-excludeで実行します。
sudo mudfish-exclude curl -4 https://myip.mudfish.net
最初の結果はMudfish中継サーバー側アドレス、2番目の結果は既存のインターネット回線のアドレスとして表示する必要があります。 -4は、このツールのサポート範囲に合わせてIPv4でのみチェックするためのオプションです。
ブラウザで確認するときは、ブラウザを完全に終了してから次のように実行してください。 https://myip.mudfish.netに接続してください。
sudo mudfish-exclude firefox
終了とポリシーのクリーンアップ
正常終了時に別途クリーンアップコマンドは必要ありません。ただ mudfish-exclude プロセスを強制終了した場合、端末が異常終了した場合、またはシステムがハングしている場合は、ポリシーが残ることがあります。
最初にこのツールで実行されたプログラムをすべて終了し、次のコマンドを実行します。
sudo mudfish-exclude --cleanup
実行中の除外プログラムがある場合
--cleanupを使用すると、プログラムのバイパスがすぐに中断される可能性があります。
コマンド・オプション
使用法: mudfish-exclude [オプション] プログラム [プログラムのオプション...]
| オプション | 説明 |
|---|---|
-h, --help | ヘルプを出力します。 |
--setup | 除外用のネットワークポリシーのみを設定して終了します。プログラムを一緒に指定することはできません。 |
--cleanup | 除外用のネットワークポリシーを削除して終了します。プログラムを一緒に指定することはできません。 |
--no-setup | 既存のポリシーをリセットせずに指定したcgroupに入り、プログラムを実行します。 |
--cgroup NAME | 使用する cgroup v2 名を指定します。デフォルトは mudfish-excludeです。 |
--mark VALUE | パケットに使用するファイアウォールマークを指定します。デフォルトは 0x6d660001です。 |
--priority VALUE | IPv4ポリシー・ルールの優先順位を指定します。デフォルトは 8252です。 |
--table VALUE | 既存の基本パスを保持するルーティングテーブル番号を指定します。デフォルトは 8252です。 |
オプションの解釈を明確にするには -- の後にプログラムを書き込むことができます。
sudo mudfish-exclude -- firefox --private-window
複数のプログラムでポリシーを再利用する
一般ユーザーは、プログラムごとに1回実行する方法をお勧めします。ポリシーを手動で一度設定した後に複数のコマンドで再利用する必要がある場合は、次の順序で実行できます。
sudo mudfish-exclude --setup
sudo mudfish-exclude --no-setup discord
sudo mudfish-exclude --no-setup firefox
すべてのプログラムを終了してからポリシーをクリーンアップします。
sudo mudfish-exclude --cleanup
手動方式は自動クリーンアップを行いません。また、一部のデスクトッププログラムは、実行中にsystemdの他のcgroupに移動する可能性があるため、これらのプログラムでは、cgroupの移動を追跡して自動クリーンアップする基本的な1回の実行方法がより適しています。
--cgroup, --mark, --priority, --table の値を変更した場合 --setup, --no-setup, --cleanupですべて同じ値を使用する必要があります。カスタム値は、システムの既存のファイアウォールマークまたはポリシールーティングルールと競合しないでください。
トラブルシューティング
mudfish-exclude: command not found
実行可能ファイル PATHに含まれていません。次のコマンドでインストール場所を見つけて、フルパスで実行します。
ls /opt/mudfish/*/bin/mudfish-exclude
sudo /opt/mudfish/6.5.4/bin/mudfish-exclude discord
2番目のコマンドのバージョン番号は、インストールされているバージョンに合わせて置き換える必要があります。
network policy setup requires root
ネットワーク・ポリシーの設定権限がありません。コマンドの前に sudoを貼り付けて再実行してください。
sudo mudfish-exclude discord
cgroup v2 is required at /sys/fs/cgroup
現行システムは cgroup v2 を使用していないか、その場所にマウントしていません。次のコマンドで確認できます。
test -f /sys/fs/cgroup/cgroup.controllers && echo "cgroup v2が利用可能"
何も出力されない場合は、ディストリビューションの cgroup v2 を有効にする方法を確認する必要があります。
iptables rule add failed またはcgroup matchエラー
iptablesがインストールされていること、カーネルとiptablesがcgroup matchをサポートしていることを確認してください。 nftablesベースのディストリビューションでも、このツールは iptables 互換コマンドを直接使用するため、通常のiptables互換層が必要です。
failed to find the IPv4 default route
main ルーティングテーブルで既存のインターネット回線の IPv4 デフォルトルートが見つからない状態です。次のコマンドの結果 default パスがあることを確認してください。
ip -4 route show default table main
デフォルトパスがない場合、またはすでに別の VPN インターフェイスを指している場合 mudfish-excludeは元のインターネットパスを設定できません。
除外してもパブリック IP が変わらない
以下を順番に確認してください。
- Full VPNモードが実際に接続されており、通常の実行時に中継サーバーのIPが表示されることを確認してください。
- ターゲットプログラムの既存のプロセスとバックグラウンドプロセスの両方を終了して再実行します。
- IPv6結果と混同しないように
curl -4またはIPv4検証方法を使用してください。 - ターゲットプログラムが別のサービスまたはすでに実行されているランチャーにコマンドを渡す構造であることを確認してください。除外方針は
mudfish-excludeは、新しく作成されたプロセス系統にのみ適用されます。 ip -4 route show default table mainのデフォルトパスが実際のインターネットインターフェースを指していることを確認してください。
プログラムを閉じたが端末コマンドが終了しない
子プロセスまたはバックグラウンド・プロセスがまだ除外 cgroup で実行されている可能性があります。関連するトレイアイコン、ランチャー、アップデートプロセスまですべて終了します。デフォルトの実行方法は、子プロセスがすべて終了するのを待ってからポリシーをクリーンアップします。
異常終了後にネットワークが異常
このツールで実行したプログラムをすべて終了した後、残りのポリシーをクリーンアップします。
sudo mudfish-exclude --cleanup
その後も問題が解決しない場合は、Mudfishを終了してシステムのデフォルトパスとiptablesルールを確認してから再接続してください。
動作原理
mudfish-excludeは実行するプログラムを別の cgroup v2 に入れ、その cgroup で発生した IPv4 パケットに iptables mark を設定します。そのマークを持つパケットは、別々のポリシールーティングテーブルを介してLinuxメインルーティングテーブルで見つかったデフォルトパスに転送され、必要なNAT MASQUERADEが適用されます。
このプロセスは mudrun, mudflow, mudfish, mudwfp_proxyの設定や共有メモリの状態を変更しません。除外ポリシーは、オペレーティングシステムのcgroup、iptables、IPv4ポリシールーティング層でのみ機能します。