Skip to content

重定向 & TProxy — mihomo

mihomo 提供 两种 方式声明 Linux 透明代理入站:顶层快捷字段 (redir-porttproxy-port),或统一的 listeners: 形态 (type: redirtype: tproxy)。

顶层快捷字段

直接放在根文档上;最简形式:

yaml
redir-port: 7892      # 仅 TCP(iptables REDIRECT 模式)
tproxy-port: 7893     # TCP + UDP(iptables / nftables TPROXY 模式)

两者均在 基础 页面中有更详细说明。

Listener 形态

要使用多个实例或获得更多控制,请改放在 listeners: 下:

type: redir

yaml
listeners:
  - name: redir-in
    type: redir
    listen: 127.0.0.1
    port: 7892

RedirOption 只携带继承的 BaseOptionlistenportname)。

type: tproxy

字段类型默认值允许值描述
udpboolfalsetrue | false同时监听 UDP 包。在 Linux 上 TPROXY 是做透明 UDP 代理的唯一方式。

源码: listener/inbound/tproxy.go:13-16 · 锚定版本 v1.19.27 (5184081)

yaml
listeners:
  - name: tproxy-in
    type: tproxy
    listen: 0.0.0.0
    port: 7893
    udp: true

iptables 设置

REDIRECT(仅 TCP):

sh
iptables -t nat -N MIHOMO
iptables -t nat -A MIHOMO -d 192.168.0.0/16 -j RETURN
iptables -t nat -A MIHOMO -d 10.0.0.0/8 -j RETURN
iptables -t nat -A MIHOMO -p tcp -j REDIRECT --to-ports 7892
iptables -t nat -A OUTPUT -p tcp -j MIHOMO

TPROXY(TCP + UDP):

sh
iptables -t mangle -N MIHOMO
iptables -t mangle -A MIHOMO -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A MIHOMO -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A MIHOMO -p tcp -j TPROXY --on-port 7893 --tproxy-mark 0x1
iptables -t mangle -A MIHOMO -p udp -j TPROXY --on-port 7893 --tproxy-mark 0x1
iptables -t mangle -A PREROUTING -j MIHOMO

ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

要让 mihomo 全程接管 iptables 配置,优先使用顶层 iptables: 块 —— mihomo 会自行安装与清理 规则。

说明

  • 顶层快捷字段(tproxy-port)与 listener 形态(type: tproxy) 可以共存。当需要多个绑定地址、或在同一守护进程上混合透明代理与 其他入站类型时,使用 listener 形态。
  • redir-porttype: redir 监听器 仅 TCP。需要透明 UDP 时用 tproxy-port 或带 udp: truetype: tproxy
  • mihomo 的 iptables: 块(见 iptables) 自动化了标准模式的规则配置 —— 设 iptables.enable: true 即可让 mihomo 自行管理规则。
  • TPROXY 仅 Linux。macOS / Windows 请改用 TUN

跨内核说明

源码: listener/inbound/tproxy.go:13-16 · v1.19.27 (5184081)

由 Argsment 出品的 Core Tutorial