Страшные муки организации шейпера...

Linux, безопасность, сети и все что с этим связано
Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Страшные муки организации шейпера...

Сообщение Aleoldo »

Планируется асинхронный интернет: входящая скорость 4000 Kbit\s возможно увеличение до 16000 kbit\s. А вот исходящей скоростью проблемма: планируется 380 kbit\s, возможно увеличение до 1 mbit\s.

Вообщем пока прищел к такому решению.
- Имеем eth0 - локальная сеть(к пользователям), eth1 - глобальная сеть.
- поднят nat

скорость исходящего канала низкая,поэтому создаем правило приоритезации на интерфейсе "eth1 - глобальная сеть".(РАБОТАЕТ):

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

#!/bin/sh

IPTABLES=/sbin/iptables
DEV_IN=eth1
RATE_IN=380

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 99

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/6]kbit ceil $[$RATE_IN/2]kbit prio 0
tc class add dev $DEV_IN parent 1:1 classid 1:25 htb rate $[$RATE_IN/6]kbit ceil $[$RATE_IN/2]kbit prio 1
tc class add dev $DEV_IN parent 1:1 classid 1:50 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 2
tc class add dev $DEV_IN parent 1:1 classid 1:75 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 3
tc class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 4

tc qdisc add dev $DEV_IN parent 1:10 handle 10: pfifo limit 5
tc qdisc add dev $DEV_IN parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:75 handle 75: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:99 handle 99: sfq perturb 10


#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 10-99 в зависимости от
# нужного класса. Высший приоритет - 10.

# Низкоприоритетный трафик
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j MARK --set-mark 99
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 0:1024 -j MARK --set-mark 99

# интернет-пейджер aol
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5190 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 5190 -j MARK --set-mark 75

# irc
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 6667 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 9944 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 6667 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 9944 -j MARK --set-mark 75

# ICMP (ping) - высокий приоритет,
# будем удивлять друзей
iptables -t mangle -A MYSHAPER-IN -p icmp -j MARK --set-mark 25

# распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-IN -p udp -j MARK --set-mark 25

# secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 22 -j MARK --set-mark 10
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j MARK --set-mark 10

# telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 23 -j MARK --set-mark 25
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 23 -j MARK --set-mark 25

# маленькие пакеты, скорее всего ACK-пакеты
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 25
#тут ускрил кого нибудь в офисе
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.5 -j MARK --set-mark 10

# избыточно - смаркировать все неотмаркированые пакеты как 99 (низкий проиритет)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 99

tc filter add dev $DEV_IN parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
tc filter add dev $DEV_IN parent 1:0 prio 1 protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV_IN parent 1:0 prio 2 protocol ip handle 50 fw flowid 1:50
tc filter add dev $DEV_IN parent 1:0 prio 3 protocol ip handle 75 fw flowid 1:75
tc filter add dev $DEV_IN parent 1:0 prio 4 protocol ip handle 99 fw flowid 1:99

echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0
Пока что разрулил самое основное: dns, icmp, icq, irc - приоритет высокий и средний, все остальное - низкий.Большой кусок проблеммы решил, но основную проблемму нет...
ОСНОВНАЯ ПРОБЛЕММА
теперь нужно на интерфейсе смотрящем в сеть eth1 сформировать каждому пользователю полосу "не выше" 1024\64 kbit\s
Уточню внимание: не на всю подсеть делить скорость 1024\64 kbit\s, а каждому пользователю выдать по "не выще" 1024\64 kbit\s
То есть:
192.168.0.2 (вася) - 1024\64 kbit\s
.......
192.168.0.7 (петя) - 1024\64 kbit\s
.......
192.168.0.30 (катя) - 1024\64 kbit\s
........
192.168.0.67 (марина) - 1024\64 kbit\s
.......и т. д.
Пока что получается ограничевать скорость только на подсеть. на каждого тоже,но скрипт получается нереально идиотский:

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

#!/bin/sh

IPTABLES=/sbin/iptables
#TC=/sbin/tc
DEV_IN=eth0
RATE=10000
RATES_INS=1024

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 333

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE}kbit ceil ${RATE}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:2 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
#.... 
tc class add dev $DEV_IN parent 1:1 classid 1:7 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit 
#....
tc class add dev $DEV_IN parent 1:1 classid 1:30 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit 
#....
tc class add dev $DEV_IN parent 1:1 classid 1:67 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit 
#....
tc class add dev $DEV_IN parent 1:1 classid 1:333 htb rate $[$RATES_INS/8]kbit ceil ${$RATES_INS/4]kbit #для особо умных,и тех кого я еще не добавил...
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

tc qdisc add dev $DEV_IN parent 1:2 handle 2: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:7 handle 7: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:67 handle 67: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:333 handle 333: sfq perturb 10
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

#ТЕПЕРЬ ПЕРЕБЕРАЕМ ВСЕ IP!!!ЖЕСТЬ....
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.2 -j MARK --set-mark 2
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.7 -j MARK --set-mark 7
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.30 -j MARK --set-mark 30
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.67 -j MARK --set-mark 67

tc filter add dev $DEV_IN parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 7 fw flowid 1:7
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 30 fw flowid 1:30
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 67 fw flowid 1:67
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 333 fw flowid 1:333
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ


echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0
и это только входящий трафик(с точки зрения пользователя)!!!Еще нужно описать исходящий (с точки зрения пользователя) с помощью процедуры которая сбрасывает пакеты,кажется imq, запямятовал как она называется,не суть...Суть в том что такой же длинны будет!

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

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

А если попробовать так?

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

#!/bin/sh

IPTABLES=/sbin/iptables
#TC=/sbin/tc
DEV_IN=eth0
RATE=10000
RATES_INS=1024

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 333

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE}kbit ceil ${RATE}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:2 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:333 htb rate $[$RATES_INS/8]kbit ceil ${$RATES_INS/4]kbit #для особо умных,и тех кого я еще не добавил...

tc qdisc add dev $DEV_IN parent 1:2 handle 2: sfq perturb 10

tc qdisc add dev $DEV_IN parent 1:333 handle 333: sfq perturb 10
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

iptables -t mangle -A MYSHAPER-IN -d 192.168.0.0/16 -j MARK --set-mark 2


tc filter add dev $DEV_IN parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 333 fw flowid 1:333
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ


echo "Shaper on $DEV_IN started ($RATES_INS kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0
Это наверное не решит проблемму "на каждого", а будет резать на всю подсеть сразу...(((

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Aleoldo, искользуйте циклы и функции :)
http://gazette.linux.ru.net/rus/article ... index.html
Опыт растет прямо пропорционально выведенному из строя оборудованию

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

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

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

if [ 'усорвие' ] ; 
then
'действие'
fi
а вот какое условие ума не приложу...
да и в действие сразу поместить все это чтоли?

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

 
tc class add dev $DEV_IN parent 1:1 classid 1:$N htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
tc qdisc add dev $DEV_IN parent 1:$N handle $N: sfq perturb 10
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.$N -j MARK --set-mark $N
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 2 fw flowid 1:$N 
опять же надо снача как то отловить это $N...
фух каша какая то получается...

Berserker
Неотъемлемая часть форума
Сообщения: 279
Зарегистрирован: 23 апр 2005, 21:13
Откуда: minsk

Сообщение Berserker »

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

for N in 23 45 67 128; do echo $N; done
for N in `seq 10`; do echo $(($N+20)); done

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

Berserker писал(а):

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

for N in 23 45 67 128; do echo $N; done
for N in `seq 10`; do echo $(($N+20)); done
не мог бы немного расшифровать? :oops: А то не очень понятна последовательность чисел 23 45 67 128 и 'seq 10'... :cry:

Berserker
Неотъемлемая часть форума
Сообщения: 279
Зарегистрирован: 23 апр 2005, 21:13
Откуда: minsk

Сообщение Berserker »

Скопіпасці ў кансоль і праглядзі вывад. Усё проста :)
23 45 67 128 - малодшыя акцеты тваіх юзерскіх IP.
seq 10 - выдае лічбы ад 1 да 10

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

я прошу прошения,но я знаю только русский и немного английский...

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

А вот интересно, можно же ведь просто сделать цикл,чтобы создалось штук 250 правил, задать n от 2 до 255.Вопрос в том не будет ли в таком случае очень большой нагрузки на шлюз?!
Или лучше сделать,чтобы в тот момент,когда пришло соединение от пользователя,отловить это "n" и создать правило.когда пользователь отключился,то стереть правило.

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

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

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Aleoldo писал(а):А вот интересно, можно же ведь просто сделать цикл,чтобы создалось штук 250 правил, задать n от 2 до 255.Вопрос в том не будет ли в таком случае очень большой нагрузки на шлюз?!
Не будет.
Aleoldo писал(а): Или лучше сделать,чтобы в тот момент,когда пришло соединение от пользователя,отловить это "n" и создать правило.когда пользователь отключился,то стереть правило.
Не лучше.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

Спасибо большое запомощь!Но муки мои не закончены...Организацию входящего к клиенту трафика я сделал!Ура!выглядит примерно так:

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

tc qdisc add dev $DEVS_IN root handle 1:0 htb default 256
tc class add dev $DEVS_IN parent 1:0 classid 1:1 htb rate ${RATES_IN}kbit ceil ${RATES_IN}kbit

for N in `seq 2 102`
do
tc class add dev $DEVS_IN parent 1:1 classid 1:$N htb rate ${RATES}kbit ceil ${RATES}kbit
tc qdisc add dev $DEVS_IN parent 1:$N handle $N: sfq perturb 10

iptables -t mangle -A MYSHAPERS-IN -d 192.168.22.$N -j MARK --set-mark $N
tc filter add dev $DEVS_IN parent 1:0 protocol ip handle $N fw flowid 1:$N
done
ПОСЛЕДНЯЯ ПРОБЛЕММА:
Но теперь осталось организовать полосы пропускания трафика от клиентов.
Вот что у меня получается для единичного случая:

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

tc qdisc add dev $DEV handle ffff: ingress

tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
   192.168.22.4 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
Это ip одного из компьютеров на котором я тестирую...худо-бедно,но "дропает" пакеты приходяшие от пользователя на большой скорости.
Но это для одного,а мне нужно для многих...
1)что означает ffff? почему с другими значениями не работает,выдает ошибку сразу при загрузке скрипта?
2) Как можно в этой дисциплине сделать подклассы,как я это сделал в случае входящего к клиенту трафику? пробовал вставить подклассы - сразу начинает ругаться...[/b]

tungus
Интересующийся
Сообщения: 44
Зарегистрирован: 11 авг 2002, 04:19

Сообщение tungus »

Вообще возможно имеет смысл использовать IPMARK - будет одно правило для iptables

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

 
IPMARK
       Allows  you  to  mark a received packet basing on its IP address. This can replace many mangle/mark entries with only one, if you use firewall based classifier.

       This target is to be used inside the mangle table, in the PREROUTING, POSTROUTING or FORWARD hooks.

       --addr src/dst
              Use source or destination IP address.

       --and-mask mask
              Perform bitwise `and' on the IP address and this mask.

       --or-mask mask
              Perform bitwise `or' on the IP address and this mask.

       The order of IP address bytes is reversed to meet "human order of bytes": 192.168.0.1 is 0xc0a80001. At first the `and' operation  is performed, then `or'.

       Examples:

       We  create  a  queue  for  each  user,  the  queue  number is adequate to the IP address of the user, e.g.: all packets going to/from 192.168.5.2 are directed to 1:0502 queue, 192.168.5.12 -> 1:050c etc.

       We have one classifier rule:

              tc filter add dev eth3 parent 1:0 protocol ip fw

       Earlier we had many rules just like below:

              iptables -t mangle -A POSTROUTING -o eth3 -d 192.168.5.2 -j MARK --set-mark 0x10502

              iptables -t mangle -A POSTROUTING -o eth3 -d 192.168.5.3 -j MARK --set-mark 0x10503

       Using IPMARK target we can replace all the mangle/mark rules with only one:

              iptables -t mangle -A POSTROUTING -o eth3 -j IPMARK --addr=dst --and-mask=0xffff --or-mask=0x10000

       On the routers with hundreds of users there should be significant load decrease (e.g. twice).
Это ip одного из компьютеров на котором я тестирую...худо-бедно,но "дропает" пакеты приходяшие от пользователя на большой скорости.
Но это для одного,а мне нужно для многих...
1)что означает ffff? почему с другими значениями не работает,выдает ошибку сразу при загрузке скрипта?
2) Как можно в этой дисциплине сделать подклассы,как я это сделал в случае входящего к клиенту трафику? пробовал вставить подклассы - сразу начинает ругаться...
Маркировать пакеты (входящий трафик) c помощью iptables на eth0, шейпить аналогично с помощью htb на eth1

Aleoldo
Заглянувший
Сообщения: 10
Зарегистрирован: 20 фев 2008, 21:11
Откуда: Москва
Контактная информация:

Сообщение Aleoldo »

tungus писал(а):Вообще возможно имеет смысл использовать IPMARK - будет одно правило для iptables
как же это одно?!я может не очень понял,но как это будет выглядеть - это одно правило,которое пакеты от каждого ip отправляет в свой надлежащий класс?а потом в каждом классе на какую марку реагировать?
да и каков смысл использовать его?меньще ресурсоемкость?Потому что вроде бы одно правило совсем не напрягает,в которое циклично подставляется одна циферка и клонируется...
Маркировать пакеты (входящий трафик) c помощью iptables на eth0, шейпить аналогично с помощью htb на eth1
а нат не будет мешать?марки после ната остаются?или надо как то по особому метить?

tungus
Интересующийся
Сообщения: 44
Зарегистрирован: 11 авг 2002, 04:19

Сообщение tungus »

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

как же это одно?!я может не очень понял,но как это будет выглядеть - это одно правило,которое пакеты от каждого ip отправляет в свой надлежащий класс?а потом в каждом классе на какую марку реагировать? 
да и каков смысл использовать его?меньще ресурсоемкость?Потому что вроде бы одно правило совсем не напрягает,в которое циклично подставляется одна циферка и клонируется...
Выше все ж написано. Перевести чтоли?
Минус - нужно патчить ядро.
а нат не будет мешать?марки после ната остаются?или надо как то по особому метить?
После nat марки остаются

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

tc filter add dev $DEVS_IN parent 1:0 protocol ip handle $N fw flowid 1:$N
Можно обойтись одним правилом tc filter

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

tc filter add dev $DEVS_IN parent 1:0 protocol ip fw
если соответсвующим образом назвать htb классы и выставлять mark с помощью iptables -j MARK.

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

iptables -t mangle -A MYSHAPERS-IN -d 192.168.22.$N -j MARK --set-mark  0x$[10000+N]

Смотреть пример к IPMARK.
Последний раз редактировалось tungus 02 мар 2008, 08:35, всего редактировалось 2 раза.

Ответить