跳至主要内容

mudfish-exclude 使用者指南

資訊

此程式僅適用於 Mudfish Cloud VPN 6.5.4 或更高版本。

mudfish-exclude 是一個命令列工具,透過從 Mudfish 路徑中排除它們,僅執行 Linux 上的 Mudfish 上的特定程式。特別是,當您想要將瀏覽器、即時通訊工具、視訊播放器、下載工具等的流量直接傳送到現有的網路線路時,可以使用 Full VPN 模式。

일반 프로그램       -> 미꾸라지 경로 -> 중계 서버
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 的 main 路由表必須有健康的預設路由 IPv4。

安裝的可執行檔通常位於:

/opt/mudfish/<미꾸라지 버전>/bin/mudfish-exclude

可以透過以下命令找到目前的安裝路徑:

ls /opt/mudfish/*/bin/mudfish-exclude

如果可執行檔未在 PATH 下註冊,請將下方範例中的 mudfish-exclude 替換為您在上面看到的完整路徑。例如,版本6.5.4的預設安裝路徑是/opt/mudfish/6.5.4/bin/mudfish-exclude。

基本用法​

  1. 運行Mudfish並正常連接所需的項目或Full VPN模組。
  2. 如果要排除的程式已經在運行,請完全終止托盤或後台程序。
  3. 使用以下格式在終端機中重新運行程式:
sudo mudfish-exclude <프로그램> [프로그램 옵션...]

例如,若要從 Mudfish 中排除 Discord,請執行:

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 程序及其子程序。
  • 您以後無法將策略附加到已執行的程式。單一實例程式必須先乾淨地終止,以避免重複使用現有進程。
  • 在典型的一次運行方法中,當程式及其子程序終止時,策略會自動清除。
  • 可以同時執行多個 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的位址,第二個結果應該是您現有的Internet線路的位址。 -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指定用於 封包的防火牆 mark。預設為 0x6d660001。
--priority VALUEIPv4 policy rule 指定優先權。預設為 8252。
--table VALUE指定將包含現有預設路由的路由表編號。預設為 8252。

為了清楚地完成選項的解釋,可以在--之後編寫程式。

sudo mudfish-exclude -- firefox --private-window

跨多個程式重複使用策略​

對於一般用戶,建議使用執行一次程式方法。如果您需要手動設定一次策略,然後在多個命令中重複使用它,您可以按以下順序執行它:

sudo mudfish-exclude --setup
sudo mudfish-exclude --no-setup discord
sudo mudfish-exclude --no-setup firefox

關閉所有程序後,請務必清除該策略。

sudo mudfish-exclude --cleanup

手動方法不會執行自動清理。此外,某些桌面程式在運行時可能會從 systemd 移動到其他 cgroup,因此預設的運行一次方法(追蹤 cgroup 移動並自動清理)更適合這些程式。

如果更改了 --cgroup、--mark、--priority 和 --table 的值,則必須在 --setup、--no-setup 和 --cleanup 中使用相同的值。自訂值不得與系統上任何現有的防火牆 mark 或 policy routing 規則衝突。

疑難排解​

mudfish-exclude: command not found​

PATH 中不包含可執行檔。使用以下命令找到安裝位置並使用完整路徑運行它。

ls /opt/mudfish/*/bin/mudfish-exclude
sudo /opt/mudfish/6.5.4/bin/mudfish-exclude discord

必須替換第二個命令中的版本號以符合您安裝的版本。

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 路由表中找不到現有 Internet 線路的 IPv4 的預設路由。驗證下列指令結果中是否存在路徑 default:

ip -4 route show default table main

如果沒有預設路由或已經指向另一個 VPN 接口,則 mudfish-exclude 無法設定原始 Internet 路由。

官方IP即使排除後也不會改變​

請依序檢查以下各項:

  1. 驗證 Full VPN 模式是否實際連接,且中繼伺服器 IP 在正常執行期間可見。
  2. 終止目標程式的所有現有進程和背景進程並重新運行。
  3. 為避免與 IPv6 結果混淆,請使用 curl -4 或 IPv4 驗證方法。
  4. 檢查目標程式是否將命令傳遞給單獨的服務或已執行的啟動器。排除策略僅適用於 mudfish-exclude 新建立的進程沿襲。
  5. 驗證 ip -4 route show default table main 的預設路徑是否指向真實的 Internet 介面。

程式關閉時終端機命令未完成​

子進程或後台進程可能仍在排除的 cgroup 上運行。關閉所有關聯的托盤圖示、啟動器,甚至更新進程。預設的執行方式是等待所有子程序都執行完畢,然後清理策略。

非正常關機後網路異常​

關閉使用此工具運行的所有程式並清理所有剩餘的策略。

sudo mudfish-exclude --cleanup

如果此後問題仍然存在,請關閉 Mudfish,檢查系統預設路徑和 iptables 規則,然後重新連線。

它是如何運作的​

mudfish-exclude 將要執行的程式放置在單獨的 cgroup v2 中,並將 iptables mark 設定為從該 cgroup 產生的 IPv4 封包。具有對應 mark 的封包透過單獨的 policy routing 表轉送到 Linux main 路由表中找到的預設路由,並套用所需的 NAT MASQUERADE。

此進程不會修改 mudrun、mudflow、mudfish 或 mudwfp_proxy 的設定或共享記憶體狀態。排除策略僅適用於作業系統的 cgroup、iptables 和 IPv4 policy routing 層。