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

Mimic

Mimic — это сторонний инструмент, маскирующий UDP-пакеты под TCP. Hysteria имеет встроенную интеграцию с ним, поэтому вы можете включить его прямо в конфигурации, не настраивая mimic вручную.

Для промежуточных устройств на пути соединение Hysteria выглядит как TCP, а не UDP — это может быть предпочтительнее, а в некоторых ограничивающих сетях даже необходимо для работы Hysteria.

Обратите внимание, что это не означает, что Hysteria действительно использует TCP. Она по-прежнему использует QUIC поверх UDP, просто упакованный так, чтобы на канале выглядеть как TCP. Это форма обфускации, а не смена протокола.

Как это работает

Mimic присоединяет eBPF-программы к сетевому интерфейсу и переписывает пакеты при их отправке и получении: исходящие UDP-пакеты получают поддельный TCP-заголовок, у входящих он удаляется. Переписывание происходит ниже уровня сокета, поэтому Hysteria по-прежнему отправляет и принимает обычный QUIC.

Поскольку обе стороны должны использовать одну и ту же маскировку, mimic должен быть включён и на сервере, и на клиенте.

Предварительные требования

Mimic работает только в Linux и не поставляется вместе с Hysteria. На обеих машинах требуется:

  • Программа mimic, доступная в PATH (или указанная явно, см. ниже).
  • Загруженный модуль ядра (modprobe mimic).
  • Запуск самой Hysteria с правами root, так как присоединение eBPF-программ требует их.

Инструкции по установке смотрите в собственном руководстве mimic Getting Started, а полное описание команд — в mimic(1).

Вам не нужно настраивать systemd-сервис mimic или писать файл конфигурации для интерфейса. Hysteria запускает mimic и управляет им автоматически.

Конфигурация

Один и тот же блок mimic используется как в серверной, так и в клиентской конфигурации.

Минимальный пример:

mimic:
  enabled: true

В большинстве случаев достаточно enabled: true с обеих сторон.

Полный пример:

mimic:
  enabled: true # (1)!
  interface: eth0 # (2)!
  xdpMode: skb # (3)!
  path: /usr/bin/mimic # (4)!
  extraArgs: [] # (5)!
  1. Включить ли mimic. Должно совпадать на обеих сторонах.
  2. Интерфейс, к которому присоединяться. Необязательно; по умолчанию Hysteria выбирает тот, через который идёт трафик к другой стороне.
  3. Принудительный режим присоединения XDP, native или skb. Необязательно; не указывайте его, если только mimic не может присоединиться — такое бывает с драйверами, которые некорректно работают в режиме native.
  4. Путь к исполняемому файлу mimic. Необязательно; по умолчанию ищется в PATH.
  5. Дополнительные аргументы, передаваемые mimic без изменений, для настройки того, чему нет соответствия в Hysteria (параметры заполнения, рукопожатия и поддержания соединения). Необязательно.

Важные особенности

  • Сервер с включённым mimic недоступен без mimic. Клиенты, которые его не используют, не получают никакого ответа, и это выглядит как сетевая проблема, а не ошибка конфигурации. Включение mimic — ломающее изменение для существующих клиентов, планируйте переключение обеих сторон одновременно.

  • Его нельзя сочетать со сменой портов. Mimic сопоставляет трафик по одному адресу и порту, тогда как смена портов перемещает порт по диапазону. Hysteria отклоняет такую конфигурацию при запуске.

  • Один экземпляр mimic обслуживает всю машину. Поскольку mimic присоединяется к интерфейсу, а не к сокету, несколько процессов Hysteria, обращающихся к одному серверу, используют один экземпляр. Hysteria переиспользует уже запущенный, если его фильтры покрывают нужный адрес, и отказывается запускаться, если не покрывают, вместо того чтобы отправлять непереписанные пакеты.