Перенаправление и TProxy — mihomo
mihomo предлагает два способа объявить входящие прозрачного прокси Linux: верхнеуровневые ключи-сокращения (redir-port и tproxy-port) либо унифицированную форму listeners: (type: redir, type: tproxy).
Верхнеуровневые сокращения
Задаются в корне документа; простейшая форма:
redir-port: 7892 # TCP only (iptables REDIRECT mode)
tproxy-port: 7893 # TCP + UDP (iptables/nftables TPROXY mode)Оба подробно описаны на странице Основы.
Форма слушателя
Для нескольких экземпляров или большего контроля объявляйте в listeners::
type: redir
listeners:
- name: redir-in
type: redir
listen: 127.0.0.1
port: 7892RedirOption несёт только унаследованный BaseOption (listen, port, name).
type: tproxy
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
udp | bool | false | true | false | Слушать и UDP-пакеты. TPROXY — единственный способ прозрачного проксирования UDP в Linux. |
Исходный код: listener/inbound/tproxy.go:13-16 · зафиксировано на v1.19.29 (e26714a)
listeners:
- name: tproxy-in
type: tproxy
listen: 0.0.0.0
port: 7893
udp: trueНастройка iptables
REDIRECT (только TCP):
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 MIHOMOTPROXY (TCP + UDP):
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.
Сравнение с другими ядрами
- Xray-core использует входящий Dokodemo-door с
streamSettings.sockopt.tproxyдля обоих режимов. См. Перенаправление/TProxy — Xray-core. - sing-box предоставляет отдельные типы входящих
redirectиtproxyс именами в snake_case и теми же требованиями на стороне iptables. См. Перенаправление/TProxy — sing-box.
Исходный код: listener/inbound/tproxy.go:13-16 · v1.19.29 (e26714a)
