Перейти к содержанию

TUN

tun:
  enable: true
  stack: system
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53
  device: utun0
  mtu: 9000
  strict-route: true
  gso: true
  gso-max-size: 65536
  udp-timeout: 300
  iproute2-table-index: 2022
  iproute2-rule-index: 9000
  endpoint-independent-nat: false
  route-address-set:
    - ruleset-1
  route-exclude-address-set:
    - ruleset-2
  route-address:
    - 0.0.0.0/1
    - 128.0.0.0/1
    - "::/1"
    - "8000::/1"
  route-exclude-address:
  - 192.168.0.0/16
  - fc00::/7
  include-interface:
  - eth0
  exclude-interface:
  - eth1
  include-uid:
  - 0
  include-uid-range:
  - 1000:9999
  exclude-uid:
  - 1000
  exclude-uid-range:
  - 1000:9999
  include-android-user:
  - 0
  - 10
  include-package:
  - com.android.chrome
  exclude-package:
  - com.android.captiveportallogin

## Устаревший синтаксис
  inet4-route-address:
  - 0.0.0.0/1
  - 128.0.0.0/1
  inet6-route-address:
  - "::/1"
  - "8000::/1"
  inet4-route-exclude-address:
  - 192.168.0.0/16
  inet6-route-exclude-address:
  - fc00::/7

enable

Включение tun

stack

Стек режима tun, если нет проблем с использованием, рекомендуется использовать стек mixed, по умолчанию используется gvisor

Возможные значения: system/gvisor/mixed

Различия между стеками протоколов

  • system использует системный стек протоколов, обеспечивает более стабильный/комплексный опыт работы с tun и потребляет относительно меньше ресурсов, чем другие стеки
  • gvisor реализует сетевой стек протоколов в пользовательском пространстве, обеспечивая повышенную безопасность и изоляцию, а также позволяет избежать переключений между ядром операционной системы и пользовательским пространством, что в определенных ситуациях может обеспечить лучшую производительность обработки сети
  • mixed смешанный стек, tcp использует стек system, udp использует стек gvisor, опыт использования может быть относительно лучше
  • Простое тестирование производительности
  • Если включен брандмауэр, невозможно использовать стеки протоколов system и mixed. Разрешите ядро через:
    • Windows: Параметры -> Центр безопасности Windows -> Разрешить приложение через брандмауэр -> Выберите ядро
    • MacOS: Обычно настройка не требуется, брандмауэр по умолчанию разрешает подписанное ПО. Если при включенном брандмауэре возникают проблемы, попробуйте разрешить: Системные настройки -> Сеть -> Брандмауэр -> Параметры -> Добавить приложение mihomo
    • Linux: Обычно настройка не требуется, брандмауэр по умолчанию не блокирует приложения. Если при включенном брандмауэре возникают проблемы, попробуйте разрешить исходящий трафик для TUN-интерфейса (предположим, что TUN-интерфейс называется Mihomo): sudo iptables -A OUTPUT -o Mihomo -j ACCEPT

device

Указывает имя TUN-устройства, на устройствах MacOS можно использовать только имена сетевых карт, начинающиеся с utun

auto-route

Автоматическая настройка глобальной маршрутизации, автоматически направляет весь глобальный трафик в TUN-устройство

auto-redirect

Поддерживается только на Linux, автоматически настраивает iptables/nftables для перенаправления TCP-соединений, требует включенного auto-route

На Android:

Перенаправляет только локальные IPv4-соединения. Для совместного использования VPN-соединения через точку доступа или ретранслятор используйте VPNHotspot.

На Linux:

auto-redirect с auto-route теперь может работать на роутерах без вмешательства, как и ожидалось.

auto-detect-interface

Автоматически определяет интерфейс для исходящего трафика. На устройствах с несколькими сетевыми картами, подключенными одновременно, рекомендуется вручную указать исходящую сетевую карту

dns-hijack

Перехват DNS, направляет соответствующие соединения во внутренний модуль dns, если протокол не указан, то используется udp://

  • На MacOS/Windows невозможно автоматически перехватывать DNS-запросы, отправляемые в локальную сеть
  • На Android при включенном Частном DNS невозможно автоматически перехватывать DNS-запросы

strict-route

Применяет строгие правила маршрутизации при включенном auto-route

На Linux:

  • Делает недоступными неподдерживаемые сети
  • Маршрутизирует все соединения через tun

Это предотвращает утечку адресов и обеспечивает работу перехвата DNS на Android.

На Windows:

Это может привести к тому, что некоторые приложения (например, VirtualBox) не будут работать должным образом в определенных ситуациях.

mtu

Максимальная единица передачи, влияет на скорость в экстремальных условиях. Обычным пользователям достаточно значения по умолчанию.

gso

Включает Generic Segmentation Offload, поддерживается только на Linux

gso-max-size

Максимальная длина блоков данных

udp-timeout

Время истечения UDP NAT в секундах, по умолчанию 300 (5 минут)

iproute2-table-index

Индекс таблицы маршрутизации iproute2, создаваемой auto-route, по умолчанию используется 2022

iproute2-rule-index

Начальный индекс правил iproute2, создаваемых auto-route, по умолчанию используется 9000

endpoint-independent-nat

Включает NAT, независимый от конечной точки. Производительность может немного снизиться, поэтому не рекомендуется включать, если в этом нет необходимости.

route-address-set

Добавляет правила целевых IP CIDR из указанного набора правил в брандмауэр, несоответствующий трафик обходит маршрутизацию. Поддерживается только на Linux и требует nftables, а также включенных auto-route и auto-redirect.

Конфликтует с routing-mark в любой конфигурации

route-exclude-address-set

Добавляет правила целевых IP CIDR из указанного набора правил в брандмауэр, соответствующий трафик обходит маршрутизацию. Поддерживается только на Linux и требует nftables, а также включенных auto-route и auto-redirect.

Конфликтует с routing-mark в любой конфигурации

route-address

Маршрутизирует пользовательские сегменты сети вместо маршрута по умолчанию при включенном auto-route. Обычно не требует настройки.

route-exclude-address

Исключает пользовательские сегменты сети при включенном auto-route

include-interface

Ограничивает маршрутизируемые интерфейсы, по умолчанию без ограничений. Конфликтует с exclude-interface, не может быть настроено одновременно.

exclude-interface

Исключает интерфейсы из маршрутизации. Конфликтует с include-interface, не может быть настроено одновременно.

include-uid

Включает пользователей, чей трафик будет маршрутизирован через Tun. Пользователи, не указанные в настройке, не будут маршрутизированы через Tun. По умолчанию без ограничений.

Правила UID поддерживаются только на Linux и требуют auto-route

include-uid-range

Включает диапазоны пользователей, чей трафик будет маршрутизирован через Tun. Пользователи, не указанные в настройке, не будут маршрутизированы через Tun.

exclude-uid

Исключает пользователей, чей трафик не будет маршрутизирован через Tun.

exclude-uid-range

Исключает диапазоны пользователей, чей трафик не будет маршрутизирован через Tun.

include-android-user

Включает пользователей Android, чей трафик будет маршрутизирован через Tun. Пользователи, не указанные в настройке, не будут маршрутизированы через Tun.

Правила для пользователей и приложений Android поддерживаются только на Android и требуют auto-route

Частые пользователи ID
Владелец устройства 0
Второй профиль 10
Многоэкземплярные приложения 999

include-package

Включает пакеты приложений Android, чей трафик будет маршрутизирован через Tun. Пакеты приложений, не указанные в настройке, не будут маршрутизированы через Tun.

exclude-package

Исключает пакеты приложений Android, чей трафик не будет маршрутизирован через Tun.

Устаревший синтаксис, скоро будет удален

inet4-route-address

Маршрутизирует пользовательские сегменты сети вместо маршрута по умолчанию при включенном auto-route. Обычно не требует настройки.

inet6-route-address

Маршрутизирует пользовательские сегменты сети вместо маршрута по умолчанию при включенном auto-route. Обычно не требует настройки.

inet4-route-exclude-address

Исключает пользовательские сегменты сети при включенном auto-route

inet6-route-exclude-address

Исключает пользовательские сегменты сети при включенном auto-route

Тестирование производительности сетевых стеков Tun

Сверху вниз: system/gvisor/lwip, только для справки, платформа - linux, Windows и MacOS могут иметь различия

iperf