следующая ситуация: мы являемся группой студентов, которые управляют подключением к Интернету для местных общежитий, в общей сложности около 2000 конечных пользователей.
У нас есть система точек трафика, каждый мегабайт или точка загрузки загружаются, новые точки добавляются с каждым часом. В настоящий момент мы блокируем доступ пользователя к Интернету, когда он потратил все свои очки (поместив его в политику REJECT в iptables на нашем маршрутизаторе шлюза Debian).
Мы хотели бы только ограничить пропускную способность пользователя. Каков наилучший способ сделать это?
Простой ответ - установить ограничение скорости для порта коммутатора пользователя (в основном Cisco Catalyst 3550). Однако это нежелательно, поскольку трафик внутри нашей собственной сети и сети университетов должен оставаться неограниченным. Есть ли способ ограничить полосу пропускания только для пакетов с определенным целевым или исходным IP-диапазоном (таким образом, как выход, так и вход) в Cisco IOS? Я не мог ничего найти.
Другим способом было бы контролировать трафик на нашем маршрутизаторе шлюза. Несколько решений приходят мне на ум:
tc или tcng - кажется, что оба имеют довольно загадочный синтаксис, и ни один не предлагает хорошие функции для управления трафиком для IP. Выделенный QDisc для такого количества людей, вероятно, сильно замедлит работу маршрутизатора. Кроме того, документация по обоим довольно устарела.
shorewall - кажется, имеет довольно аккуратный синтаксис для конфигураций, однако я не уверен, может ли он обрабатывать такой объем трафика и пользователей и подходит ли он для ограничения трафика на IP
pfSense - выглядит как ОС, предназначенная для таких целей, как наша. Однако для этого потребуется полная переустановка нашего шлюзового маршрутизатора. У нас нет других систем BSD, и pfSense должен был бы иметь очень хорошие возможности учета трафика (мы сейчас используем fprobe-ulog и ulog-acctd).
Какой у тебя опыт? Какое решение соответствует нашим потребностям и его легче всего обслуживать? У тебя есть другие идеи?
Если вам нужна дополнительная информация о нашей системе, пожалуйста, не стесняйтесь спрашивать.
Заранее спасибо.
РЕДАКТИРОВАТЬ : я внедрил систему с iptables
и tc
.
У каждого пользователя есть / 28-подсеть, VPN-IP (оба из 10.0.0.0/8) и внешний IP-адрес. Все они управляются через одну цепочку iptables. Эта цепочка имеет только одно правило, простое RETURN
.
Каждые пять минут скрипт Python считывает счетчики байтов этих правил. Он сбрасывает счетчики и обновляет учетную запись пользователя в нашей базе данных PostgreSQL.
Если баланс очков пользователя уменьшается ниже определенного порога, для этого пользователя создаются два класса tc (один для входящего, другой для исходящего интерфейса на нашем маршрутизаторе шлюза), IP-адреса вводятся в фильтры tc, принадлежащие этим классам. Классы ограничены по скорости HTB.
По сравнению с предыдущей системой с fprobe-ulog
и ulog-acctd
это гораздо быстрее , так как подсчет байт осуществляется IPTables.
Скорость сети значительно улучшилась для наших пользователей.
источник
dummynet - очень хорошее предложение на мой взгляд. Но я уверен, что iptables также способен формировать трафик , так что вы можете просто сделать это на своем Debian Box.
источник
tc должен работать нормально. Я считаю, что вы хотите изменить текущие правила iptables, чтобы пометить, а не REJECT трафик, тогда вы можете использовать небольшое количество правил tc, чтобы применить формирование трафика к этим помеченным потокам.
также посмотрите ipset для управления списком удушенных пользователей http://ipset.netfilter.org/
источник
Trafficpanel, кажется, решение. Среди других особенностей:
На самом деле, никогда не пробовал эту вещь, но выглядит хорошо.
источник