Подводя итог: у меня есть выделенный сервер с несколькими друзьями, использующими торрент-клиент с веб-интерфейсом. Каждый пользователь запускает клиент под своим именем пользователя на сервере, поэтому загрузки идут в его пользовательском каталоге, и только они имеют доступ к своим собственным файлам и т. Д.
Как я могу отслеживать и ограничивать пропускную способность в месяц для каждого пользователя?
Я думал, что должен быть способ использовать iptables возможно. И, следя за пропускной способностью, используемой всеми процессами пользователя X. И если они использовали больше, чем их месячная разрешенная пропускная способность Y ГБ, они получают сообщение о том, что для их торрент-клиента блокируется сеть, или клиент полностью убивается. Я также думал о Squid, но, учитывая, что он будет использовать несколько торрент-клиентов, это может использовать много ресурсов сервера ...
Я использую Debian Lenny.
Я не уверен, как это сделать ...
будет ли это вообще возможно? Я благодарен даже за частичные решения этого ...
Ответы:
Вы можете использовать команду 'tc' формирования трафика.
Дайте каждому из ваших друзей свой порт для использования в BitTorrent. Пометьте пакеты TCP с iptables для каждого порта.
Затем используйте команду tc, чтобы установить максимальную пропускную способность и скорость для каждого пользователя.
В конце месяца вы можете удалить и добавить команды 'tc', чтобы сбросить счетчик.
Вы можете контролировать использование для каждого пользователя:
Если вы используете Debian для установки shorewall, это действительно упрощает формирование трафика, не мешая iptables. Вы просто редактируете tcdevices, tcclasses и tcrules в каталоге / etc / shorewall. Более подробная информация здесь: http://www.shorewall.net/traffic_shaping.htm
Как предположил другой человек, маркировка пакетов по имени пользователя, вероятно, лучше, чем по порту, поэтому порты можно менять без обновления iptables.
источник
Вы можете попробовать использовать
--quota
опцию в iptables, которая позволяет вам установить лимит передачи в байтах. Поскольку вы используете несколько торрент-клиентов, каждый из которых имеет свое имя пользователя, вы можете комбинировать это с--uid-owner
опцией, как предложил katriel.Таким образом, вы можете принудительно установить лимит передачи для периода времени (день / неделя / месяц / и т. Д.) Без ограничения скорости загрузки ваших пользователей.
Чтобы счетчики пакетов были постоянными, вам необходимо периодически их сохранять (например, с помощью задания cron), чтобы вы могли восстановить их в случае, если вам потребуется перезагрузить сервер или сбросить правила брандмауэра.
источник
Просто чтобы добавить на вышеупомянутый вопрос.
Вы можете использовать iptables с сопоставлением пользователей, чтобы раскрасить пакеты следующим образом:
А затем используйте «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 КБ / с).
затем для ограничения пользователей вы используете 2 строки iptables на пользователя
ограничить загрузку:
ограничить загрузки
просто измените ваш IP-адрес и эти порты, чтобы соответствовать, кого вы хотите ограничить
источник
Для полноты, есть демон userpace под названием
trickle
. Его можно использовать для ограничения пропускной способности отдельного процесса. Использование очень простое: например, чтобы ограничить пропускную способность, используемую aptitude, вы можете написать:trickle -d 10 aptitude install wesnoth
Однако, поскольку он работает с использованием LD_PRELOAD, он может быть легко переопределен пользователем с доступом к оболочке.источник
Посмотрите на useripacct ядра патча (это на самом деле имеет достаточно длинную историю ). В документах для старой версии, по- видимому, также предусмотрены контроль за квотами и мониторинг, а также возможно предоставление собственных сценариев политики.
Поскольку создателям useripacct пришлось прибегнуть к исправлению ядра, чтобы получить желаемое поведение, маловероятно, что по умолчанию доступен более простой метод. Единственными альтернативами может быть ограничение пропускной способности (например, tc или trickle), как предлагается в большинстве других ответов здесь (но не на самом деле то, что вы ищете), или создание виртуальной машины для каждого пользователя (с использованием упрощенной виртуализации ОС). чем-то вроде OpenVZ ) и учета трафика на виртуальную машину (что довольно просто оценивается чем-то вроде vnstat ). Хотя это кажется излишним (внезапно у вас появляется куча виртуальных машин для администрирования вместо одной системы).
источник