跳到主要内容

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 层。