Hlavní navigace

HTB - další krůčky

Radek Podgorný

Vítejte u dalšího (volného) pokračování článku o HTB. Dnes se pokusíme vyřešit (nebo obejít) několik problémů, které se objevily minule. Pokusím se též zodpovědět některé otázky, které mi čtenáři posléze položili.

Hned zpočátku musím ještě trochu okomentovat díl předchozí. Jsem velice rád, že se pod ním rozpoutala tak bohatá diskuse, a především mě těší to, že obsahovala mnoho doplňujících a upřesňujících informací. Ano, skutečně, ne vše, co jsem uvedl ve svém článku, bylo zcela přesné nebo úplné. To má v principu dva důvody. Za prvé, nechtěl jsem začátečníky zatěžovat přílišnými a zbytečnými detaily. Druhým důvodem je pak smutná skutečnost, že některé věci zkrátka neznám nebo znám jen povrchně. Programováním síťových serepetiček jsem se nikdy nezabýval, a proto dávám k dispozici pouze své praktické zkušenosti s dílky cizích lidí. Popis některých skutečností se pak může více či méně lišit od toho, jak vše původně myslel sám autor… :-(

Zkusme tentokrát začít přímo skriptem, který se však kvůli dlouhým řádkám nevejde do článku, proto jej naleznete ve zvláštním souboru.

Prvních několik řádků by mělo být s pomocí přečtení prvního článku snadno pochopitelných. Modifikace spočívají v užití možností shellu pro automatické dopočítávání šířky pásma. Všimněte si též, že jsem z řádku definujícího kořen odstranil parametr „default“. To úzce souvisí se změnou řádků pro značkování packetů pomocí iptables. V těch jsem totiž nahradil klíčové slovo POSTROUTING FORWARDem, čímž jsem dosáhl toho, že značkování se aplikuje pouze na routované packety. Z toho logicky vyplývá, že jakýkoliv jiný packet, který bude opouštět počítač na rozhraní eth0, musí být generován lokálně (pokud nevěříte, pozorně prostudujte sadu značkovacích příkazů. Pokud pak takový packet přijde na řadu, nevyhoví žádné z podmínek nadefinovaných u filtrů a „spadne“ někam mezi, kde na ně ovšem nejsou aplikována žádná omezení. Cesta je to sice nečistá, ale účinná (za vše se ještě omluvím na konci článku, nebojte). Elegantnějším řešením tohoto problému by mohlo (a mělo) být vytvoření zvláštní třídy s RATE třeba 100mbit, do níž bychom pak „házeli“ ty správné packety a vše by fungovalo mnohem čistěji. Teorie je krásná, ale praxe… …no škoda mluvit. :-( Pokud byste to zkusili, začne na vás jádro (jeho HTB část) křičet, že šířka pásma pro jednotlivé třídy je ve značné nerovnováze a že nemůže efektivně zaručit správnou funkci. Pokusy ukázaly, že jádro nelže a že takto napsaný traffic shaper se chová velmi podivně a je v podstatě k ničemu.

Dalším polo-řešením, které je k dispozici v mém skriptu, je i značkování packetů pomocí iptables v tabulce OUTPUT. To proto, že na routeru běží i transparentní proxy. Všechny požadavky zevnitř sítě ven do internetu na port 80 přesměruje na lokální port 3128, kde poslouchá squid, a ten pak sám stránku z internetu stáhne, nebo ji rovnou naservíruje z vlastní cache. Tím jsme si ale, jak už jsem psal minule, zadělali na pěkný problém. Co když se některý z uživatelů rozhodne stahovat pětisetmegový soubor přes HTTP (předpokládáme port 80)? Všechna data by pak šla pouze z programu běžícího na routeru, byla by tedy lokálně generovaná (odkud je vezme ten program, už je věc jiná) a neaplikovaly by se na ně žádné limity. Takový uživatel by pak byl, a je to opět i prakticky ověřeno a potvrzeno, schopen dokonale „obsadit“ linku. Proto zavádíme tuto „šaškárnu“ se značkováním i části lokálně generovaných packetů, aby byly správně zařazovány do patřičné třídy a tím pádem i omezovány. Polo-řešením jsem to celé pak nazval proto, že tím bohužel ztrácíme hlavní výhodu cachující proxy, tedy že je schopna poskytovat často nebo nedávno navštěvované stránky vysokou rychlostí. I když totiž, při našem způsobu nakládání s packety, budeme požadovat některou ze stránek, která se bude válet kdesi ve squidovských útrobách a mohla by k nám být tedy poslána teoretickou rychlostí 100mbit (může se samozřejměl lišit), dostaneme ji bohužel maximální rychlostí 64kbit (v našem případě, a to pouze tehdy, nestahujeme-li nic dalšího, propůjčování pásma mezi třídami jsme teď zanedbali). Ani po usilovném přemýšlení mě bohužel nenapadl žádný elegantní způsob, jak tento problém vyřešit, a proto jsem zatím „spokojen“ s tímto částečným řešením, které alespoň zaručí rovnost mezi uživateli.

Už mě začínají trochu pobolívat prstíky, takže jdeme do finále. :-) Na závěr článku jsem sliboval nějakou tu omluvu, tak tady je. Ze srdce se omlouvám za všechna polovičatá řešení, která jsem dnes nabídl, ale sám v tuto chvíli nevím o ničem lepším a mým záměrem bylo pomoci vám alespoň nějak. Každopádně zveřejněné nastavení (plus pár dalších složitostí) používám na svém routeru a bohatě pro domácí využití postačuje. Doufám, že se opět rozjede diskuse, která má řešení ještě vylepší. Alespoň do té minulé skutečně přispělo mnoho velmi zkušených a moudrých lidí (kteří mě znalostmi jistě převyšují). Mnoho lidí se mě též ptalo na časový plán dalších pokračování, ale jak můžete sami vidět, jsou mé časové dispozice velice mizerné, a proto mohu předem slíbit jen toliko, že se budu snažit… Zatím přeji: Shapování zdar!

Našli jste v článku chybu?

20. 11. 2004 17:39

Dalibor Straka (neregistrovaný)

Na kazdy list stromu je dobre povesit SFQ. Uz jenom kvuli tomu, ze kdyz pet programu bude stahovat pres http, tak se jim rychlost Ferove rozdeli.

20. 11. 2004 16:37

uživatel si přál zůstat v anonymitě

>Od te doby mam DNS zasadne v nejrychlejsim pasmu,
>aby se nacitani stranek(vlastne vseho) maximalne
>urychlilo.

Vyse uvedene jsem take provozoval ku me spokojenosti, dokud apache nezacal resolvovat desetimegovy access log.





Vitalia.cz: 7 druhů hotových těst na vánoční cukroví

7 druhů hotových těst na vánoční cukroví

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu