Site Tools


software:freebsd:utp_ctrl_daemon

uTPControl - block uTP torrent proto

Версия: 1.05
Лицензия: BSD
Тестировалось на: FreeBSD 7.3
Скачать: uTPControl-1.05.tar.gz

Работать будет, но есть более качественная реализация: uTP (udp torrent) netgraph node:
- Работает полностью в ядре
- Ложные срабатывания практически исключены

Предназначена для “мягкого” отключения uTP протокола при прохождении шлюза/маршрутизатора.
Мягкое - пакеты не блокируются, при обнаружении пакетов очень похожих на uTP генерируются uTP RST пакеты с точно такими же IP/port и отправляются следом.
Даже если будет ложное срабатывание - все пакеты пройдут без изменений, и придут дополнительные, которые, скорее всего, будут отброшены принимающей программой как ошибочные.
Размер генерируемых пакетов менее 64 байт.

Требования

  1. Для запуска необходимо наличие IPDIVERT (загруженного модулем либо в ядре);
  2. ipfw для перенаправления траффика;
  3. ng_tee для отсылки копий udp пакетов из ipfw в divert сокет программы;
  4. Привилегии root (не проверял под другими пользователями)

подробнее см: man divert

Установка

Устанавливается на сервер, через который идёт траффик в/из интернета.

Скачиваем, и собираем из исходников.

В правила ipfw добавляем:

add tee 9999 udp from any to any via em0

9999 - порт диверт сокета, на котором будет висеть программа
em0 - интерфейс через который ходит трафик.

Запускаем саму программу, например так:

uTPControl -b 9999 -d -u nobody -g nogroup -p /var/run/uTPControl.pid

Ключи командной строки

-h - показать подсказки и выйти
-d - стать демоном (отключится от консоли и продолжить работу)
-b port - порт диверт сокета, на котором принимать данные от ipfw
-c CPUnum - привязка к процессору
-p PID file - путь к файлу куда сохранить PID на время работы, сам удалится по завершению программы
-u uid|user - идентификатор/логин пользователя под которым работать после запуска
-g gid|group - идентификатор/группа группа под которым работать после запуска

Оптимизация

Сама программа довольно проста: 1 сокет, 1 буффер, 1 поток.
Читаем из сокета, анализируем и пишем обратно при необходимости и тд. Запаса скорости по оптимизации кода практически нет.

Для более оптимальной работы заворачивать весь трафик на программу не нужно, и даже вредно.
Лучше всего будет заворачивать входящий из интернета в локальную сеть: эффект будет тот же, но меньшая нагрузка на интернет канал и на сам сервер, через который идёт трафик. И чужие юзера не получат ничего лишнего.

На нагруженных серверах не рекомендую применять без предварительного тестирования. Для начала хотя бы с маленьких сегментов стоит трафик позаворачивать и мониторить загрузку.

Проверка работоспособности

Скачиваем последний uTorrent (2 и более), в настройках ставим:

bt.transp_disposition = 10

(чтобы только по uTP всё качалось).
Закачиваем торрент файл, по популярнее какой нибудь, чтобы пиров было по больше.
Запускаем закачку в начале с выключенной программой uTPControl.
Смотрим чтобы появились пиры.
Запускаем uTPControl на сервере.
Если всё сделано правильно то пиры начнут исчезать из списка и за пару минут исчезнут полностью.

История изменений

2010.06.07 - 1.05

  • изменены опции сборки: уменьшен размер, увеличена скорость

2010.06.05 - 1.04

  • исправлена обработка расширений uTP пакета;
  • исправлено: некоторые старые клиенты (например uTorrent 1.8.2, BitTorrent 6.1.2) с uTP v0 протоколом были не подвержены влиянию программы;
  • оптимизирован код рассчитывающий контрольный суммы IP и UDP заголовков

2010.06.03 - 1.03

  • исправлена работа с ng интерфейсами
  • обрабатывается только входящий трафик на интерфейс
  • добавлен расчёт контрольной суммы IP пакета
  • добавлена доп инфа в отладочном выводе: номер ipfw правила, имя интерфейса

2010.06.02 - 1.02

  • небольшой фикс в функции изменения UID/GID
  • код перемещён в /src/, дистрибутив собирается автоматом

2010.06.01 - 1.01

  • первый публичный релиз
software/freebsd/utp_ctrl_daemon.txt · Last modified: 2022/02/05 04:19 by root