LINUX.ORG.RU
ФорумAdmin

Раздавать инет «по-умному»


0

0

Итак, имеем:

1. инет из DSL-модема (ethernet), днем 512кбит/сек, ночью 1024кбит/сек

2. комп с Zenwalk Linux (домашний сервер, в принципе можно перевести на какой-нибудь Debian), на котором настроен шлюз примерно таким образом:
iptables -A FORWARD -s 10.255.255.0/24 -j ACCEPT
iptables -A FORWARD -d 10.255.255.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 10.255.255.0/24 -j MASQUERADE

3. 2 десктопа: мой и соседа, на которых через этот шлюз пользуется инет.

Все вроде бы замечательно, но есть большое "НО": когда кто-нибудь из нас запускает торрент, у второго инет практически не работает, т.к. торрент сжирает весь канал себе.
Хочется, чтобы работало следующим образом.
В любой момент времени, если работает только один пользователь, ему выделяется вся пропускная способность. Как только подключается второй пользователь, и начинает проявлять какую-либо инет-активность, чтобы скорость дедилась ровно поровну на обоих пользователей. Соответственно, как только один из пользователей перестает пользоваться инетом, чтобы второму опять отдавалась вся пропускная способность канала.
Таким образом, чтобы у каждого из пользователей днем скорость инета была не менее 256к (256-512), ночью соответственно 512к (512-1024).
Подскажите, пожалуйста, как такое можно реализовать?

> iptables -A FORWARD -d 10.255.255.0/24 -j ACCEPT

лучше так, первым правилом:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

> Таким образом, чтобы у каждого из пользователей днем скорость инета была не менее 256к (256-512), ночью соответственно 512к (512-1024).

Если совсем коротко, то тебе нужно tc и скрипты.

Если делать по-простому, то можно жёстко зашейпить соседу трафик на половину скорости. Больше чем это значение в tc он сожрать не сможет даже если будет свои торренты в 100 потоков лить. День-ночь переключаем скриптом по крону...

Если делать совсем по-честному, то либо погружаться во всякие фичи tc по поводу приоритетов, отъедания канала друг у друга и т.д., либо сам алгоритм скриптами, а в tc только задание жёсткого ограничения скорости когда качают оба.

paramonov
()

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

chocholl ★★
()

на опеннете есть HOWTO про Linux routing and traffic control Читай и не бойся экспериментировать. После третьего прочтения я таки понял как с ним работать и сделал все как и хотел. читать в сторону классовых дисциплин. Точнее - HTB (Hierarchical Tocken Bucket)

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

azure ★★
()

Попробуй для начала выяснить, что именно забивает торрент.

У меня, например, акада кабельная есть, дык забивается не канал, а количество подключений. Методом недолгих экспериментов удалось привести все в относительно человеческий вид.

jackill ★★★★★
()

У нас комп с дебианом, который роздает инет 5-м клиентам.

С помощью tc+htb+sfq канал делится на несколько каналов:

- канал 1 с наивысшим приоритетом; через него проходит высокоприоритетный траффик, не требующий высокой пропускной способности (ICMP, icq ...)

- канал 2, так сказать, для web-серфинга (средний приоритет)

- канал 3 - для закачек; у него наименьший приоритет, плюс этот канал еще делится поровну на каждого клиента

Фильтиация в tc - ТОЛЬКО по меткам пакетов.

Метки присваевает iptables. Как маркировать ICMP, ICQ и пр., расписывать не буду. А вот как у меня определяется, какой траффик через 80-й порт является закачкой, а какой - простым браузингом ?

iptables -t mangle -A INPUT -p tcp -m multiport --ports 80,21 -m hashlimit --hashlimit 60/sec --hashlimit-burst 1000 --hashlimit-mode 'srcport,dstport' --hashlimit-name websurf --hashlimit-htable-size 100 --hashlimit-htable-expire 10000 --hashlimit-htable-gcinterval 2000 -j MARK --set-mark 0x2

Естественно, пакеты с меткой проходят через канал 2. Закачки через 80-й порт + всякие торренты - через канал 3.

rumly111
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.