mistgate Документация

Защита от торрентов

Блокировка BitTorrent на отдельной ноде — что она распознаёт, как блокирует на AmneziaWG и Hysteria2, что показывают её события и чего она поймать не может.

На этой странице

Многие хостеры отключают сервер после жалоб на скачивание через BitTorrent. Каждая нода умеет блокировать распознанный BitTorrent-трафик своих пользователей. По умолчанию защита выключена и включается для каждой ноды отдельно.

Как включить#

Откройте ноду, Настройки, отметьте Блокировать распознанный BitTorrent-трафик и нажмите Сохранить. Менять её могут владелец и помощники — как и остальные настройки ноды.

  • Агент ноды должен это уметь (Linux-агент, который сообщает torrentguard/1). У старого агента переключатель неактивен и подписан «Обнови агент на этой ноде, чтобы включить настройку»; см. Обновления. Выключить защиту можно всегда.
  • Сохранение изменения перезапускает профили Hysteria2 на ноде, чтобы уже открытые соединения не продолжали жить по старым правилам. Их пользователи переподключаются за секунды. Профили AmneziaWG не перезапускаются.

Что она распознаёт#

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

Метка протокола Что распознаётся
bittorrent_tcp Рукопожатие BitTorrent в начале TCP-потока.
bittorrent_dht Запрос DHT (запрос KRPC в bencode).
bittorrent_tracker Запрос к UDP-трекеру (connect, announce или scrape).
bittorrent_utp Начало соединения uTP: отдельный SYN с нулевой разницей временных меток.

Классифицируется только то, что отправляет клиент пользователя, и никогда — то, что приходит в ответ из интернета. Удалённый пир не может подставить пользователя под блокировку или событие специально собранным пакетом, а обычные ответы DHT, пакеты данных uTP или трафик QUIC не засчитываются.

Как она блокирует#

AmneziaWG#

Агент добавляет на путь пересылки свою таблицу nftables, mistgate_torrentguard. Агенту достаётся только трафик, который клиенты отправляют наружу через интерфейсы AmneziaWG ноды, и только начало каждого потока: первые пакеты TCP-соединения, которое открыл клиент, и UDP-датаграммы потока, на который ещё не было ответа. Трафик между двумя интерфейсами AmneziaWG не проверяется.

Когда пакет совпал, ядро помечает его соединение и отбрасывает этот пакет и все следующие пакеты соединения в обе стороны; совпавшая UDP-датаграмма отбрасывается. Всё остальное остаётся в ядре и до агента не доходит. Очередь работает по принципу fail-open: если агент перестал слушать, трафик идёт дальше без проверки, а не останавливается.

Hysteria2#

Движок Hysteria2 проверяет соединения, которые он открывает для своих пользователей. Исходящее TCP-соединение, первые байты которого — рукопожатие BitTorrent, закрывается; UDP-датаграмма с распознанным запросом отбрасывается. Остальной трафик того же пользователя продолжается. Пока поток нельзя распознать, движок придерживает не больше его первых 19 байт; TLS, HTTP и другой обычный трафик отличается от рукопожатия сразу.

Чего она поймать не может#

Распознавание работает по мере возможности. Проходят:

  • зашифрованный BitTorrent (message stream encryption);
  • BitTorrent внутри другого VPN или прокси;
  • web seeds по HTTPS;
  • фрагментированные пакеты и форматы, которых парсеры не знают.

Защита уменьшает число жалоб, но не гарантирует, что их не будет.

События#

Каждая заблокированная попытка — предупреждение torrent_attempt во вкладке События ноды, например «Возможная попытка BitTorrent от пользователя Alice» с подписью «протокол: tcp / bittorrent_tcp». Событие называет профиль, транспорт (tcp или udp) и протокол BitTorrent. Пользователя оно называет, только когда нода знает его наверняка: на Hysteria2 — вошедшего пользователя, на AmneziaWG — устройство, чей адрес в туннеле принадлежит ровно одному пользователю этого профиля. Иначе там написано «неизвестный пользователь».

Адреса не сохраняются: ни адрес клиента, ни адрес назначения не покидают ноду. События видны во вкладке События ноды и через API и MCP (events_search с кодом torrent_attempt).

Если часть для AmneziaWG не может запуститься на ноде — например, ядро не поддерживает очередь netfilter, — у ноды появляется предупреждение torrent_guard_degraded с причиной. Трафик AmneziaWG на этой ноде тогда идёт без проверки; часть для Hysteria2 работает сама по себе.

Править страницу на GitHub