Mihomo TUN 模式断网:ip_forward 与 UFW Forward 策略

mihomo 用 TUN 模式(stack: systemauto-route: true)时,启动后全局断网,SSH 也掉线。问题不在 mihomo 配置本身,而是系统两个网络转发设置没开。

原因

stack: system 让 mihomo 依赖内核网络栈转发 TUN 流量。auto-route: true 会接管默认路由,把所有流量导入 TUN 网卡。但内核需要两个条件才能转发:

  1. net.ipv4.ip_forward 必须为 1
  2. 防火墙 forward 链不能 DROP

Arch Linux 默认 ip_forward=0,UFW 默认 DEFAULT_FORWARD_POLICY="DROP"。两个都挡着,流量进了 TUN 就出不去。

修复

开启 ip_forward:

echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-mihomo.conf
sudo sysctl -p /etc/sysctl.d/99-mihomo.conf

UFW forward 改为 ACCEPT:

sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
sudo ufw reload

改完启动 mihomo。

另一个选择

不想改系统转发配置的话,可以把 config.yaml 里 tun.stacksystem 改成 gvisor。gvisor 在用户态处理 TCP/IP,不依赖内核转发,但性能略低。