Portál AbcLinuxu, 11. listopadu 2025 12:28
1. třída 500 kbps - zde bude 2x PC (PC1 a PC2) 2. třída 250 kbps - zde budou jiná pc 3. třída 250 kbps - zde budou jiná pcA já teď budu řešit příklad s třídou 1., kterou jsem si nasimuloval a testoval s PC1 a PC2. PC1 a PC2 sdílí rychlost 500 kbps a díky SFQ se v čase spravedlivě rozdělují rychlosti mezi jednotlivé konexe(dle mých informací). Díky testování jsem nezjistil nic převratného, jen že to tak asi bude. Na PC1 jsem spustil stahování (40MB) souboru z S1(zatím to omezuji i pro S1 abych mohl testovat) a rychlost se vyšplhala na 1000 kbps a jelo to, následně jsem spustil stahování stejného souboru z PC2, rychlost jela na 500 kbps a na PC1 se snížila na polovinu. Takže dvě spojení na dvou PC se spravedlivě rozdělila. Když jsem ale na PC2 spustil stahování stejného souboru znovu k tomu prvnímu, stahovali se 3 soubory ze dvou PC, přičemž každý z nich se stahoval stejnou rychlostí, tzn. že na PC1 zbyla 1/3 rychlosti a pro PC2 se ukously 2/3. Když jsem stahování onoho souboru č. 2 na PC2 pozastavil a místo něj spustil Bittorrent, začlo to být ještě horší, protože si Bittorrent udělal mnoho spojení do internetu a tak se mi z 1/3 pro PC1 stala dejme tomu 1/20. Takže se mi v rámci jedné třídy rozdělují poměrně rychlosti v závislosti na počtu spojení. Když udělám pro každé PC jednu třídu, tak bych to měl vyřešit, ale to se mi nechce, protože by těch PC mohlo být v budoucnu více. Takže jsem pátral a mělo by to řešit ESFQ, které by mi mělo v rámci třídy rozdělit rychlosti mezi spojení vázaná na jednotlivé IP adresy (třeba). Chtěl bych se zeptat, jak mám postupovat, když bych chtěl to esfq využít. Neumím dobře anglicky a také kompilování jádra bych se chtěl prozatím vyhnout(je jen nějaký modul?). Jaké doporučujete kroky? Mám Debian GNU/Linux Sarge a vše využívám z této distribuce, je tam jádro 2.4, můžete mě prosím nějak nasměrovat? Dále, když bych chtěl pak omezovat i upload na rozhraní eth0, šlo by to takto teoreticky filtrovat?
tc filter add dev eth0 parent 1:0 prio 2 protocol ip u32 match ip src 192.168.0.2 flowid 1:11Nechtěl bych tady něco dělat a pak to kvůli uploadu nějak složitě předělávat za pomoci IMQ, když už tak rovnou. Dále, snažil jsem se přijít na to co je to parametr burst a našel jsem dvě různá vysvětlení a tak nevim. Buď je to: počet dat, které projdou bez omezení třídy (např. 5k znamená 5kb dat) Nebo je to: maximální odchylka od rate (cburst od ceil) Ptám se proto, že často když začnu stahovat, vylétne na několik vteřin (cca 5 vteřin) rychlost na cca trojnásobek maximální a pak klesne docela rychle na tu co by měla být maximální. Takže bych se přikláněl k první verzi, ale moc mi tam pak nesedí ta hodnota. A burst je podle mě něco jako dávkování, takže jsem to nějak nepochopil a prosím o vysvětlení. Jako odchylku bych to chápal i s hodnotou, ale našel jsem na netu i to první vysvětlení. Nastavení HTB:
tc qdisc add dev eth0 root handle 1:0 htb default 11 tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1000kbit burst 20kbit tc class add dev eth0 parent 1:1 classid 1:11 htb rate 500kbit ceil 1000kbit burst 10kbit tc class add dev eth0 parent 1:1 classid 1:12 htb rate 250kbit ceil 500kbit burst 5kbit tc class add dev eth0 parent 1:1 classid 1:13 htb rate 250kbit ceil 250kbit burst 5kbit tc qdisc add dev eth0 parent 1:11 handle 11:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:12 handle 12:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:13 handle 13:0 sfq perturb 10 tc filter add dev eth0 parent 1:0 prio 1 protocol ip u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:11 tc filter add dev eth0 parent 1:0 prio 2 protocol ip u32 match ip dst 192.168.0.2 flowid 1:11 tc filter add dev eth0 parent 1:0 prio 2 protocol ip u32 match ip dst 192.168.0.3 flowid 1:11Díky moc za váš čas a snahu LFCIB
, navíc ještě budeš muset opatchovat iproute2 a následně zkompilovat a nainstalovat
. Vše je velice jednoduché. Stáhneš si zdrojáky jádra a iproute2 a potom patch esfq
wget -c http://developer.osdl.org/dev/iproute2/download/iproute2-2.6.16-060323.tar.gz wget -c http://fatooh.org/esfq-2.6/esfq-2.6.15.1.tar.gzPak už jen stačí opatchovat zdrojáky jádra a iproute2
cd /usr/src/linux patch -p1 < ../esfq-2.6.15.1/esfq-kernel.patch cd /usr/src/iproute2-2.6.16-060323 patch -p1 < ../esfq-2.6.15.1/esfq-iproute2.patchPatch esq na 2.6.15 funguje i na 2.6.16 a 2.6.17 ...
. Ulehčuje hodně věcí. Pokud budeš kompilovat jádro apod., tak si to rovnou opatchuj i s imq
. Ale pro imq musíš zase patchovat iptables
, mno, když do toho půjdeš, tak prostě iptables+iproute2+kernel musíš kompilovat a patchovat
. Pokud by jsi v tom patchování byl najetej a chtěl by jsi ještě něco víc, jak obyčejný esfq+imq, tak by jsem se být tebou podíval ještě na ipp2p a layer7 filter. Tyto projekty dokáží identifikovat p2p pakety apod. věci a následně je můžesš lehce shapovat, či zakázat apod. Jinak na routeru se řeší omezování uploadu velice jednoduše, máš eth do netu a eth do vnitřní sítě. Filtr hodíš na tu do netu a shapuješ upload
(jednoduše řečeno, samozřejmš se pak trošku změní hrátky s iptables apod. v tom skriptu)
Jdu hledat jak se kompiluje jádro
Doufám, že se v tom neztratím. Ale nebojim se toho!
Jinak ještě k tomu uploadu, tak jak to popisuješ mi to je jasný, ale co pak, když ty adresy NATuju?
LFCIB
Díky za pomoc
LFCIB
Nebo jak tam nahraji ty moduly iptables, když už je to takhle zkoněnýPodívej se, jestli jsou v
/lib/modules/verze/kernel/net/ipv4/netfilter/. Pokud je tam nenajdeš, podívej se do menuconfigu, jestli jsi je nechal zakompilovat do jádra (<*>) nebo jsi na ně zapomněl (< >)
Ale v /lib/modules/verze/kernel/net/ipv4/netfilter/ ty soubory *.ko jsou, to jsou ty moduly? Nějak v tom mám guláš a nikde jsem o tom nic nenašel.
Díky moc
LFCIB
modprobe by se ten modul měl nahrát (parametrem je jméno modulu = jméno toho souboru bez .ko)
Pro základní funkce potřebuješ ipt_MASQUERADE, iptable_nat, ip_nat, ip_conntrack, iptable_filter, ip_tables.
Vzhledem k tomu, že ti to vyhazuje chyby při nahrávání pravidel, pravděpodobně nesouhlasí verze - v takovém případě modprobe skončí s chybou.
Toto jsou hlavní věci, nikde nehledej položky s názvem iptables apod. Jsou tam jen názvy služeb, modulů apod.
Zdar Max
LFCIB
budu se sn(m)ažit
Jinak asi budu muset mít jádro 2.6 a to opatchovat co?
Takže né kompilovat jádro, ale jen opatchovat?
Já umím kompilovat leda tak jádra lískových ořechů
Dík za naroutování, určitě se to (ne)povede
LFCIB
. Jádro se musí opatchovat (pro neznalce => přidají se další volby do nabídky) a pak zkompilovat (zaškrtnou se ty volby v nabídce a jde se na kompilování) ....
. Nebo pokud máš rychlý net, tak si stáhni z avc.sh.cvut.cz video o kompilaci jádra
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.