По умолчанию торрент-клиент старается занять всю свободную полосу пропускания интернет-канала. Обусловлено это видимо желанием как можно быстрее отдать запрошенный пользователем файл. Однако такой подход приводит к эффекту вытеснения остального трафика на периферию. Чтобы этого избежать необходимо ограничивать торрент-клиентов в условиях совместно используемого внешнего канала. Можно это сделать в настройках самого торрент-клиента, а можно с помощью средств маршрутизатора. Второй путь предпочтительнее в силу его централизации.
Мой маршрутизатор собран на FreeBSD 7.3. Используется стандартная связка ipfw+nat, которая имеет красивое название "ядерный нат", так как работа ведется на уровне ядра фрюхи. Для управления величиной прохождения трафика через маршрутизатор ipfw использует модуль dummynet.ko. Его необходимо подгрузить к основному ядру. Делается это с помощью консольной команды kldload dummynet, или если требуется сохранение поведения системы при перезагрузке, указать в файле /etc/rc.conf строку
dummynet_enabled="YES"Теперь открываем файл с правилами ipfw и думаем ...
Первым делом назначаем торрент-клиенту порт для входящих подключений (пусть например это будет значение 55555). Этот порт разрешаем на файрволле для протоколов TCP и UDP. Далее создаем pipe и устанавливаем его максимальную пропускную способность (верхний предел скорости) командой
ipfw pipe 1 config bw 500Kbit/s
Значение 500Kbit/s соответствует приблизительно 50КБайт/с. Вы можете зафиксировать свой уровень ограничения скорости сверху. Определив таким образом pipe помещаем в него торрент-трафик следующей командой
ipfw add pipe 1 all from any to any 55555 in via re0
Заметьте, что re0 указывает на внешний сетевой интерфейс маршрутизатора - тот через который к нему поступает трафик из интернета.
Рестартим файрволл командой
/etc/rc.d/ipfw restart
и если все прошло успешно, можем качнуть какой-нибудь торрент-файл и посмотреть с какой скоростью он будет приниматься. Я для этого использовал торрент-клиент Transmission в Ubuntu.
P.S. Список загруженных модулей ядра можно посмотреть командой kldstat.
P.S. Список загруженных модулей ядра можно посмотреть командой kldstat.