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 используется как в серверной, так и в клиентской конфигурации.
Минимальный пример:
В большинстве случаев достаточно enabled: true с обеих сторон.
Полный пример:
mimic:
enabled: true # (1)!
interface: eth0 # (2)!
xdpMode: skb # (3)!
path: /usr/bin/mimic # (4)!
extraArgs: [] # (5)!
- Включить ли mimic. Должно совпадать на обеих сторонах.
- Интерфейс, к которому присоединяться. Необязательно; по умолчанию Hysteria выбирает тот, через который идёт трафик к другой стороне.
- Принудительный режим присоединения XDP,
nativeилиskb. Необязательно; не указывайте его, если только mimic не может присоединиться — такое бывает с драйверами, которые некорректно работают в режиме native. - Путь к исполняемому файлу mimic. Необязательно; по умолчанию ищется в
PATH. - Дополнительные аргументы, передаваемые mimic без изменений, для настройки того, чему нет соответствия в Hysteria (параметры заполнения, рукопожатия и поддержания соединения). Необязательно.
Важные особенности
-
Сервер с включённым mimic недоступен без mimic. Клиенты, которые его не используют, не получают никакого ответа, и это выглядит как сетевая проблема, а не ошибка конфигурации. Включение mimic — ломающее изменение для существующих клиентов, планируйте переключение обеих сторон одновременно.
-
Его нельзя сочетать со сменой портов. Mimic сопоставляет трафик по одному адресу и порту, тогда как смена портов перемещает порт по диапазону. Hysteria отклоняет такую конфигурацию при запуске.
-
Один экземпляр mimic обслуживает всю машину. Поскольку mimic присоединяется к интерфейсу, а не к сокету, несколько процессов Hysteria, обращающихся к одному серверу, используют один экземпляр. Hysteria переиспользует уже запущенный, если его фильтры покрывают нужный адрес, и отказывается запускаться, если не покрывают, вместо того чтобы отправлять непереписанные пакеты.