LINUX.ORG.RU
ФорумAdmin

htb - разграничение трафика


0

0

Задача: разграничить трафик по приоритетам согласно IP-адресов. Для этого использую htb и пишу такой скрипт, который создаёт 3 полосы и в 1-ю (11) пускает всё от 192.168.0.2,3,17,18,131; в 3-ю (13)- всё от 192.168.10.2; а во 2-ю (12) - весь неклассифицированный трафик. Канал - 64 kbit/s. Проблема в том, что весь трафик уходит во 2-ю полосу :( Как это поправить? Спасибо.

#!/bin/bash p=/sbin $p/tc qdisc add dev eth1 root handle 1: htb default 12

$p/tc class add dev eth1 parent 1: classid 1:1 htb rate 64kbit ceil 64kbit

$p/tc class add dev eth1 parent 1:1 classid 1:11 htb rate 40kbit prio 0 $p/tc class add dev eth1 parent 1:1 classid 1:12 htb rate 32kbit ceil 64kbit prio 1 $p/tc class add dev eth1 parent 1:1 classid 1:13 htb rate 10kbit ceil 64kbit prio 1

$p/tc qdisc add dev eth1 parent 1:11 handle 110: sfq perturb 10 $p/tc qdisc add dev eth1 parent 1:12 handle 120: sfq perturb 10 $p/tc qdisc add dev eth1 parent 1:13 handle 130: sfq perturb 10

U32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 0 u32" $U32 match ip src 192.168.0.2/32 flowid 1:11 $U32 match ip src 192.168.0.3/32 flowid 1:11 $U32 match ip src 192.168.0.17/32 flowid 1:11 $U32 match ip src 192.168.0.18/32 flowid 1:11 $U32 match ip src 192.168.0.131/32 flowid 1:11

U_32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32" $U_32 match ip src 192.168.10.2/32 flowid 1:13

anonymous

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

Fedora Core 4 Стандартное ядро 2.6.11-1.1369_FC4

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

# /sbin/tc -d -s qdisc sh dev eth1
qdisc htb 1: r2q 10 default 12 direct_packets_stat 1 ver 3.17
Sent 28408059 bytes 127199 pkt (dropped 0, overlimits 23723 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 110: parent 1:11 limit 128p quantum 1514b flows 128/1024 perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 120: parent 1:12 limit 128p quantum 1514b flows 128/1024 perturb 10sec
Sent 28407959 bytes 127198 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 130: parent 1:13 limit 128p quantum 1514b flows 128/1024 perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

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

Да, точно:

# /sbin/tc -s -d qdisc ls
qdisc pfifo_fast 0: dev eth0 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 178427563 bytes 309796 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 1: dev eth1 r2q 10 default 12 direct_packets_stat 1 ver 3.17
 Sent 28810840 bytes 130385 pkt (dropped 0, overlimits 23747 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 110: dev eth1 parent 1:11 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 120: dev eth1 parent 1:12 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 28810740 bytes 130384 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 130: dev eth1 parent 1:13 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0

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

теоретически все правильно, хотя у меня есть большие сомнения
по поводу "pref 0". я бы все-таки попробовал бы в качестве
приоритета положительные числа. т.е. причина очевидно в том, что
фильтры не срабатывают, поподробнее посмотреть, что творится можно
tc -d -s filter sh dev eth1

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

Изменил, но не очень помогло:
# cat ./htb_inet
#!/bin/bash
p=/sbin
$p/tc qdisc add dev eth1 root handle 1: htb default 12

$p/tc class add dev eth1 parent 1: classid 1:1 htb rate 64kbit ceil 64kbit

$p/tc class add dev eth1 parent 1:1 classid 1:11 htb rate 40kbit prio 1
$p/tc class add dev eth1 parent 1:1 classid 1:12 htb rate 32kbit ceil 64kbit prio 2
$p/tc class add dev eth1 parent 1:1 classid 1:13 htb rate 10kbit ceil 64kbit prio 2

$p/tc qdisc add dev eth1 parent 1:11 handle 110: sfq perturb 10
$p/tc qdisc add dev eth1 parent 1:12 handle 120: sfq perturb 10
$p/tc qdisc add dev eth1 parent 1:13 handle 130: sfq perturb 10

U32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32"
$U32 match ip src 192.168.0.2/32 flowid 1:11
$U32 match ip src 192.168.0.3/32 flowid 1:11
$U32 match ip src 192.168.0.17/32 flowid 1:11
$U32 match ip src 192.168.0.18/32 flowid 1:11
$U32 match ip src 192.168.0.131/32 flowid 1:11

U_32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 2 u32"
$U_32 match ip src 192.168.10.2/32 flowid 1:13

А вот про фильтры:
# /sbin/tc -d -s filter sh dev eth1
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:11  (rule hit 308 success 0)
  match c0a80002/ffffffff at 12 (success 0 )
filter parent 1: protocol ip pref 1 u32 fh 800::801 order 2049 key ht 800 bkt 0 flowid 1:11  (rule hit 307 success 0)
  match c0a80003/ffffffff at 12 (success 0 )
filter parent 1: protocol ip pref 1 u32 fh 800::802 order 2050 key ht 800 bkt 0 flowid 1:11  (rule hit 307 success 0)
  match c0a80011/ffffffff at 12 (success 0 )
filter parent 1: protocol ip pref 1 u32 fh 800::803 order 2051 key ht 800 bkt 0 flowid 1:11  (rule hit 307 success 0)
  match c0a80012/ffffffff at 12 (success 0 )
filter parent 1: protocol ip pref 1 u32 fh 800::804 order 2052 key ht 800 bkt 0 flowid 1:11  (rule hit 307 success 0)
  match c0a80083/ffffffff at 12 (success 0 )
filter parent 1: protocol ip pref 2 u32
filter parent 1: protocol ip pref 2 u32 fh 801: ht divisor 1
filter parent 1: protocol ip pref 2 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:13  (rule hit 307 success 0)
  match c0a80a02/ffffffff at 12 (success 0 )

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

Это связано с тем, что запросы, которые таки попадают под твои правила с src не являются _исходящим_ трафиком и не обрабатываются вовсе.

Таким образом, весь исходящий трафик и попадает в класс по умолчанию, поскольку там src не тот :)

Понятно изложил?

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

Изменил так:
#!/bin/bash
p=/sbin
$p/tc qdisc add dev eth1 root handle 1: htb default 12

$p/tc class add dev eth1 parent 1: classid 1:1 htb rate 64kbit ceil 64kbit

$p/tc class add dev eth1 parent 1:1 classid 1:11 htb rate 40kbit prio 1
$p/tc class add dev eth1 parent 1:1 classid 1:12 htb rate 32kbit ceil 64kbit prio 2
$p/tc class add dev eth1 parent 1:1 classid 1:13 htb rate 10kbit ceil 64kbit prio 2

$p/tc qdisc add dev eth1 parent 1:11 handle 110: sfq perturb 10
$p/tc qdisc add dev eth1 parent 1:12 handle 120: sfq perturb 10
$p/tc qdisc add dev eth1 parent 1:13 handle 130: sfq perturb 10

U32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32"
$U32 match ip dst 192.168.0.2/32 flowid 1:11
$U32 match ip dst 192.168.0.3/32 flowid 1:11
$U32 match ip dst 192.168.0.17/32 flowid 1:11
$U32 match ip dst 192.168.0.18/32 flowid 1:11
$U32 match ip dst 192.168.0.131/32 flowid 1:11

U_32="$p/tc filter add dev eth1 parent 1:0 protocol ip prio 2 u32"
$U_32 match ip dst 192.168.10.2/32 flowid 1:13
Смотрим:
# /sbin/tc -s -d qdisc ls
qdisc pfifo_fast 0: dev eth0 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 221007789 bytes 383795 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 1: dev eth1 r2q 10 default 12 direct_packets_stat 1 ver 3.17
 Sent 4213063 bytes 17247 pkt (dropped 0, overlimits 1534 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 110: dev eth1 parent 1:11 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 120: dev eth1 parent 1:12 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 4213009 bytes 17246 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 130: dev eth1 parent 1:13 limit 128p quantum 1514b flows 128/1024 perturb 10sec
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
Всё равно не работает...

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

Хорошо, твоя схема:

Инет <-> |eth0-шлюз-eth1| <-> локалка

я, прав?

И трафик во второй очереди, это что за пакеты, откуда и куда?

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

Нет, моя схема:
Инет <-> |eth1-шлюз-eth0| <-> локалка
Трафик во 2 очереди это пакеты из инета на 192.168.0.*

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

Ясно :) И само-собой, ты NAT'ишь свою сетку?

Если да, то вот в том месте, в котором торчит слово "шлюз", происходит подмена IP-адресов, поэтому по IP 192,168,*,* ты ничего там не найдешь :)

Тебе надо работать с eth0, а не eth1

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

Но у меня на машине ещё стоит web-, ftp-, mail-, dns и т.д. серверы, которые смотрят на внутреннюю сеть. Выходит, если я пропишу eth0 вместо eth1 я урежу себе канал с внутренней сетью до 64kbit! Или я чего-то не понимаю?

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

Все верно, так и будет.

Можешь попробовать использовать IMQ-устройство (возможно, надо будет пересобрать iptables и ядро) и заворачивать на него только транзитный трафик, должно помочь. Только не забудь поставить imq-nat пачт, потому что это важно, в твоем случае. http://www.linuximq.net/

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

Спасибо большое! Пакеты теперь идут как надо, но всё же, выходит у меня канал с внутренней сетью теперь 64k!?

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