Jump to content
Калькуляторы

u32 hash нарезка на двух интерфейсах

есть тазик

 

на нем нарезка на двух интерфейсах eth0 и eth1

раньше все было через маркировку iptables, решили переделать под u32 + хеши

 

tc filter add dev eth0 parent 1: prio 10 handle 999: protocol ip u32 divisor 64

tc filter add dev eth1 parent 1: prio 10 handle 999: protocol ip u32 divisor 64

tc filter add dev eth0 parent 1: protocol ip prio 100 u32 ht 800:: match ip src 192.168.0.0/18 hashkey mask 0x00003F00 at 16 link 999:

tc filter add dev eth1 parent 1: protocol ip prio 100 u32 ht 800:: match ip dst 192.168.0.0/18 hashkey mask 0x00003F00 at 16 link 999:

 

ну и для каждой из подсетей:

tc filter add dev eth0 parent 1: prio 10 handle 3f: protocol ip u32 divisor 256

tc filter add dev eth1 parent 1: prio 10 handle 3f: protocol ip u32 divisor 256

tc filter add dev eth0 parent 1: protocol ip prio 10 u32 ht 999:3f: match ip src 192.168.63.0/24 hashkey mask 0x000000ff at 16 link 3f:

tc filter add dev eth1 parent 1: protocol ip prio 10 u32 ht 999:3f: match ip dst 192.168.63.0/24 hashkey mask 0x000000ff at 16 link 3f:

 

 

по итогу режет только на исходящем для клиентов интерфейсе...

т.е. на eth1 - все режецо, в фильтрах есть попадания в ячейки, но на eth0 - все по нулям...

 

была мысль создать разные таблицы:

tc filter add dev eth0 parent 1: prio 10 handle 888: protocol ip u32 divisor 64

tc filter add dev eth1 parent 1: prio 10 handle 999: protocol ip u32 divisor 64

 

ничего не изменилось

Share this post


Link to post
Share on other sites

везде или только в большой таблице?

Share this post


Link to post
Share on other sites

там где не работает, 12 и 16 - это src и dst в ip заголовке

Share this post


Link to post
Share on other sites

тьфу

 

работает!

 

пасиба большое!

 

tc filter add dev eth0 parent 1: prio 10 handle 999: protocol ip u32 divisor 64

tc filter add dev eth1 parent 1: prio 10 handle 999: protocol ip u32 divisor 64

 

хэндлы можно там и там оставить по 999????

Share this post


Link to post
Share on other sites
хэндлы можно там и там оставить по 999????
вроде да

 

Share this post


Link to post
Share on other sites

ну попробуем вернуть одинаковые

 

исчо раз пасиба :)

Share this post


Link to post
Share on other sites

Добрый день.

Решил не создавать новую тему, тк вопросы похожи.

 

Имеется роутер на linux. Необходимо шейпепить юзеров.

 

Часть конфига шейпера, в котором абоненты фильтруются по последнему октету в ip и их пакеты попадают в свой класс для обработки :

 

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100 Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst ххх.ххх.206.0/23 hashkey mask 0x000000ff at 16 link 2:
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src ххх.ххх.206.0/23 hashkey mask 0x000000ff at 12 link 2:    

#для примера привел один ip
tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst ххх.ххх.206.123 flowid 1:ce7b
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src ххх.ххх.206.123 flowid 1:ce7b

 

Правильно ли использование одного класса для исходящего/входящего трафика? Или лучше будет разнести потоки по разным классам?

 

Тест скорости на яндексе показывает ~9Mbit в обоих направлениях, как понимаю, подобное тестирование синтетическое/однобокое.

Попробовать ftp транзакции в различные направления одновременно?

Share this post


Link to post
Share on other sites

Правила нужно создавать на двух интерфейсах, т.к. шейпить можно только исходящий трафик. Вместо команды add лучше использовать replace, чтобы не было конфликтов при повторном создании правил.

Share this post


Link to post
Share on other sites

photon

конфликтов не будет, тк в начале скрипта есть строка tc qdisc del dev eth0 root 2>/dev/null

Правила нужно создавать на двух интерфейсах, т.к. шейпить можно только исходящий трафик.
если второго интерфейса нет? точнее есть eth0 и на нем же висит vlan.

если действует аксиома про исходящий трафик, то как на том же тесте удалось увидеть скорость в рамках rate на upload/download?

Share this post


Link to post
Share on other sites

если второго интерфейса нет? точнее есть eth0 и на нем же висит vlan.

vlan не интерфейс? Или вы умудряетесь принимать нетегированный траф, а отдавать - тегированный?

Share this post


Link to post
Share on other sites
vlan не интерфейс?
он самый.

на vlan не хочу шейпер вешать, тк /23 по двум разным vlan распределится, как 2 по /24.

хочется более изящного решения.

 

Share this post


Link to post
Share on other sites

на vlan (исходящий траф) шейпер вешать можно, работать будет

Share this post


Link to post
Share on other sites

опишу полностью ситуацию.

маршрутизатор c одним eth. на нем без тега висит внешний адрес, а так же прописан vlan, который смотрит в сторону абонентов.

на vlan алиасом прописано два адреса.

сетевая набортная, трафика не больше 50Мбит.

03:0a.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller

---

 

попробовал разделить потоки:

 

 

tc qdisc del dev eth0 root 2>/dev/null

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/23 hashkey mask 0x000000ff at 16 link 2:
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    

tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc c a dev eth0 parent 1:1 classid 1:cd7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:cd7b

 

получилось по фильтрам:

 

 

tc -s f s dev eth0
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 818459 success 454303)
  match d9c5ce7b/ffffffff at 16 (success 454303 ) 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:801 order 2049 key ht 2 bkt 7b flowid 1:cd7b  (rule hit 364156 success 363757)
  match d9c5ce7b/ffffffff at 12 (success 363757 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 7384336 success 0)
  match d9c5ce00/fffffe00 at 16 (success 3034157 ) 
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 5 u32 fh 800::801 order 2049 key ht 800 bkt 0 link 2:  (rule hit 6930033 success 0)
  match d9c5ce00/fffffe00 at 12 (success 4343857 ) 
    hash mask 000000ff at 12

 

по классам в момент передачи данных по ssh (upload/download больших файлов):

 

 

tc -s c s dev eth0
class htb 1:cd7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 302539337 bytes 344864 pkt (dropped 230, overlimits 0 requeues 0) 
rate 8454Kbit 917pps backlog 0b 76p requeues 0 
lended: 324412 borrowed: 20376 giants: 0
tokens: -17109 ctokens: -18909

class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
Sent 779392156 bytes 783779 pkt (dropped 0, overlimits 0 requeues 0) 
rate 14621Kbit 1885pps backlog 0b 0p requeues 0 
lended: 53826 borrowed: 0 giants: 0
tokens: 813 ctokens: 813

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 476943387 bytes 438991 pkt (dropped 368, overlimits 0 requeues 0) 
rate 6160Kbit 968pps backlog 0b 0p requeues 0 
lended: 405541 borrowed: 33450 giants: 0
tokens: 21218 ctokens: 19110

есть одно НО. в момент одновременной передачи процентов 90 времени на ssh клиенте (нетбук) видел преобладание исходящего трафика, над входящим, т.е. заливаем со скоростью 10Мбит, скачиваем со сколько 1-2Мбит, редко потоки сравниваются, затем снова деградирует download поток.

 

 

tc -s c s dev eth0

class htb 1:cd7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b

Sent 290965755 bytes 333739 pkt (dropped 215, overlimits 0 requeues 0)

rate 9645Kbit 861pps backlog 0b 0p requeues 0

lended: 314241 borrowed: 19498 giants: 0

tokens: 21218 ctokens: 19110

 

class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b

Sent 755543282 bytes 759630 pkt (dropped 0, overlimits 0 requeues 0)

rate 11603Kbit 1557pps backlog 0b 0p requeues 0

lended: 51988 borrowed: 0 giants: 0

tokens: 110 ctokens: 110

 

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b

Sent 464660733 bytes 425960 pkt (dropped 360, overlimits 0 requeues 0)

rate 1941Kbit 695pps backlog 0b 69p requeues 0

lended: 393401 borrowed: 32490 giants: 0

tokens: -3728 ctokens: -18947

 

---

 

Ну это единственный выход помоему...
на vlan (исходящий траф) шейпер вешать можно, работать будет

 

переделал шейпер

 

tc qdisc del dev eth0 root 2>/dev/null
tc qdisc del dev vlan1272 root 2>/dev/null

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100Mbit

tc q a dev vlan1272 root handle 1: htb
tc c a dev vlan1272 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1272 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1272 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/24 hashkey mask 0x000000ff at 16 link 2:

tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:ce7b

tc c a dev vlan1272 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b

 

результат при одновременной передаче данных по ssh:

 

по фильтрам

tc -s f s dev vlan1272
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 719041 success 719041)
  match d9c5ce7b/ffffffff at 16 (success 719041 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 1511820 success 0)
  match d9c5ce00/ffffff00 at 16 (success 1511816 ) 
    hash mask 000000ff at 16 



tc -s f s dev eth0
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 838466 success 838466)
  match d9c5ce7b/ffffffff at 12 (success 838466 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 3331902 success 0)
  match d9c5ce00/fffffe00 at 12 (success 1854377 ) 
    hash mask 000000ff at 12

 

 

по классам

tc -s c s dev vlan1272
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
Sent 536222140 bytes 410525 pkt (dropped 0, overlimits 0 requeues 0) 
rate 752968bit 521pps backlog 0b 0p requeues 0 
lended: 36965 borrowed: 0 giants: 0
tokens: 1750 ctokens: 1750

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 536222140 bytes 410525 pkt (dropped 42854, overlimits 0 requeues 0) 
rate 752968bit 521pps backlog 0b 0p requeues 0 
lended: 373560 borrowed: 36965 giants: 0
tokens: 19343 ctokens: 17407



tc -s c s dev eth0
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
Sent 174091668 bytes 454275 pkt (dropped 0, overlimits 0 requeues 0) 
rate 9877Kbit 886pps backlog 0b 0p requeues 0 
lended: 10174 borrowed: 0 giants: 0
tokens: 110 ctokens: 110

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 174183564 bytes 454347 pkt (dropped 131, overlimits 0 requeues 0) 
rate 9881Kbit 886pps backlog 0b 72p requeues 0 
lended: 444101 borrowed: 10174 giants: 0
tokens: -3463 ctokens: -18943

 

при такой реализации шейпера при одновременной передачи данных по ssh скорость скачивания не поднималась выше мегабита, при этом отдача была в рамках rate/ceil.

тест на internet.yandex.ru показывает download ~6.5Мбит, upload ~8.9Мбит.

 

 

есть мысли почему при такой, вроде бы правильной реализации, download у абонент еще сильнее деградировал?

Share this post


Link to post
Share on other sites

сделал два vlan на одном eth.

 

шейпер

 

 

tc qdisc del dev vlan1017 root 2>/dev/null
tc qdisc del dev vlan1272 root 2>/dev/null

tc q a dev vlan1017 root handle 1: htb
tc c a dev vlan1017 parent 1: classid 1:1 htb rate 100Mbit

tc q a dev vlan1272 root handle 1: htb
tc c a dev vlan1272 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev vlan1017 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1017 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1272 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1272 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1017 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/24 hashkey mask 0x000000ff at 16 link 2:

tc c a dev vlan1017 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1017 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:ce7b

tc c a dev vlan1272 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b

 

результаты работы при одновременной передаче данных по ssh:

 

 

mmm-cow:~# tc -s c s dev vlan1272
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
Sent 676899179 bytes 487263 pkt (dropped 0, overlimits 0 requeues 0) 
rate 9663Kbit 801pps backlog 0b 0p requeues 0 
lended: 48015 borrowed: 0 giants: 0
tokens: 110 ctokens: 110

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 676900693 bytes 487264 pkt (dropped 51720, overlimits 0 requeues 0) 
rate 9662Kbit 801pps backlog 0b 1p requeues 0 
lended: 439248 borrowed: 48015 giants: 0
tokens: -8071 ctokens: -18909

mmm-cow:~# tc -s c s dev vlan1017
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
Sent 95845041 bytes 493720 pkt (dropped 0, overlimits 0 requeues 0) 
rate 524288bit 815pps backlog 0b 0p requeues 0 
lended: 5062 borrowed: 0 giants: 0
tokens: 1907 ctokens: 1907

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
Sent 95845041 bytes 493720 pkt (dropped 3593, overlimits 0 requeues 0) 
rate 524288bit 815pps backlog 0b 0p requeues 0 
lended: 488658 borrowed: 5062 giants: 0
tokens: 21109 ctokens: 19000

mmm-cow:~# tc -s f s dev vlan1272
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 555549 success 555549)
  match d9c5ce7b/ffffffff at 16 (success 555549 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 859843 success 0)
  match d9c5ce00/ffffff00 at 16 (success 859843 ) 
    hash mask 000000ff at 16 
mmm-cow:~# tc -s f s dev vlan1017
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 509684 success 509684)
  match d9c5ce7b/ffffffff at 12 (success 509684 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 951792 success 0)
  match d9c5ce00/fffffe00 at 12 (success 937334 ) 
    hash mask 000000ff at 12

 

наглядная картинка:

5c0642c8447d.png

 

как видно, ситуация изменилась с точностью наоборот... :)

 

включать второй eth?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this