* [Sysadmins] tc @ 2007-08-21 20:28 Anton Gorlov 2007-08-22 5:00 ` Denis Klimov 0 siblings, 1 reply; 6+ messages in thread From: Anton Gorlov @ 2007-08-21 20:28 UTC (permalink / raw) To: ALT Linux sysadmin discuss Ммм..как бы средстьвами tc+iptables организовать такую вещь: Здача сделать шейпер. Что нужно от него - есть улиенты которых нужно пускать в инет на скорости 64К скажем а во внутренюю сеть со скоростью 128К (всего получается 192К) и клиенты которых нужно пускать как 128/128 (256 всего). Сейчас это сделано на базе bsd...но хочется избавиться от... Сейчас оно сделано так - приходит на 1 интерфейс, найтится шейпится из сети скажем 10.10.65.xx в 10.10.165.xx (ipnat+ipfw+pipe) Ъотя от ната вообще было бы интересно избавиться..то ест ьскажем у клиента шлюзомстоит ип 1 интерфейса шейпера..а шейпер уже отдлаёт пакетики дальше только зашейпив. Как бы такое сделать средствами tc? -- np: silence ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Sysadmins] tc 2007-08-21 20:28 [Sysadmins] tc Anton Gorlov @ 2007-08-22 5:00 ` Denis Klimov 2007-08-22 5:41 ` Anton Gorlov 0 siblings, 1 reply; 6+ messages in thread From: Denis Klimov @ 2007-08-22 5:00 UTC (permalink / raw) To: ALT Linux sysadmin discuss Если я правильно понял и ip клиентов 10.10.65.xx, внутреняя сеть 10.10.165.xx то применяя htb можно сделать так: tc qdisc add dev eth0 root handle 1: htb; # Задаем общую скорость tc class add dev eth0 parent 1: classid 1:1 htb rate 100M; #Даем 128К из внутренней сети, нужно повторить для каждого клиента, #увеличивая classid 1:x в первой строке и соответственно flowid 1:х во второй. IP клиента в данном примере 10.10.65.123 tc class add dev eth0 parent 1:1 classid 1:1 htb rate 128kbit; tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.10.65.123 match ip src 10.10.165.0/24 flowid 1:1; #Повторяем для каждого клиента, которому надо дать 64К инета, продолжая увеличивать classid и flowid tc class add dev eth0 parent 1:1 classid 1:10 htb rate 64kbit; tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.10.65.123 flowid 1:10; Аналогично для клиентов, которым надо дать инет 128К Для того чтобы избавиться от ната (который для взаимодействия с внутренней сетью), необходимо чтобы и у машин в этой внутренней сети были прописаны правильные маршруты. On Wed, 22 Aug 2007 00:28:42 +0400 Anton Gorlov wrote: > Ммм..как бы средстьвами tc+iptables организовать такую вещь: > Здача сделать шейпер. > Что нужно от него - есть улиенты которых нужно пускать в инет на > скорости 64К скажем а во внутренюю сеть со скоростью 128К (всего > получается 192К) и клиенты которых нужно пускать как 128/128 (256 всего). > > Сейчас это сделано на базе bsd...но хочется избавиться от... > Сейчас оно сделано так - приходит на 1 интерфейс, найтится шейпится из > сети скажем 10.10.65.xx в 10.10.165.xx (ipnat+ipfw+pipe) > Ъотя от ната вообще было бы интересно избавиться..то ест ьскажем у > клиента шлюзомстоит ип 1 интерфейса шейпера..а шейпер уже отдлаёт > пакетики дальше только зашейпив. > > > Как бы такое сделать средствами tc? > > -- > np: silence > _______________________________________________ > Sysadmins mailing list > Sysadmins@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/sysadmins -- Denis Klimov zver ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Sysadmins] tc 2007-08-22 5:00 ` Denis Klimov @ 2007-08-22 5:41 ` Anton Gorlov 2007-08-23 6:11 ` Anton Gorlov 0 siblings, 1 reply; 6+ messages in thread From: Anton Gorlov @ 2007-08-22 5:41 UTC (permalink / raw) To: ALT Linux sysadmin discuss Denis Klimov пишет: > Если я правильно понял и ip клиентов 10.10.65.xx, внутреняя сеть > 10.10.165.xx то применяя htb можно сделать так: Не..внутренняя сеть имеет реальные IP-адресса.. а клиенты и реальные и серые. Для чего чесно говоря они сейчас натятся из 1 серого ипишника в другой и потмо ещё раз натятся на циске я чесно говоря не совсем понимаю..всё было украдено до нас.. > tc qdisc add dev eth0 root handle 1: htb; > # Задаем общую скорость > tc class add dev eth0 parent 1: classid 1:1 htb rate 100M; > > #Даем 128К из внутренней сети, нужно повторить для каждого клиента, > #увеличивая classid 1:x в первой строке и соответственно flowid 1:х во второй. IP клиента в данном примере 10.10.65.123 > tc class add dev eth0 parent 1:1 classid 1:1 htb rate 128kbit; > tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.10.65.123 match ip src 10.10.165.0/24 flowid 1:1; Ммм..а если клиентов от 1К и более? писать тысячу правил представляется не совсем масштабируемым решением имхо. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Sysadmins] tc 2007-08-22 5:41 ` Anton Gorlov @ 2007-08-23 6:11 ` Anton Gorlov 2007-08-23 6:55 ` Dmytro O. Redchuk 0 siblings, 1 reply; 6+ messages in thread From: Anton Gorlov @ 2007-08-23 6:11 UTC (permalink / raw) To: ALT Linux sysadmin discuss Anton Gorlov пишет: >> #Даем 128К из внутренней сети, нужно повторить для каждого клиента, >> #увеличивая classid 1:x в первой строке и соответственно flowid 1:х во второй. IP клиента в данном примере 10.10.65.123 >> tc class add dev eth0 parent 1:1 classid 1:1 htb rate 128kbit; >> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.10.65.123 match ip src 10.10.165.0/24 flowid 1:1; > Ммм..а если клиентов от 1К и более? писать тысячу правил представляется > не совсем масштабируемым решением имхо. Как бы всё таки избавиться от того что бы не прпоисывать каждого клиента по отдельности.. Нет - забить скриптом конечно не проблема.. но не аккуратненько всё же. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Sysadmins] tc 2007-08-23 6:11 ` Anton Gorlov @ 2007-08-23 6:55 ` Dmytro O. Redchuk 2007-08-23 8:46 ` Dmytro O. Redchuk 0 siblings, 1 reply; 6+ messages in thread From: Dmytro O. Redchuk @ 2007-08-23 6:55 UTC (permalink / raw) To: Anton Gorlov; +Cc: ALT Linux sysadmin discuss On Thu, Aug 23, 2007 at 10:11:12AM +0400, Anton Gorlov wrote: > Anton Gorlov пишет: > > >> #Даем 128К из внутренней сети, нужно повторить для каждого клиента, > >> #увеличивая classid 1:x в первой строке и соответственно flowid 1:х во второй. IP клиента в данном примере 10.10.65.123 > >> tc class add dev eth0 parent 1:1 classid 1:1 htb rate 128kbit; > >> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 10.10.65.123 match ip src 10.10.165.0/24 flowid 1:1; > > Ммм..а если клиентов от 1К и более? писать тысячу правил представляется > > не совсем масштабируемым решением имхо. > > Как бы всё таки избавиться от того что бы не прпоисывать каждого клиента > по отдельности.. Нет - забить скриптом конечно не проблема.. но не > аккуратненько всё же. Я бы "забил скриптом" хэш и в каждую ячейку tc filter на класс... Это тоже, конечно, ручная работа, но такое скриптуется приятнее и работает быстрее. Особенно "если клиентов от 1К и более". Но это не то, о чём вы говорите/спрашиваете. -- _,-=._ /|_/| `-.} `=._,.-=-._., @ @._, `._ _,-. ) _,.-' ` G.m-"^m`m' Dmytro O. Redchuk ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Sysadmins] tc 2007-08-23 6:55 ` Dmytro O. Redchuk @ 2007-08-23 8:46 ` Dmytro O. Redchuk 0 siblings, 0 replies; 6+ messages in thread From: Dmytro O. Redchuk @ 2007-08-23 8:46 UTC (permalink / raw) To: Anton Gorlov; +Cc: ALT Linux sysadmin discuss On Thu, Aug 23, 2007 at 10:58:09AM +0400, Anton Gorlov wrote: > Dmytro O. Redchuk пишет: > > >Я бы "забил скриптом" хэш и в каждую > >ячейку tc filter на класс... Это > >тоже, конечно, ручная работа, но такое > >скриптуется приятнее и работает > >быстрее. Особенно "если клиентов от 1К и > >более". > >Но это не то, о чём вы > >говорите/спрашиваете. > то есть скриптмо в цикле генерить > ипишники клиентов и с каждым ипишником > увеличивать на шаг > сlassid 1:x и соответственно flowid 1:х? Ну примерно, только... Я имел в виду хеши самого tc (пример тут: http://lartc.org/howto/lartc.adv-filter.hashing.html) Я выгрызу кой-чего из своих скриптов, постараюсь покоцать и прокомментировать "более-менее". Но сначала прочитайте (если ещё не...) по той ссылке, чтобы было понятнее. Идея такая -- создаём на интерфейсе таблицу (хэш) фильтров на нужное количество сетей /24, каждая ячейка таблицы будет содержать "линк" (перебрасывающий фильтр) на другую таблицу. Эта другая таблица будет размером 256 ячеек, то есть на всю определённую сеть /24, каждая ячейка будет содержать фильтр, перебрасывающий на нужный класс (для этого айпишника/клиента). ########################################################################## ### Сначала создаём корневую дисциплину: # # # root HTB: echo -e "\n\n#\n# Root qdisc and class:\n#\n" $tc qdisc add dev $DEV root handle 1: htb default 90 # root class: $tc class add dev $DEV parent 1:0 classid 1:1 htb rate 100Mbit ### создаём хеш на две сети /24 (скажем, 192.168.1.0 и 192.168.2.0): # root filter: $tc filter add dev $DEV parent 1:1 prio 10 protocol ip u32 ### divisor 2 -- хеш на две ячейки: $tc filter add dev $DEV parent 1:1 protocol ip prio 10 handle 8: u32 divisor 2 ### создаём два хеша -- для каждой сети /24: ## для 192.168.1.0: $tc filter add dev $DEV parent 1:1 prio 10 handle 1: protocol ip u32 divisor 256 ## для 192.168.2.0: $tc filter add dev $DEV parent 1:1 prio 10 handle 2: protocol ip u32 divisor 256 /*** Для каждого клиента (не обязательно это делать для каждого айпишника, можно для групп айпишников) нужно создать класс. В каждую ячейку этих двух хешей нужно вписать фильтр, перебрасывающий в этот класс. ***/ ### В конце-концов, нужно в "верхний" хеш на две ячейки записать фильтры, ### перебрасывающие пакет сразу в нужную ячейку нужной сети: $tc filter add dev $DEV parent 1:1 protocol ip prio 10 \ u32 ht 8:0: \ match ip dst 192.168.1.0/24 \ hashkey mask 0x000000ff at 16 \ link 1: $tc filter add dev $DEV parent 1:1 protocol ip prio 10 \ u32 ht 8:1: \ match ip dst 192.168.2.0/24 \ hashkey mask 0x000000ff at 16 \ link 2: ########################################################################## :-) Где-то так. Всё это кажется сложным, возможно. У меня всё это работает уже для 13-ти сетей /24 -- кучка скриптов, "базка" с соответствием классов айпишникам, параметры этих классов... Фактически, нужно где-то указать, в какой класс кидать данный айпишник -- а если каждому айпишнику давать свой класс, то задача упрощается. Возможно :-) Да, сложновато, это ж только "направление" -- но масштабируется замечательно (в плане быстродействия). PS. Интересно, кто как иначе крутится с такими вещами... -- _,-=._ /|_/| `-.} `=._,.-=-._., @ @._, `._ _,-. ) _,.-' ` G.m-"^m`m' Dmytro O. Redchuk ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-08-23 8:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-08-21 20:28 [Sysadmins] tc Anton Gorlov 2007-08-22 5:00 ` Denis Klimov 2007-08-22 5:41 ` Anton Gorlov 2007-08-23 6:11 ` Anton Gorlov 2007-08-23 6:55 ` Dmytro O. Redchuk 2007-08-23 8:46 ` Dmytro O. Redchuk
ALT Linux sysadmins discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \ sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com public-inbox-index sysadmins Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.sysadmins AGPL code for this site: git clone https://public-inbox.org/public-inbox.git