Перейти к содержимому
Калькуляторы

ipt-ratelimit трафик полисинг в iptables

Чисто в теории, имхо, рулеж на базе меток - более верный и гибкий вариант.

 

Я уже писал выше про подобный вариант. Сейчас рулю у себя по метке skb->priority, но можно и fwmark как доп.вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А интересно, модуль можно с nDPI скрестить и приобрести зимовать траф по классам по абененту?

 

А как TBF (фильтр без очереди) может так делать? ("Так" - разные классы трафика в пределах одной полосы к одному абоненту.)

 

Единственное, в голову приходит идея с различными значениями burst для разных классов трафика. Где для более приоритетного трафика burst выше. Тогда в случае забивания канала он будет проходит в первую очередь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я уже писал выше про подобный вариант. Сейчас рулю у себя по метке skb->priority, но можно и fwmark как доп.вариант.

 

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

 

Единственное, в голову приходит идея с различными значениями burst для разных классов трафика. Где для более приоритетного трафика burst выше. Тогда в случае забивания канала он будет проходит в первую очередь.

 

Некий метод вытеснения выходит. У кого больше, то выше прыгнет, и быстрее пройдет. Так выходит?

Изменено пользователем bomberman

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Единственное, в голову приходит идея с различными значениями burst для разных классов трафика. Где для более приоритетного трафика burst выше. Тогда в случае забивания канала он будет проходит в первую очередь.

 

Некий метод вытеснения выходит. У кого больше, то выше прыгнет, и быстрее пройдет. Так выходит?

 

В полисинге ничего быстрее не ходит так как нет буфера, это просто фильтр.

 

В TBF размер ведёрка определяется значением burst, ведёрко постоянно опустошается со скоростью rate, если в ведёрке есть место для нового пакета - то он проходит фильтр (и его размер добавляется в ведёрко), если нет, то пакет отбрасывается. Соответственно, если для каких-то пакетов burst выше, то они будут проходить, когда пакеты с меньшим burst уже отбрасываются. Rate при этом будет в среднем одинаковый, кроме времени пока действует burst.

 

Плохо в этой схеме то, что мне не известно, чтоб кто-то такое практически использовал и, самое главное, не понятно какие значения ставить, чтоб получить то, что обычно хотят получить QOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Плохо в этой схеме то, что мне не известно, чтоб кто-то такое практически использовал

 

Тоже не встречал. Но попробовать думаю стоит. Хотя бы из интереса.

самое главное, не понятно какие значения ставить, чтоб получить то, что обычно хотят получить QOS.

 

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

Т.е. я пока это вижу как параметры напрмер:

IP,<speed - общая скорость для подписчика> <num_q - количество классов> <clss_id=1:speed(или вес в процентах от общей скорости)>...<clss_id=N:speed(или вес в процентах от общей скорости)>

 

Это первое что пришло на ум. А там быть может что ещё интереснее посоветуется.

Ну и + идентификация трафика/клиента не по IP или сегменту, а ещё и по внутренней метке, или по значению в поле QOS. Но в последнем случае общей скоростью как вариант - скорость самого интерфейса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В качестве идей.

PPS нужен, что-то в виде

echo +10.0.0.1 1000000 187500 pps> /proc/net/ipt_ratelimit/name

вместо pps подставлять цифру нужну, например 10000

 

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

Все это пригодится для фильтрования ддос-атак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

скажите, почему может быть такое:

$ cat /proc/net/ipt_ratelimit/upload

...

cat: /proc/net/ipt_ratelimit/upload: Operation not permitted

$

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так пишет же - нет прав.

сделайте

sudo cat /proc/net/ipt_ratelimit/upload

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так пишет же - нет прав.

сделайте

sudo cat /proc/net/ipt_ratelimit/upload

=)

нет, дело не в этом. права там не нужны. я просто скипнул вывод cat'а до сообщения об ошибке.

boco@ipn2:~$ cat /proc/net/ipt_ratelimit/download |wc -l

1845

boco@ipn2:~$ cat /proc/net/ipt_ratelimit/upload |wc -l

cat: /proc/net/ipt_ratelimit/upload: Operation not permitted

1839

 

upd. все-таки придется proc_buf[] увеличить, "echo +192.168.253.0/24 10000000" разворачивается в 4001 байт =)

 

вопрос пока снимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите реально этим модулем нарезать скорости на разные зоны (локалка, мир, etc)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

К сожалению в списках ratelimit нельзя указывать целые подсети, только конкретные IP адреса. Так что врят ли получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А есть ли смысл мне с 1G трафика уходить с TC?

 

тарифы 10-100мбит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите реально этим модулем нарезать скорости на разные зоны (локалка, мир, etc)?

 

Скорее можно, чем нет.

 

iptables -N LOCAL

iptables -N WORLD

iptables -A FORWARD -d xx.xx.xx.xx -j LOCAL

iptables -A FORWARD -d yy.yy.yy.yy -j LOCAL

iptables -A FORWARD -d zz.zz.zz.zz -j WORLD

iptables -A LOCAL -m ratelimit --ratelimit-set local-out --ratelimit-mode src -j DROP

iptables -A LOCAL -m ratelimit --ratelimit-set local-in --ratelimit-mode dst -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-out --ratelimit-mode src -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-in --ratelimit-mode dst -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-in

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-out

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-in

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-out

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-in

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-out

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скорее можно, чем нет.

 

iptables -N LOCAL

iptables -N WORLD

iptables -A FORWARD -d xx.xx.xx.xx -j LOCAL

iptables -A FORWARD -d yy.yy.yy.yy -j LOCAL

iptables -A FORWARD -d zz.zz.zz.zz -j WORLD

iptables -A LOCAL -m ratelimit --ratelimit-set local-out --ratelimit-mode src -j DROP

iptables -A LOCAL -m ratelimit --ratelimit-set local-in --ratelimit-mode dst -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-out --ratelimit-mode src -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-in --ratelimit-mode dst -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-in

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-out

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-in

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-out

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-in

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-out

Я думал в этом направлении, но проблема в том, что на разных тарифах есть разные скорости на локалку и etc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скорее можно, чем нет.

 

iptables -N LOCAL

iptables -N WORLD

iptables -A FORWARD -d xx.xx.xx.xx -j LOCAL

iptables -A FORWARD -d yy.yy.yy.yy -j LOCAL

iptables -A FORWARD -d zz.zz.zz.zz -j WORLD

iptables -A LOCAL -m ratelimit --ratelimit-set local-out --ratelimit-mode src -j DROP

iptables -A LOCAL -m ratelimit --ratelimit-set local-in --ratelimit-mode dst -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-out --ratelimit-mode src -j DROP

iptables -A WORLD -m ratelimit --ratelimit-set world-in --ratelimit-mode dst -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP

iptables -A FORWARD -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-in

echo +10.0.0.1 10000000 > /proc/net/ipt_ratelimit/local-out

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-in

echo +10.0.0.1 1000000 > /proc/net/ipt_ratelimit/world-out

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-in

echo +10.0.0.1 512000 > /proc/net/ipt_ratelimit/etc-out

Я думал в этом направлении, но проблема в том, что на разных тарифах есть разные скорости на локалку и etc

И в чём проблема? В моём примере 10 мбит на локалку, 1 мбит на мир и 512к на ETC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема в том, что у абонента А скорость на локалку будет 10 мбит, а у абонента Б будет на локалку 20 мбит.

Т.е. на одну и ту же зону разные скорости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#!/bin/sh

set_speed() {

 ABONENT=$1
 LOCAL=$2
 WORLD=$3
 ETC=$4

 echo +${ABONENT} $LOCAL > /proc/net/ipt_ratelimit/local-in
 echo +${ABONENT} $LOCAL > /proc/net/ipt_ratelimit/local-out
 echo +${ABONENT} $WORLD > /proc/net/ipt_ratelimit/world-in
 echo +${ABONENT} $WORLD > /proc/net/ipt_ratelimit/world-out
 echo +${ABONENT} $ETC > /proc/net/ipt_ratelimit/etc-in
 echo +${ABONENT} $ETC > /proc/net/ipt_ratelimit/etc-out
}

set_speed('10.0.0.1', 10000000, 1000000, 512000)
set_speed('10.0.0.2', 20000000, 2000000, 1000000)

 

За фигурные скобки в ${ABONENT} не уверен, что они нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

sol

Интересно. Спасибо за участие. Попробую потестить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробую потестить.

 

Чего тестить-то? Дело верное! Сразу в продакшн.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема в том, что у абонента А скорость на локалку будет 10 мбит, а у абонента Б будет на локалку 20 мбит.

и что? в чем проблема указать для одного ип 10 мбит, а для второго - 20?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NiTr0

и что? в чем проблема указать для одного ип 10 мбит, а для второго - 20?

Да прошу прощения. Сразу не понял как модуль работает. Сейчас разобрался, но почему то вот это правило

iptables -A FORWARD -m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP
iptables -A FORWARD -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

1. Перепишите по-русски.

2. iptables -n -v -L в студию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NiTr0

и что? в чем проблема указать для одного ип 10 мбит, а для второго - 20?

Да прошу прощения. Сразу не понял как модуль работает. Сейчас разобрался, но почему то вот это правило

iptables -A FORWARD -m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP
iptables -A FORWARD -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

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

 

Вам надо вынести эти правила из FORWARD в отдельную цепочку, как показано выше в примере с LOCAL и WORLD. Иначе не понятно, как вы зоны делите.

 

Ну и некрасиво все правила запихивать в FORWARD. Все же фаервол не линейный, как во фре, а "процедурный".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто приведу пример, как сделать можно.

 

iptables -N ratelim
iptables -N ratelocal
iptables -N rateworld
iptables -N rateetc
iptables -A FORWARD -j ratelim
iptables -A ratelim -d xx.xx.xx.xx -j ratelocal
iptables -A ratelim -d xx.xx.xx.xx -j RETURN
iptables -A ratelim -d yy.yy.yy.yy -j ratelocal
iptables -A ratelim -d yy.yy.yy.yy -j RETURN
iptables -A ratelim -d zz.zz.zz.zz -j rateworld
iptables -A ratelim -d zz.zz.zz.zz -j RETURN
iptables -A ratelim -j rateetc
iptables -A ratelocal -m ratelimit --ratelimit-set local-out --ratelimit-mode src -j DROP
iptables -A ratelocal -m ratelimit --ratelimit-set local-in --ratelimit-mode dst -j DROP
iptables -A rateworld -m ratelimit --ratelimit-set world-out --ratelimit-mode src -j DROP
iptables -A rateworld -m ratelimit --ratelimit-set world-in --ratelimit-mode dst -j DROP
iptables -A rateetc-m ratelimit --ratelimit-set etc-out --ratelimit-mode src -j DROP
iptables -A rateetc -m ratelimit --ratelimit-set etc-in --ratelimit-mode dst -j DROP

 

А еще лучше сделать селектор чрез ipset, если там больше, нежели 1 адрес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.