Назад | Перейти на главную страницу

как я могу ограничить пропускную способность для каждого пользователя?

Подводя итог: у меня есть выделенный сервер с несколькими друзьями, которые запускают торрент-клиент с веб-интерфейсом. Каждый пользователь запускает клиента под своим именем пользователя на сервере, поэтому загрузки идут в их каталог пользователя, и только они имеют доступ к своим файлам и т. Д.

Как я могу отслеживать и ограничивать пропускную способность в месяц для каждого пользователя?

Я думал, что должен быть способ использовать iptables. И путем мониторинга пропускной способности, используемой всеми процессами пользователя X. И если они использовали больше, чем их разрешенная ежемесячная пропускная способность Y ГБ, они получают сообщение о том, что и сеть блокируется для их торрент-клиента, или клиент полностью убит. Я также думал о squid, но, поскольку он будет использовать несколько торрент-клиентов, это может потребовать много ресурсов сервера ...

Я использую debian lenny.

Я не знаю, как это сделать ...

возможно ли это вообще? Я благодарен даже за частичное решение этого ...

Вы можете попробовать использовать --quota опция в iptables, которая позволяет вам установить лимит передачи в байтах. Поскольку вы используете несколько торрент-клиентов, каждый под другим именем пользователя, вы можете комбинировать это с --uid-owner вариант, как предложила Катриэль.

Таким образом, вы можете установить лимит передачи за период времени (день / неделя / месяц и т. Д.), Не ограничивая скорость загрузки ваших пользователей.

Чтобы сделать счетчики пакетов постоянными, вам нужно будет периодически сохранять их (например, с помощью задания cron), чтобы вы могли восстанавливать их в случае, если вам нужно перезагрузить сервер или сбросить правила брандмауэра.

Вы можете использовать команду формирования трафика tc.

Дайте каждому из ваших друзей другой порт для использования BitTorrent. Отметьте пакеты TCP с помощью iptables для каждого порта.

iptables -t mangle -A FORWARD -p tcp --sport 6881 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -p tcp --dport 6881 -j MARK --set-mark 100

Затем используйте команду tc, чтобы установить максимальную пропускную способность и скорость для каждого пользователя.

В конце месяца вы можете удалить и добавить команды «tc» для сброса счетчиков.

Вы можете отслеживать использование каждого пользователя следующим образом:

tc filter show dev ethX

Если вы используете Debian install shorewall, это действительно упрощает формирование трафика, не вмешиваясь в iptables. Вы просто редактируете tcdevices, tcclasses и tcrules в каталоге / etc / shorewall. Больше информации здесь: http://www.shorewall.net/traffic_shaping.htm

Как предположил другой человек, маркировка пакетов по имени пользователя, вероятно, лучше, чем по порту, таким образом порты могут быть изменены без обновления iptables.

Просто чтобы добавить к вышеупомянутому вопросу.

Вы можете использовать iptables с пользовательским соответствием, чтобы раскрасить пакеты следующим образом:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100

А затем используйте "tc" для ограничения на пользователя.

В зависимости от того, сколько ежемесячного трафика вы хотите разрешить каждому пользователю в месяц, вы можете установить соответствующий предел пропускной способности, используя некоторые инструменты, предложенные другими пользователями.

Например, предположим, что вы хотите установить максимальный лимит загрузки в 250 ГБ / месяц. Теперь, если вы разделите это на количество часов в месяце (~ 730), а затем на 3600, вы получите максимальную скорость загрузки, которая в этом примере будет 100 КБ / с.

Затем, если вы установите максимальную скорость DL 100 КБ / с, вы автоматически установите ограничение на загрузку 250 ГБ в месяц (при условии, конечно, что ваш формирователь трафика работает правильно). Если ваши пользователи не могут загружать быстрее 100 КБ / с, они не смогут загружать более 250 ГБ в месяц.

Чтобы ограничить скорость загрузки, вы можете использовать tc или некоторые другие упомянутые инструменты. Если вы не хотите напрямую заниматься tc, вы могли бы использовать cbq.init, который довольно просто настроить. Этот сценарий присутствовал в Debian Etch как shaper пакет, но, похоже, после этого он был удален. В любом случае, это простой скрипт, который вы можете скачать с SourceForge.

Конечно, этот подход может быть бесполезен в вашем случае (например, если вы хотите, чтобы ваши пользователи могли загружать файлы с максимальной доступной скоростью, но при этом соблюдать ваш ежемесячный лимит, мое предложение не сработает).

Я знаю, что это старый пост, но даже я наткнулся на него в поисках ответов сегодня, и в конце концов я собрал воедино то, что идеально мне подходит. У меня есть нисходящий канал 25 Мбит / с и восходящий канал 2,5 Мбит / с, и есть 4 человека и 5 серверов, разделяющих эту ссылку. с серверами пропускная способность восходящего канала критична, но нисходящий канал полезен с 4 людьми, поэтому никто не возьмется за все.

Я использую centos 6.3 в качестве маршрутизатора, но эти команды должны работать на любом Linux. eth0 - мой аплинк к провайдеру. eth1 - моя локальная сеть через 24-портовый коммутатор и точку доступа Wi-Fi. Я ограничиваю загрузку до 5 из 25 Мбит / с (примерно 500 КБ / сек). Я ограничиваю загрузку до 200 Кбит (примерно 25 КБ / сек).

tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 200Kbit ceil 200Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 5Mbit ceil 5Mbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

затем, чтобы ограничить пользователей, вы используете 2 строки iptables для каждого пользователя

чтобы ограничить загрузку:

iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.0.100 -j CLASSIFY --set-class 1:11

ограничить скачивание

iptables -t mangle -A POSTROUTING -o eth1 -p tcp -d 192.168.0.100 -j CLASSIFY --set-class 2:11

просто измените свой IP-адрес и порты eth в соответствии с тем, кого вы хотите ограничить

Для полноты картины существует демон пользовательского пространства, называемый trickle. Его можно использовать для ограничения пропускной способности одного процесса. Использование очень простое: например, чтобы ограничить полосу пропускания, используемую aptitude, вы можете написать: trickle -d 10 aptitude install wesnoth Однако, поскольку он работает с использованием LD_PRELOAD, его может легко переопределить пользователь с доступом к оболочке.

Взгляните на useripacct ядро патч (на самом деле это довольно длинный история). в документы для старой версии Похоже, что он также обеспечивает соблюдение квот, а также мониторинг, и также можно предоставить свои собственные сценарии политики.

Учитывая, что создателям useripacct пришлось прибегнуть к патчу ядра, чтобы получить желаемое поведение, маловероятно, что по умолчанию доступен более простой метод. Единственными альтернативами может быть ограничение пропускной способности (что-то вроде tc или trickle), как предлагается в большинстве других ответов здесь (но на самом деле не то, что вы ищете), или создание виртуальной машины для каждого пользователя (с использованием облегченной виртуализации ОС чем-то вроде OpenVZ) и учет трафика на виртуальную машину (что довольно легко оценить с помощью чего-то вроде vnstat). Хотя это кажется излишним (внезапно у вас есть куча виртуальных машин для администрирования вместо одной системы).