Portál AbcLinuxu, 13. května 2025 22:03
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
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 ...
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 (< >)
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.