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

iptables + tc filter

Господа, есть задача в раздельном шейпинге на разные сети. Скажем есть локальная и внешняя сети.

 

Так вот необходимо шейпить например адреса 10.0.0.0/8 и 192.168.0.0/16 в одну полосу, а все остальное в другую. К сожалению на роутере который шейпит эти сети находятся на одном интерфейсе, соотв просто зашейпить интерфейс нельзя.

 

Я понял что это можно сделать таким образом:

Маркировать пакеты через iptables и потом отлавливая их уже tc filter разкладывать по классам шейпера.

 

Единственная проблема в конкретной реализации. То есть не хватает банального примера комманд для того чтобы понять.

То есть как мне марикровать пакеты iptables и как их потом фильтром отлавливать.

 

Возможно существуют и другие способы решить эту задачу - буду рад советам.

 

Заранее спасибо за ваши ответы.

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


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

Надо смотреть

www.netfilter.org

www.lartc.org

в частности

http://lartc.org/howto/lartc.ratelimit.single.html

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


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

Ссылка которая в часнсти - это банальный шейпинг при помощи tc. Здесь все совершенно ясно и вопрос был не в этом.

 

Вопрос был в том как маркировать пакеты iptables и после этого их фильтрами загонять в классы htb например.

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


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

Гость

iptables -t mangle -I OUTPUT -o eth1 -d 194.67.57.50 -p tcp --dport 80 -j MARK --set-mark 10

Ну а потом

tc class add dev eth1 parent 1:1 classid 1:10 htb rate 3kbps ceil 3kbps prio 0

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


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

Гость, Я бы добавил

/sbin/tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 0 handle 10 fw flowid 1:10

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

 

Вот вам пример куска рабочего скрипта, который сможете адаптировать под себя.

 

 

iptables -v -t mangle -F MYSHAPER-OUT

 

iptables -v -t mangle -N MYSHAPER-OUT

 

iptables -v -t mangle -I POSTROUTING -o $OUT_DEV -j MYSHAPER-OUT

 

/sbin/tc qdisc del dev $OUT_DEV root

 

/sbin/tc class add dev $OUT_DEV parent 1: classid 1:1 htb rate 10Mbit

/sbin/tc qdisc add dev $OUT_DEV root handle 1 htb default 30 r2q 100

 

/sbin/tc class add dev $OUT_DEV parent 1:1 classid 1:21 htb rate 8kbit ceil 10kbit prio 0

/sbin/tc qdisc add dev $OUT_DEV parent 1:21 handle 21: sfq perturb 10

/sbin/tc filter add dev $OUT_DEV parent 1:0 protocol ip prio 0 handle 21 fw flowid 1:21

 

/usr/sbin/iptables -v -t mangle -A MYSHAPER-OUT -p all -d $CLIENT_IP -j MARK --set-mark 21

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


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

2IbZ: Спасибо большое за подробную инструкцию. Ноу меня вопрос. Вот в последнем примере и класс и хендл который ставится и марк ровняются 21, а если у меня марк будет другой, то мне надо будет везде кроме classid поставить номер марка?

 

И еще: есть ли необходимость создавать второй qdisc на устройство? Или можно обойтись и одним qdisc?

 

Заранее спасибо за ответы.

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


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

Гость

Вот самый простой способ зажать траффик:

Тут у нас xxx.xxx.xx.xxx и xxx.xxx.xx.yy получают цыра 3 k а еира 6 k

 

ipt_cmd -t mangle -I OUTPUT -o eth1 -d xx.xx.xx.xx -j MARK --set-mark 10

ipt_cmd -t mangle -I OUTPUT -o eth1 -d xx.xx.xx.yy -j MARK --set-mark 11

 

#дисциплина очереди

tc qdisc add dev eth1 root handle 1: htb

#главный класс

tc class add dev eth1 parent 1: classid 1:1 htb rate 6kbps ceil 6kbps

#дочерние классы

tc class add dev eth1 parent 1:1 classid 1:10 htb rate 3kbps ceil 6kbps prio 0

tc class add dev eth1 parent 1:1 classid 1:11 htb rate 3kbps ceil 6kbps prio 0

#фильтр

tc filter add dev eth1 protocol ip handle 10 parent 1:0 prio 0 fw flowid 1:10

tc filter add dev eth1 protocol ip handle 11 parent 1:0 prio 0 fw flowid 1:11

 

Вот еще почитай:

http://lartc.org/howto/lartc.cookbook.ulti...tc.html#AEN2241

http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm

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


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

Я уже разобрался, handle в фильтре отвечает за то какие марки держать. Спасибо большое за вашу помощь и терпение.

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


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

Join the conversation

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

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

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

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

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

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

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