From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 23 Aug 2007 11:46:22 +0300 From: "Dmytro O. Redchuk" To: Anton Gorlov Message-ID: <20070823084622.GD10346@ldc.net> Mail-Followup-To: Anton Gorlov , ALT Linux sysadmin discuss References: <46CB4AFA.6030507@altlinux.ru> <20070822110038.36676dba.zver@altlinux.org> <46CBCC8D.6000001@altlinux.ru> <46CD2500.4090508@altlinux.ru> <20070823065559.GC10346@ldc.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20070823065559.GC10346@ldc.net> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: ClamAV 0.88.3/4032/Wed Aug 22 23:15:27 2007 on backup.ldc.net X-Virus-Status: Clean Cc: ALT Linux sysadmin discuss Subject: Re: [Sysadmins] tc X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Aug 2007 08:46:25 -0000 Archived-At: List-Archive: 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