Traffic shaper


Mi is az a Traffic shaper?

Forgalom szűkítő. Nagyszerűen alkalmazható ha egy interface forgalmát szűkíteni akarjuk. Van ilyen is, pedig a legtöbb esetben azt szeretnénk ha gyorsabban töltődnének az oldalaink :-).

| Eleje |

Korlátok

Itt nem holmi cirádás erkély korlátokra kell gondolni, hanem sajnos jelenleg még nem tudjuk a teljes sávszélességet szabadon meghatározni.
Bizonyos okok miatt a shaper a forgalmat egy minimum és maximum értékek között beállított sebességgel tudja átengedni. Ez a minimum a 9600 bit/sec a fölső határ pedig 256000 bit/sec. Ez a gyakorlatban például úgy néz ki, hogy egy 10Mbit/sec (pl.: Ethernet 10BaseTX vagy 10Base2) hálózat forgalmát korlátozzuk 28800bit/sec-re, akkor a felhasználónak ugy tűnik mintha a kapcsolata csak egy 28.8Kbaud-os soros vonali (pl. modemes) kapcsolata lenne. Természetesen a shaper nem végez tömörítést, így a valóságban lassabb kapcsolatunk lesz mintha igazi 28,8Kbaud-os modemmel csatlakoznánk.
A másik igen jelentős korlát az, hogy a shaper csak az "out" irányú forgalmat tudja szűkíteni. Ez igen érdekes hatást eredményez, oda kell rá figyelni, hogy valójában melyik irányú forgalmat is szeretnénk szűkíteni. Ha mind a két irányban szeretnénk a korlátozást, akkor természetesen minden ellenállomáson ugyanígy le kell szűkíteni a felénk jövő forgalmat. Az esetek nagy többségében erre nincs szükség.

| Eleje |

A megvalósítás

A shaper kernelben fut. Jelenleg a 2.2.14 es stabil kernel verzióban még csak akkor használható ha az Experimentalst bekapcsoljuk.

Code maturity level options  --->

 [*] Prompt for development and/or incomplete code/drivers
Ezután a

 Network device support  --->

 <M> Traffic Shaper (EXPERIMENTAL)
menüpontban Module-ként definiáljuk a shapert. Ne felejtsuk a /etc/modules -ben megadni a shaper -t.
Ezekután ujrafordítjuk a kernelt kedvenc metódusunkkal, leellenőrizzük, hogy minden rendben van aztán hajrá, lehet izzítani az új kernelt.
Nincs más dolgunk mint birtokba venni a sávszűkítőt.

Például:
Van egy gépünk egy Ethernet interface-szel ami az eth0 nevet kapta. Ezen természetesen a 2.2.x-es kernelek óta az interface felhúzásánál automatikusan létrejön egy egész net routeing:
az interface-ünk felhúzása:

ifconfig eth0 192.168.0.2

Ezután már tudjuk pingetni a default routerunket, (legyen ez most a 192.168.0.1) de azt most nem allítjuk be, csak majd később.
Sőt, íme egy sebtében összetákolt script ami beallítja a shapert:

#!/bin/sh
echo "Starting Traffic Shaper: "
ifconfig eth0 down
ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
rmmod shaper
modprobe shaper >/dev/null
shapecfg attach shaper0 eth0
shapecfg speed shaper0 128000
ifconfig shaper0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
route del -net 192.168.0.0 netmask 255.255.255.0 dev eth0
route add default gw 192.168.0.1 dev shaper0
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/shaper0/rp_filter
echo "Done."

Tehát biztosan kivehető, hogy nem hagyunk a véletlenre semmit sem. Először kidobjuk az interface-t, azután újra felhúzzuk s ugyanígy teszünk a shaper modullal. Ha eddig minden jó akkor shapecfg paranccsal beállítjuk, hogy mely eszközhöz is csatlakozzon és milyen mértékben korlátozza a forgalmat. Esetünkben egy 128kbit/sec -es vonalat fogunk kapni. Persze megadjuk ugyanúgy az adatokat mint az eth0 esetében, majd az eth0-rol leszedjük az egész subnet routolására vonatkozó bejegyzést! Ezekután már csak azt kell megmondani a gépünknek, hogy mindent a shaperen keresztül route-oljon. Mindezt device route bejegyzéssel tesszük. Itt van még három sor amire már nem emlékszem miért is kellett, de kell az tuti. Nekem ez az összeállítás egy proxy-cache feladatokat ellátó gépen, igen jól működött.
 
 

| Eleje |



Budapest, 2000.05.06. Endrész Attila