Site Tools


software:freebsd:utp_ctrl_daemon

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
software:freebsd:utp_ctrl_daemon [2022/02/04 18:37]
– removed - external edit (Unknown date) 127.0.0.1
software:freebsd:utp_ctrl_daemon [2022/02/05 04:19] (current)
root
Line 1: Line 1:
 +====== uTPControl - block uTP torrent proto ======
 +**Версия**: 1.05\\
 +**Лицензия**: BSD\\
 +**Тестировалось на**: FreeBSD 7.3\\
 +**Скачать**: [[http://www.netlab.linkpc.net/download/software/uTPControl/uTPControl-1.05.tar.gz|uTPControl-1.05.tar.gz]]\\
  
 +<note important>Работать будет, но есть более качественная реализация: [[software:freebsd:ng_utp|uTP (udp torrent) netgraph node]]:\\
 +- Работает полностью в ядре\\
 +- Ложные срабатывания практически исключены</note>
 +
 +Предназначена для "мягкого" отключения uTP протокола при прохождении шлюза/маршрутизатора.\\
 +Мягкое - пакеты не блокируются, при обнаружении пакетов очень похожих на uTP генерируются uTP RST пакеты с точно такими же IP/port и отправляются следом.\\
 +Даже если будет ложное срабатывание - все пакеты пройдут без изменений, и придут дополнительные, которые, скорее всего, будут отброшены принимающей программой как ошибочные.\\
 +Размер генерируемых пакетов менее 64 байт.\\
 +
 +
 +===== Требования =====
 +  - Для запуска необходимо наличие IPDIVERT (загруженного модулем либо в ядре);
 +  - ipfw для перенаправления траффика;
 +  - ng_tee для отсылки копий udp пакетов из ipfw в divert сокет программы;
 +  - Привилегии root (не проверял под другими пользователями)
 +подробнее см: [[https://www.freebsd.org/cgi/man.cgi?query=divert&apropos=0&sektion=0&manpath=FreeBSD+7.3-RELEASE&arch=default&format=html|man divert]]
 +
 +
 +===== Установка =====
 +Устанавливается на сервер, через который идёт траффик в/из интернета.\\
 +
 +Скачиваем, и собираем из исходников.\\
 +
 +В правила ipfw добавляем:
 +<code>add tee 9999 udp from any to any via em0</code>
 +9999 - порт диверт сокета, на котором будет висеть программа\\
 +em0 - интерфейс через который ходит трафик.\\
 +
 +Запускаем саму программу, например так:\\
 +<code>uTPControl -b 9999 -d -u nobody -g nogroup -p /var/run/uTPControl.pid</code>
 +
 +
 +===== Ключи командной строки =====
 +**-h** - показать подсказки и выйти\\
 +**-d** - стать демоном (отключится от консоли и продолжить работу)\\
 +**-b port** - порт диверт сокета, на котором принимать данные от ipfw\\
 +**-c CPUnum** - привязка к процессору\\
 +**-p PID file** - путь к файлу куда сохранить PID на время работы, сам удалится по завершению программы\\
 +**-u uid|user** - идентификатор/логин пользователя под которым работать после запуска\\
 +**-g gid|group** - идентификатор/группа группа под которым работать после запуска\\
 +
 +
 +===== Оптимизация =====
 +Сама программа довольно проста: 1 сокет, 1 буффер, 1 поток.\\
 +Читаем из сокета, анализируем и пишем обратно при необходимости и тд. Запаса скорости по оптимизации кода практически нет.\\
 +
 +Для более оптимальной работы заворачивать весь трафик на программу не нужно, и даже вредно.\\
 +Лучше всего будет заворачивать входящий из интернета в локальную сеть: эффект будет тот же, но меньшая нагрузка на интернет канал и на сам сервер, через который идёт трафик. И чужие юзера не получат ничего лишнего.\\
 +
 +На нагруженных серверах не рекомендую применять без предварительного тестирования. Для начала хотя бы с маленьких сегментов стоит трафик позаворачивать и мониторить загрузку.\\
 +
 +
 +===== Проверка работоспособности =====
 +Скачиваем последний uTorrent (2 и более), в настройках ставим:
 +<code>bt.transp_disposition = 10</code>
 +(чтобы только по 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**
 +  * первый публичный релиз
 +
 +
 +{{tag>software freebsd linux net torrent deprecated mysoft}}
software/freebsd/utp_ctrl_daemon.txt · Last modified: 2022/02/05 04:19 by root