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 的 main 路由表必須有健康的預設路由 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 <程式> [程式選項...]
例如,若要從 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 VALUE | IPv4 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即使排除後也不會改變
請依序檢查以下各項:
- 驗證 Full VPN 模式是否實際連接,且中繼伺服器 IP 在正常執行期間可見。
- 終止目標程式的所有現有進程和背景進程並重新運行。
- 為避免與 IPv6 結果混淆,請使用
curl -4或 IPv4 驗證方法。 - 檢查目標程式是否將命令傳遞給單獨的服務或已執行的啟動器。排除策略僅適用於
mudfish-exclude新建立的進程沿襲。 - 驗證
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 層。