Защита от торрентов
Блокировка 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 работает сама по себе.