LINUX.ORG.RU

История изменений

Исправление Pinkbyte, (текущая версия) :

iptables здесь опосредованно, тебе нужен iproute2

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 10Mbit quantum 3000
tc filter add dev eth0 parent 1: protocol ip handle 100 fw flowid 1:1

Здесь мы создаём очередь и класс на устройстве eth0, лимитируем общую скорость до 10 мегабит/сек для этого класса. Также указываем что трайфик, промаркированный меткой 100 отправится в этот класс. Теперь осталось только указать в iptables что направить в этот класс.

iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 80 -j MARK --set-mark 100

В данном примере весь трафик с портом источника 80 с интерфейса eth0 будет отправлен в этот класс. Если eth0 - это устройство через которое у тебя идет Интернет, это означает что трафик с веб-сайтов с 80 порта не сможет занять больше чем 10 мегабит/сек полосы пропускания на eth0.

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

Вопрос агрегации и шейпинга трафика с нескольких интерфейсов(через IFB или IMQ) оставляю на самостоятельное изучение ;-)

Исправление Pinkbyte, :

iptables здесь опосредованно, тебе нужен iproute2

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 10Mbit quantum 3000
tc filter add deveth0 parent 1: protocol ip handle 100 fw flowid 1:1

Здесь мы создаём очередь и класс на устройстве eth0, лимитируем общую скорость до 10 мегабит/сек для этого класса. Также указываем что трайфик, промаркированный меткой 100 отправится в этот класс. Теперь осталось только указать в iptables что направить в этот класс.

iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 80 -j MARK --set-mark 100

В данном примере весь трафик с портом источника 80 с интерфейса eth0 будет отправлен в этот класс. Если eth0 - это устройство через которое у тебя идет Интернет, это означает что трафик с веб-сайтов с 80 порта не сможет занять больше чем 10 мегабит/сек полосы пропускания на eth0.

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

Вопрос агрегации и шейпинга трафика с нескольких интерфейсов(через IFB или IMQ) оставляю на самостоятельное изучение ;-)

Исходная версия Pinkbyte, :

iptables здесь опосредованно, тебе нужен iproute2

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 10Mbit quantum 3000
tc filter add deveth0 parent 1: protocol ip handle 100 fw flowid 1:1

Здесь мы создаём очередь и класс на устройстве eth0, лимитируем общую скорость до 10 мегабит/сек для этого класса. Также указываем что трайфик, промаркированный меткой 100 отправится в этот класс. Теперь осталось только указать в iptables что направить в этот класс.

iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 80 -j MARK --set-mark 100

В данном примере весь трафик с портом источника 80 с интерфейса eth0 будет отправлен в этот класс. Если eth0 - это устройство через которое у тебя идет Интернет, это означает что трафик с веб-сайтов с 80 порта не сможет занять больше чем 10 мегабит/сек полосы пропускания на eth0.

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