Подскажите новичку.. шейпер.. (Нужно как то прикрутить его чтобы ограничить не только ланку..)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
gard
Сообщения: 215

Подскажите новичку.. шейпер..

Сообщение gard »

:) Здравствуйте!
Описываю ситуацию своими постами на форуме Убунты (установлена у меня Ubuntu 8.04 amd64):
ADSL: eth0 (ppp0) смотрит в интернет, eth1 из моего компа в локалку Но вот незадача.. получается шейпер накладывается на исходящий трафик от eth1 в локальную сеть, а я получаюсь до шейпера со своим торрентом. Я сижу за компом, который и является роутером. Это мой десктоп. Что делать?

Далее:
Здравствуйте!
Вот подскажите такая проблемка позникла.. как я уже писал etho(ppp0) смотрит в инет, eth1 в локалку, а серв - мой десктоп, и я получаюсь до шейпера, а надо ограничить и себя в ущерб клиенту локалки. Внимательно ознакомился со следующим: http://gazette.linux.ru.net/rus/articles/taleLinuxTC.html
Вот что я набросал:

Код: Выделить всё

#ppp0 <=> eth0
#Корневая дисциплина
#tc qdisc add dev ppp0 root handle 1: htb default 12
#Корневой класс 1000
#tc class add dev ppp0 parent 1: classid 1:1 htb rate 1000kbps ceil 1000kbps
#Его подклассы для меня и клиента 140 + 860
#tc class add dev ppp0 parent 1:1 classid 1:11 htb rate 140kbps ceil 160kbps
#tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 860kbps ceil 1000kbps
#Добавляю фильтр, отправляющий пакеты для клиента в обработку классу 1:11
#tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.6 flowid 1:11

#Можно опционально попробовать упорядочить потоки с корня
#tc qdisc add dev ppp0 parent 1: handle 20: sfq perturb 10


Так вот собственно проблема. По идее если бы все сидели за eth1 в локалке: и я и клиент, то я бы должен был писать тут eth1 везде и это ораничение исходящего с eth1 в локалку трафика. А я пишу для ppp0(eth0), тогда выходит что я ограничиваю исходящий с ppp0(eth0) трафик. Но как определить где именно входящий а где исходящий трафик. По логике я написал выше - ограничение скорости от меня в инет. Но мне нужно ограничение скорости с ppp0(eth0), идущей на меня (сервер) с инета через этот интерфейс. Помогите разобраться. Я могу добавить в iptables правила MARK, маркирующие пакеты предназначенные для клиента (192.168.1.6) прямо на интерфейсе eth0(ppp0), но опять же какой в этом прок, если распределить их по маркеру я смогу только на интерфейсе eth1, который дает исходящий с него в локалку трафик. Я опять же включаю торрент и перехватываю всю скорость на себя прямо с eth0(ppp0.. замаялся дублировать =). Помогите советом, где тут мое недопонимание. Неужели невозможно сделать ограничение прямо на меня и на клиента?

Посоветовали попробовать IMQ, но оно ядром не поодерживается и патча не смог найти. В общем в итоге ничего с IMQ не вышло, хотя я разобрался как сделать. И к чему я пришел? А вот к этому: Интернет мне приходит на eth0 можно сказать от ppp0, получается, что когда приходит интернет, то для eth0 - это входящий трафик, а все что идет от eth0 на мою вторую сетевую и через нее на локалку - исходящий трафик. Так ли это я рассуждаю? Тогда регулировать его довольно просто как я уже писал выше свои наброски.

В общем жду помощи! Подскажите мне путь решения проблемы.. заранее благодарен! И еще. .я новичек в линуксе, поэтому могу тут спрашивать очевидные и глупые вещи.
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Подскажите новичку.. шейпер..

Сообщение BIgAndy »

gard писал(а):
13.11.2008 10:08


iproute2 и tc
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

А поподробнее можно? Набросайте схему действий, толку читать про tc, если я это уже сделал, но незнаю как это прицепить.
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
alternativshik
Сообщения: 154
ОС: Debian Lenny/Sid

Re: Подскажите новичку.. шейпер..

Сообщение alternativshik »

IMQ патч есть для 25 ядра и для iptables 1.4.1 на сайте разработчиков. Отлично все работает, ИМХО - это самый нормальный вариант - перенаправить пакеты на виртуальное устройство IMQ и шейпить их там уже.
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

Спасибо за такую хорошую новость! Вот уже утром набросал сегодня:

Код: Выделить всё

#!/bin/bash

#РЕАЛИЗАЦИЯ ПСЕВДОИНТЕРФЕЙСА IMQ ДЛЯ ПЕРЕСЫЛКИ ПАКЕТОВ НА НЕГО ПОСЛЕ PREROUTING##################
#ppp0 <=> eth0
#Корневая дисциплина imq
tc qdisc add dev imq0 root handle 1: htb default 12
#Корневой класс 1000, ceil возмлжно лишнее
tc class add dev imq0 parent 1: classid 1:1 htb rate 1000kbps ceil 1000kbps burst 15k
#Его подклассы для меня и клиента 140 + 860
tc class add dev imq0 parent 1:1 classid 1:11 htb rate 140kbps ceil 160kbps
tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 860kbps ceil 1000kbps
#Добавляю фильтр, отправляющий пакеты для клиента в обработку классу 1:11
tc filter add dev imq0 parent 1:1 protocol ip prio 1 u32 match ip dst 192.168.1.6/24 flowid 1:11

#Можно опционально попробовать упорядочить потоки с корня
#tc qdisc add dev ppp0 parent 1:1 handle 20: sfq perturb 10

echo 'Дисциплина tc удачно добавлена.'


В iptables подключаю наверное так:

Код: Выделить всё

#Перехватываю пакеты на свой псевдоинтерфейс IMQ
iptables -t magle -A PREROUTING -i ppp0 -j IMQ --todev 0
ip link set imq0 up


:tongue: Не подскажете как поставить патч на ядро?..
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

С пропатчиванием ядра мне не справиться.. не хочу терять систему, так как много дел и я тока тока все настроил. Наткнулся на статью ftp://ftp.muug.mb.ca/pub/fedora/linux/core/ и сделал по аналогии для себя дисциплину с классами:

Код: Выделить всё

#!/bin/bash
# СБРОС ПРАВИЛ  -----------------------------
 tc qdisc del dev eth0 root
 tc qdisc del dev eth0 ingress

 tc qdisc del dev ifb0 root
 tc qdisc del dev ifb0 ingress


#ТУТ НУЖНО ПЕРЕЗАПУСТИТЬ IPTABLES!!!!!!!!!!!
# ------------------------------------------


# IFB включение ----------------------------
 modprobe ifb
 ip link set dev ifb0 up
# ------------------------------------------

## ПОЛЕЗНЫЕ КОМАНДЫ-------------------------
 tc -s filter show parent ffff: dev eth0
 tc -s qdisc
 ifconfig ifb0
 tc -s filter show dev ifb0 parent 1:
 tc -s qdisc show dev ifb0


######################################################
# ПРИМЕР ограничения входящего трафика
# маркировка IPTABLES недоступна
######################################################

### IFB --------------------------------------------------------------
 tc qdisc add dev ifb0 root handle 1: htb default 12

tc class add dev ifb0 parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit
tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 140kbit ceil 160kbit
tc class add dev ifb0 parent 1:1 classid 1:12 htb rate 860kbit ceil 1000kbit

## выделили закачку исходников ядра
## wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.gz
 tc filter add dev ifb0 parent 1:1 protocol ip prio 1 u32 match ip src 204.152.191.37/32 flowid 1:11

## выделили закачку исходников fedora core 6
## wget ftp://ftp.muug.mb.ca/pub/fedora/linux/core/6/i386/iso/FC-6-i386-DVD.iso
 tc filter add dev ifb0 parent 1: protocol ip prio 2 u32 match ip src 130.179.31.46/32 flowid 1:12


### eth0 --------------------------------------------------------------
 # перенаправлять входящие пакеты с eth0 в ifb0
 tc qdisc add dev eth0 ingress
 tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

## TESTING -------------------------------------------------------------
##оцените скорость и т.д.
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.gz


При тестировании я попадаю на класс 1:11 и скосрость должна быть 140-160kbps, а у меня как обычно растет до мегабита. Где ошибка? Подскажите пожалуйста!
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
alternativshik
Сообщения: 154
ОС: Debian Lenny/Sid

Re: Подскажите новичку.. шейпер..

Сообщение alternativshik »

а с чего ты взял, что придется терять систему??? 0_о Это ж не переустановка Винды, а всего лишь пересборка ядра! Прочти ман по htb - там написано, что шейпится траффик, исходящий с интерфейса. Да и с чего ты взял, что попадаешь именно в 1:11 ? и что за интерфейс такой ifb0 ? для которого созданы правила? Если я правильно понял, то это что-то виртуальное, но тогда на него должны отправляться пакеты от тебя и от второго компа, чего я не вижу.
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Подскажите новичку.. шейпер..

Сообщение Olden Gremlin »

alternativshik писал(а):
13.11.2008 12:34
IMQ патч есть для 25 ядра и для iptables 1.4.1 на сайте разработчиков. Отлично все работает, ИМХО - это самый нормальный вариант - перенаправить пакеты на виртуальное устройство IMQ и шейпить их там уже.
Посмею слегка с Вами не согласиться ;)
Есть ещё нормальные варианты и без всяких патчей :)

Как правило ограничить трафик из интернета к локальному хосту не составляет особых проблем, ведь он для сервера, по отношению к клиентскому хосту, определяется как egress. В основном "мученья" наступают когда хотим кого либо из локалки отправляет трафик в Интернет, правильно?

Предлагаю своё черновое решение этой задачи, которое очень помогло моему товарищу :) (Внимание! Это не статья, а так - предложение и информация к размышлению).

Маркируем нужные пакеты iptables'ом в таблице mangle (надеюсь знаете как?) в цепочке FORWARD.
Дальше рисуем скрипт для tcng:

Код: Выделить всё

#define IFACE0  vlan8
#define RATE    10240
#define R2Q     7

$rate01 = (RATE/2)/4;
$rate02 = (RATE/2)/4;
$rate03 = (RATE/2)/4;
$rate04 = (RATE/2)/4;
$rate_other = RATE/2;

dev IFACE0 {
    egress {
        class (<$mark01>)       if meta_nfmark==1001;
        class (<$mark02>)       if meta_nfmark==2002;
        class (<$mark03>)       if meta_nfmark==3003;
        class (<$mark04>)       if meta_nfmark==4004;
        class (<$low>)          if 1;
        htb ( r2q R2Q ) {
            class ( rate RATE kbps ) {
                $mark01 = class ( rate $rate01 kbps ) { sfq(); }
                $mark02 = class ( rate $rate02 kbps ) { sfq(); }
                $mark03 = class ( rate $rate03 kbps ) { sfq(); }
                $mark04 = class ( rate $rate04 kbps ) { sfq(); }
                $low = class ( rate $rate_other kbps, ceil $rate_other kbps ) { sfq(); }
            }
        }
    }
}
Естественно, что Ваши правила могут отличаться от предложенных, так как на вкус, цвет и запах - все фломастеры разные :)
vlan8 - это интерфейс, который поднят в Интернет, замените его на ppp или eth.
Затем делаем

Код: Выделить всё

tcng имяфайласкрипта
и получаешь нужный тебе вывод в синтаксисе tc.

Код: Выделить всё

$ tcng -r htb.pils.tcc
tc qdisc del dev vlan8 root
tc qdisc del dev vlan8 ingress

# =============================== Device vlan8 ================================

tc qdisc add dev vlan8 handle 1:0 root dsmark indices 8 default_index 0
tc qdisc add dev vlan8 handle 2:0 parent 1:0 htb r2q 7
tc class add dev vlan8 parent 2:0 classid 2:1 htb rate 1280000bps
tc class add dev vlan8 parent 2:1 classid 2:2 htb rate 160000bps
tc qdisc add dev vlan8 handle 3:0 parent 2:2 sfq
tc class add dev vlan8 parent 2:1 classid 2:3 htb rate 160000bps
tc qdisc add dev vlan8 handle 4:0 parent 2:3 sfq
tc class add dev vlan8 parent 2:1 classid 2:4 htb rate 160000bps
tc qdisc add dev vlan8 handle 5:0 parent 2:4 sfq
tc class add dev vlan8 parent 2:1 classid 2:5 htb rate 160000bps
tc qdisc add dev vlan8 handle 6:0 parent 2:5 sfq
tc class add dev vlan8 parent 2:1 classid 2:6 htb rate 640000bps ceil 640000bps
tc qdisc add dev vlan8 handle 7:0 parent 2:6 sfq
tc filter add dev vlan8 parent 2:0 protocol all prio 1 tcindex mask 0x7 shift 0
tc filter add dev vlan8 parent 2:0 protocol all prio 1 handle 5 tcindex classid 2:6
tc filter add dev vlan8 parent 2:0 protocol all prio 1 handle 4 tcindex classid 2:5
tc filter add dev vlan8 parent 2:0 protocol all prio 1 handle 3 tcindex classid 2:4
tc filter add dev vlan8 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:3
tc filter add dev vlan8 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:2
tc filter add dev vlan8 parent 1:0 protocol all prio 1 handle 1001 fw classid 1:1
tc filter add dev vlan8 parent 1:0 protocol all prio 1 handle 2002 fw classid 1:2
tc filter add dev vlan8 parent 1:0 protocol all prio 1 handle 3003 fw classid 1:3
tc filter add dev vlan8 parent 1:0 protocol all prio 1 handle 4004 fw classid 1:4
tc filter add dev vlan8 parent 1:0 protocol all prio 2 u32 match u32 0x0 0x0 at 0 classid 1:5
Все! Мы ограничили для наших серых адресов, в соответствии с условиями маркировки пакетов, egress трафик на смотрящем в Интернет интерфейсе.
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

Все.. у меня руки уже опускаются. Мне нужно ограничить на исходящем в Ланку, но! Сделать подтипа IMQ, чтобы сначала трафик поступал на псевдоинтерфейс, а потом уже распределялся по классам, а потом я его после цепочки PREROUTING уже получаю пошейпенным. Вариант подтипа этого нужен. Ибо пока об исходящей в инет скорости не идет никакой речи. Это не главное. Хотя ваш пример очень элегантен! Мне нужно ограничить себя (я сижу на сервере прямо) и клиентов локалки.

ps: честно говоря я уже готов застрелиться, :wacko: Сижу тут чето настраиваю а юзер мне постоянно говорит "нет пинга!!!, нет инета!!!". Вот как так нет инета если правила у меня уже меньше некуда в iptables:

Код: Выделить всё

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
iptables  -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
iptables  -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
echo 'Правила iptables добавлены.'


Нада :drunk: с горя..
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Подскажите новичку.. шейпер..

Сообщение Olden Gremlin »

gard писал(а):
13.11.2008 10:08
Но мне нужно ограничение скорости с ppp0(eth0), идущей на меня (сервер) с инета через этот интерфейс. Помогите разобраться.
Ограничить скорость входящего потока - никак!

Если трафик Вам был отправлен, то можете либо его принять, либо отказаться /забыть о нём/. Но даже если Вы "забываете" о трафике, это Вовсе не означает, что его перестанут слать.

Что-же касается торента... Так ограничьте скорость в клиенте и не мучайтесь. В rtorrent'е это делается очень просто опциями upload_rate и download_rate. Если Вы используете другой клиент - читайте мануал к нему.
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

Дак дело то в том.. охх.. вот посмотрите здесь ссылку там про IMQ найдите и все сразу станет ясно: http://gazette.linux.ru.net/rus/articles/taleLinuxTC.html Входящий да - можно только подропать фильтрами, но! Его можно получать на псевдоинтерфейсе сразу же после eth0 и для всего остального: меня, локалки.. это будет уже исходящий трафик от псевдоинтерфейса к нам! Вот в чем суть! Помогите советом кто что знает.
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Подскажите новичку.. шейпер..

Сообщение Olden Gremlin »

Не хочу смотреть, так как задача, для простых конфигураций, состоит из двух этапов решения:
ISP на eth0 - 100Мбит/с, и на нём поднимается ppp0. Пропускная способность ppp0 - 1Мбит/с . Локалка eth1 - 100Мбит/с.
Предположим, что ip адрес выданный провайдером на ppp0 - 100.100.100.100, а на eth1 поднят адрес 10.100.1.1/24.

Описываем дисциплины для трафика приходящего к нам из локалки и уходящий в Инет:

Код: Выделить всё

*mangle
:PREROUTING ACCEPT [32379320:8999179347]
:INPUT ACCEPT [32372677:8998522669]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [45137527:54986372461]
:POSTROUTING ACCEPT [45138889:54986475929]
[0:0] -A PREROUTING -s 10.100.1.254/32 -j MARK --set-xmark 1001
[0:0] -A PREROUTING -s 10.100.1.254/32 -j RETURN
[0:0] -A PREROUTING -s 10.100.1.253/32 -j MARK --set-xmark 2002
[0:0] -A PREROUTING -s 10.100.1.253/32 -j RETURN
[0:0] -A PREROUTING -s 10.100.1.252/32 -j MARK --set-xmark 3003
[0:0] -A PREROUTING -s 10.100.1.252/32 -j RETURN
[0:0] -A PREROUTING -s 10.100.1.251/32 -j MARK --set-xmark 4004
[0:0] -A PREROUTING -s 10.100.1.251/32 -j RETURN
COMMIT

Код: Выделить всё

#define IFACE0  ppp0
#define LOCALRT 102400
#define RATE    1024
#define R2Q     7

$rate01 = (RATE/2)/4;
$rate02 = (RATE/2)/4;
$rate03 = (RATE/2)/4;
$rate04 = (RATE/2)/4;
$rate_other = RATE/2;

dev IFACE0 {
    egress {
        class (<$mark01>)       if meta_nfmark==1001;
        class (<$mark02>)       if meta_nfmark==2002;
        class (<$mark03>)       if meta_nfmark==3003;
        class (<$mark04>)       if meta_nfmark==4004;
        class (<$low>)          if 1;
        htb ( rate LOCALRT kbps, r2q R2Q ) {
            class ( rate RATE kbps ) {
                $mark01 = class ( rate $rate01 kbps ) { sfq(); }
                $mark02 = class ( rate $rate02 kbps ) { sfq(); }
                $mark03 = class ( rate $rate03 kbps ) { sfq(); }
                $mark04 = class ( rate $rate04 kbps ) { sfq(); }
                $low = class ( rate $rate_other kbps ) { sfq(); }
            }
        }
    }
}
Преобразуем скрипт tcng в правила tc:

Код:

$ tcng -r linuxforum.ru-topic-79544.ppp0.tcc tc qdisc del dev ppp0 root tc qdisc del dev ppp0 ingress # ================================ Device ppp0 ================================ tc qdisc add dev ppp0 handle 1:0 root dsmark indices 8 default_index 0 tc qdisc add dev ppp0 handle 2:0 parent 1:0 htb r2q 7 tc class add dev ppp0 parent 2:0 classid 2:1 htb rate 128000bps tc class add dev ppp0 parent 2:1 classid 2:2 htb rate 16000bps tc qdisc add dev ppp0 handle 3:0 parent 2:2 sfq tc class add dev ppp0 parent 2:1 classid 2:3 htb rate 16000bps tc qdisc add dev ppp0 handle 4:0 parent 2:3 sfq tc class add dev ppp0 parent 2:1 classid 2:4 htb rate 16000bps tc qdisc add dev ppp0 handle 5:0 parent 2:4 sfq tc class add dev ppp0 parent 2:1 classid 2:5 htb rate 16000bps tc qdisc add dev ppp0 handle 6:0 parent 2:5 sfq tc class add dev ppp0 parent 2:1 classid 2:6 htb rate 64000bps tc qdisc add dev ppp0 handle 7:0 parent 2:6 sfq tc filter add dev ppp0 parent 2:0 protocol all prio 1 tcindex mask 0x7 shift 0 tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 5 tcindex classid 2:6 tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 4 tcindex classid 2:5 tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 3 tcindex classid 2:4 tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:3 tc filter add dev ppp0 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:2 tc filter add dev ppp0 parent 1:0 protocol all prio 1 handle 1001 fw classid 1:1 tc filter add dev ppp0 parent 1:0 protocol all prio 1 handle 2002 fw classid 1:2 tc filter add dev ppp0 parent 1:0 protocol all prio 1 handle 3003 fw classid 1:3 tc filter add dev ppp0 parent 1:0 protocol all prio 1 handle 4004 fw classid 1:4 tc filter add dev ppp0 parent 1:0 protocol all prio 2 u32 match u32 0x0 0x0 at 0 classid 1:5

На данном этапе мы закончили первую часть решения.
Что имеем? Спроектированные egress-правила. Жёсткие ограничения в скорости установленные для наших локальных адресов 10.100.1.254, 10.100.1.253, 10.100.1.252 и 10.100.1.251. Все остальные нашей сети используют остаток канала, который останется после распределения нагрузки этих хостов.

Поехали дальше. Рисуем скрипт tcng для eth1:

Код: Выделить всё

#define IFACE0  eth1
#define LOCALRT 102400
#define RATE    1024
#define R2Q     7

$rate01 = (RATE/2)/4;
$rate02 = (RATE/2)/4;
$rate03 = (RATE/2)/4;
$rate04 = (RATE/2)/4;
$rate_other = RATE/2;

dev IFACE0 {
    egress {
        class (<$mark01>)       if ip_dst == 10.100.1.254;
        class (<$mark02>)       if ip_dst == 10.100.1.253;
        class (<$mark03>)       if ip_dst == 10.100.1.252;
        class (<$mark04>)       if ip_dst == 10.100.1.251;
        class (<$low>)          if ip_dst/24 == 10.100.1.0;
        htb ( rate LOCALRT kbps, r2q R2Q ) {
            class ( rate RATE kbps ) {
                $mark01 = class ( rate $rate01 kbps ) { sfq(); }
                $mark02 = class ( rate $rate02 kbps ) { sfq(); }
                $mark03 = class ( rate $rate03 kbps ) { sfq(); }
                $mark04 = class ( rate $rate04 kbps ) { sfq(); }
                $low = class ( rate $rate_other kbps ) { sfq(); }
            }
        }
    }
}
Преобразуем скрипт tcng в правила tc:

Код:

$ tcng -r linuxforum.ru-topic-79544.eth1.tcc tc qdisc del dev eth1 root tc qdisc del dev eth1 ingress # ================================ Device eth1 ================================ tc qdisc add dev eth1 handle 1:0 root dsmark indices 8 default_index 0 tc qdisc add dev eth1 handle 2:0 parent 1:0 htb r2q 7 tc class add dev eth1 parent 2:0 classid 2:1 htb rate 128000bps tc class add dev eth1 parent 2:1 classid 2:2 htb rate 16000bps tc qdisc add dev eth1 handle 3:0 parent 2:2 sfq tc class add dev eth1 parent 2:1 classid 2:3 htb rate 16000bps tc qdisc add dev eth1 handle 4:0 parent 2:3 sfq tc class add dev eth1 parent 2:1 classid 2:4 htb rate 16000bps tc qdisc add dev eth1 handle 5:0 parent 2:4 sfq tc class add dev eth1 parent 2:1 classid 2:5 htb rate 16000bps tc qdisc add dev eth1 handle 6:0 parent 2:5 sfq tc class add dev eth1 parent 2:1 classid 2:6 htb rate 64000bps tc qdisc add dev eth1 handle 7:0 parent 2:6 sfq tc filter add dev eth1 parent 2:0 protocol all prio 1 tcindex mask 0x7 shift 0 tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 5 tcindex classid 2:6 tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 4 tcindex classid 2:5 tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 3 tcindex classid 2:4 tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:3 tc filter add dev eth1 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:2 tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xa6401fe 0xffffffff at 16 classid 1:1 tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xa6401fd 0xffffffff at 16 classid 1:2 tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xa6401fc 0xffffffff at 16 classid 1:3 tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xa6401fb 0xffffffff at 16 classid 1:4 tc filter add dev eth1 parent 1:0 protocol all prio 1 u32 match u32 0xa640100 0xffffff00 at 16 classid 1:5

Собственно все :) Разве это не решение Вашей задачи?
Естественно, что правила в tcng можно/нужно рисовать свои - они индивидуальны для каждого. Эти примеры носят лишь характер "для справки" и способствуют систематизации некоторых знаний :)
Достаточно наглядный пример? ;)
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Подскажите новичку.. шейпер..

Сообщение gard »

Хоть это и не совсем решение моей проблемы, но :blush: .. признаюсь Вы меня очень заинтересовали вот такой возможностью писать правила.. Спасибо большое! Сейчас не дома, не в родной среде, но завтра обязательно поизучаю что и как (я все же новичок, с iptables то познакомился пару недель назад только, а с tc совсем недавно). Но такая вот помощь просто неоценима, благодарю! :)
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Подскажите новичку.. шейпер..

Сообщение Olden Gremlin »

gard писал(а):
15.11.2008 21:19
Хоть это и не совсем решение моей проблемы, но :blush: .. признаюсь Вы меня очень заинтересовали вот такой возможностью писать правила.. Спасибо большое! Сейчас не дома, не в родной среде, но завтра обязательно поизучаю что и как (я все же новичок, с iptables то познакомился пару недель назад только, а с tc совсем недавно). Но такая вот помощь просто неоценима, благодарю! :)

Подумали мы тут с sash-kan'ом и решили поместить это решение в топик FAQ aka Оглавление пост №7, чтобы отныне тема шейпинга раскрывалась в ЧАВО. :)
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали: