LINUX.ORG.RU
решено ФорумAdmin

[shaping][<ifb|imq|etc.>] динамический шейпинг двух подсетей


0

1


имеется:

  • debian squeeze
  • eth0 - wan
  • eth1 - lan (192.168.1.0/24)
  • venet0 - dmz (192.168.200.0/24)

нужно:

  • пакеты, идущие в dmz: rate=max_rate/3, ceil=max_rate
  • пакеты, идущие в lan: rate=max_rate*2/3, ceil=max_rate
  • исходя? из вышеизложенного: каждая из подсетей может «одалживать» другой неиспользуемые ею «ресурсы»

догадки:
поскольку хочется именно динамически шейпить подсети - понимаю, что нужно это делать _до_ eth1|venet0

но:

  • перенаправлять пакеты с eth0 на ifb бессмысленно, ибо ifb «лежит» _до_ nat'а, а значит раскидать трафик по классам в зависимости от следуемого направления не получится
  • можно перенаправить с eth0 на imq, а после раскидывать по классам, но для этого нужно патчить ядро, чего очень не хочется

прошу:
подсказать другие_варианты/упущенные_мною_моменты для реализации задуманного


Ответ на: комментарий от ventilator

вчера попробовал так:

$TC qdisc del dev venet0 root >/dev/null 2>&1
$TC qdisc del dev venet0 ingress >/dev/null 2>&1
$TC qdisc del dev ifb0 root >/dev/null 2>&1
$TC qdisc del dev ifb0 ingress >/dev/null 2>&1

$TC qdisc add dev venet0 ingress
$TC filter add dev venet0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

$TC qdisc add dev ifb0 root handle 1: htb default 10
$TC class add dev ifb0 parent 1: classid 1:10 htb rate 800kbit ceil 800kbit
    $TC qdisc add dev ifb0 parent 1:10 handle 10: sfq perturb 5

ifconfig ifb0 up
по барабану :( продалжать дальше (eth1->ifb0) смысла не увидел
возможно где-то что-то и напутал :-/

cac2s ()
Ответ на: комментарий от ventilator

1) мне входящий и нужно шейпить :-/

2) думаю, что можно и без фильтров, т.к.:

  • $TC qdisc add dev ifb0 root handle 1: htb default 10
  • $TC class add dev ifb0 parent 1: classid 1:10 htb rate 800kbit ceil 800kbit
  • $TC qdisc add dev ifb0 parent 1:10 handle 10: sfq perturb 5

2а) эту же схему (без фильтра) сделал для venet0 - всё чудесно работало

или я уже совсем того... переработался? %)

cac2s ()
Ответ на: комментарий от ventilator

поменял до след. вида:

#!/bin/bash

IPT="/sbin/iptables"
TC="/sbin/tc"
IP="/bin/ip"

$TC qdisc del dev venet0 root >/dev/null 2>&1
$TC qdisc del dev venet0 ingress >/dev/null 2>&1
$TC qdisc del dev ifb0 root >/dev/null 2>&1
$TC qdisc del dev ifb0 ingress >/dev/null 2>&1

$IP link set ifb0 down
rmmod ifb
modprobe ifb numifbs=1
$IP link set ifb0 up

$TC qdisc add dev venet0 handle ffff: ingress
    $TC filter add dev venet0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

$TC qdisc add dev ifb0 root handle 1: htb default 10
$TC class add dev ifb0 parent 1: classid 1:10 htb rate 800kbit ceil 800kbit
    $TC qdisc add dev ifb0 parent 1:10 handle 10: sfq perturb 5
    $TC filter add dev ifb0 parent 1: prio 10 protocol ip u32 match u32 0 0 flowid 1:10
:(
шмалит на всю падклюка

cac2s ()
Ответ на: комментарий от cac2s

вдогонку
перед тестовой закачкой в контейнере:

# ifconfig ifb0
ifb0      Link encap:Ethernet  HWaddr 4e:f5:5a:00:00:00
          inet6 addr: fe80::4cf5:5aff:fe00:0000/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
после скачивания в контейнере ~73MiB:
# ifconfig ifb0
ifb0      Link encap:Ethernet  HWaddr 4e:f5:5a:00:00:00
          inet6 addr: fe80::4cf5:5aff:fe00:0000/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:27784 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27784 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:1846831 (1.7 MiB)  TX bytes:1846831 (1.7 MiB)
хотя на venet0:
# ifconfig venet0
venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:150151 errors:0 dropped:0 overruns:0 frame:0
          TX packets:220600 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1930924 (1.7 MiB)  TX bytes:76655637 (73.1 MiB)
т.е. получается, что на ifb0 перенаправляется не то?! O_o
бррр.... всё. каша в голове. пойду отдыхать. завтра новый день, на работу, а там...
всем [не]помогающим - приятного отдыха!

2 ventilator: можно и не ВЫкать :) даже нужно! ;)
и да: спасибо за помощь :)

cac2s ()
Ответ на: комментарий от cac2s

не спалось... :)
не зря!

#!/bin/bash

IPT="/sbin/iptables"
TC="/sbin/tc"
IP="/bin/ip"

$TC qdisc del dev venet0 root >/dev/null 2>&1
$TC qdisc del dev venet0 ingress >/dev/null 2>&1
$TC qdisc del dev ifb0 root >/dev/null 2>&1
$TC qdisc del dev ifb0 ingress >/dev/null 2>&1

$IP link set ifb0 down
rmmod ifb
modprobe ifb numifbs=1
$IP link set ifb0 up

#######
$TC qdisc add dev venet0 root handle 1: prio
$TC qdisc add dev venet0 ingress
    $TC filter add dev venet0 parent 1: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#######

$TC qdisc add dev ifb0 root handle 1: htb
$TC class add dev ifb0 parent 1: classid 1:10 htb rate 80kbit ceil 80kbit
    $TC qdisc add dev ifb0 parent 1:10 handle 10: sfq perturb 5
    $TC filter add dev ifb0 parent 1: prio 10 protocol ip u32 match ip dst 192.168.254.254 flowid 1:10
и «урррраааа!!! Дядя Фёдор прриееехааал!!!»

ну, теперь можно и на боковую :)

cac2s ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.