Skip to content

Перенаправление и TProxy — mihomo

mihomo предлагает два способа объявить входящие прозрачного прокси Linux: верхнеуровневые ключи-сокращения (redir-port и tproxy-port) либо унифицированную форму listeners: (type: redir, type: tproxy).

Верхнеуровневые сокращения

Задаются в корне документа; простейшая форма:

yaml
redir-port: 7892      # TCP only (iptables REDIRECT mode)
tproxy-port: 7893     # TCP + UDP (iptables/nftables TPROXY mode)

Оба подробно описаны на странице Основы.

Форма слушателя

Для нескольких экземпляров или большего контроля объявляйте в listeners::

type: redir

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

RedirOption несёт только унаследованный BaseOption (listen, port, name).

type: tproxy

ПолеТипПо умолчаниюДопустимые значенияОписание
udpboolfalsetrue | falseСлушать и UDP-пакеты. TPROXY — единственный способ прозрачного проксирования UDP в Linux.

Исходный код: listener/inbound/tproxy.go:13-16 · зафиксировано на v1.19.29 (e26714a)

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

Для аккуратной настройки iptables силами самого mihomo предпочитайте верхнеуровневый блок iptables: — mihomo сам устанавливает и убирает правила.

Примечания

  • Верхнеуровневое сокращение (tproxy-port) и форма слушателя (type: tproxy) могут сосуществовать. Используйте форму слушателя, когда нужно несколько адресов привязки или сочетание прозрачного прокси с другими типами входящих в одном демоне.
  • redir-port и слушатель type: redirтолько TCP. Для прозрачного UDP используйте tproxy-port или type: tproxy с udp: true.
  • Блок iptables: mihomo (см. iptables) автоматизирует настройку правил для стандартной схемы — задайте iptables.enable: true, и mihomo управляет правилами сам.
  • TPROXY доступен только в Linux. На macOS/Windows используйте вместо него TUN.

Сравнение с другими ядрами

Исходный код: listener/inbound/tproxy.go:13-16 · v1.19.29 (e26714a)

Core Tutorial от Argsment