Sziasztok!
Azt szeretném megcsinálni, hogy egy Ubuntu 8.04 Server gépen legyen traffic shaping, de csak az internet irányába korlátozzon.
Ezt úgy akartam megoldani, hogy létrehozok egy shaper0 device-t aminek az IP cime ugyanaz mint az eth0-nak. (ehhez kell a shaper kernel modul)
Erre a shaper0 eszközre pedig ráengedném a wondershaper-t ami tud up és down irányban is korlátozni. (mivel a shapecfg-al nem lehet külön megadni az up és down korlátot)
A következőt csináltam:
apt-get install shaper shapecfg wondershaper
echo "shaper" >> /etc/modules
modprobe shaper
shapecfg attach shaper0 eth0
shapecfg speed shaper0 100000000
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
ifconfig shaper0 192.168.238.128 netmask 255.255.255.0 broadcast 192.168.238.255 up
Ezután beállitottam a route-ot is.
A gond az, hogy nem működik a dolog. Nem lehet se pingelni az index.hu-t se semmit csinálni a shaper0 eszközön keresztül.
Nade sebaj, közben sokat olvasgattam a shaperről, és a szabilinuxon azt írták hogy max 256kB/s-ig működik.
Persze rögtön kipróbáltam: shapecfg speed shaper0 128000 ...de így se megy a dolog.
Rájöttem, hogy tulajdonképpen nekem nem is kell ez a béna shaper kernelmodul :D úgyis elavult. (és a legtöbb ezzel foglalkozó cikk 2005 körüli)
Ha nem tévedek, meg lehetne oldani a dolgot, vlan-ok létrehozásásval is. Úgy szeretném megcsinálni, hogy legyen egy vlan amin a 192.168 irányba menő forgalom halad át, és egy másik ami pedig a default route (szóval minden más azon megy).
A következőt csináltam:
vconfig add eth0 0
vconfig add eth0 1
ifconfig eth0.0 192.168.238.128 netmask 255.255.255.0
ifconfig eth0.1 192.168.238.128 netmask 255.255.255.0
Aztán a route beállítás.
Természetesen nem működik így sem :D Nem megy át semmi forgalom az eth0.0 és eth0.1 eszközökön.
Az lenne a kérdésem, hogy szabad-e az eth0.0 és eth0.1 interfacenek ugyanazt az IP címet adni mint ami a fizikai interface címe?
Szeretném, ha kívülről ez az egész nem látszana, és a router csak az eth0-nak adna DHCP-n IP címet. (amúgy is csak egy kis kommersz router, nem tud vlanokat kezelni meg semmi ilyesmit)
Ami esetleg számíthat még, hogy jelenleg még csak VMWare-en nyomom, nem igazi gépen.
Egyéb ötlet, hogy miért nem működik?
- 3184 megtekintés
Hozzászólások
imq-t (obsolete), vagy ifb -t nézd meg
- A hozzászóláshoz be kell jelentkezni
Nem tudnátok inkább a vlan kialakításában segíteni? :) Már csomót foglalkoztam ezzel, és nem szeretném egy totál más megoldással újra kezdeni. Másrészt pedig mindenképpen szükségem van valamiféle virtuális interfacere mert szeretném vmstattal mérni a forgalmat külön az internet és külön a LAN irányba.
- A hozzászóláshoz be kell jelentkezni
Imho. ne shaperezz... http://lartc.org/ Itt megvan minden info hozza ami kell es utana iptables-szel akar hostonkent is tudsz forgalmat merni, valamint picit szofisztikaltabban meg tudod oldani ezzel.
- A hozzászóláshoz be kell jelentkezni
Ha mar mindenkepp igy szeretned, akkor shaperd. Van belole csomag.
- A hozzászóláshoz be kell jelentkezni
"Nem tudnátok inkább a vlan kialakításában segíteni?"
A VLAN interfészt már létrehoztad. De azt leírhatnád, hogy ezt pontosan hogy is gondoltad, milyen eszközhöz csatlakozik közvetlenül az eth0 interfész.
"szabad-e az eth0.0 és eth0.1 interfacenek ugyanazt az IP címet adni mint ami a fizikai interface címe?"
Bizonyos esetekben szabad, de jelen esetben nem érdemes. Milyen eszköz lenne ugyanebben a VLAN-ban? A router?
"a router csak az eth0-nak adna DHCP-n IP címet."
És a másik kettő statikusan lenne beállítva?
"egy kis kommersz router, nem tud vlanokat kezelni"
Akkor biztos van egy menedzselhető switched, ha VLAN tagginget szeretnél. Hány belső, külön IP-vel konfigurálható interfésze lehet ennek a routernek?
"Egyéb ötlet, hogy miért nem működik?"
Nem erre való. Ebben a formájában és erre a célra vonatkozóan tévút.
"szeretném vmstattal mérni a forgalmat külön az internet és külön a LAN irányba."
Az iptables vagy net-acct nem lenne jobb ebben az esetben?
- A hozzászóláshoz be kell jelentkezni
Úgy szerettem volna, hogy kívülről ne látszódjon, hogy én vlan-okat hoztam létre az Ubuntun. Ez csak arra kellett volna, hogy traffic shaping és monitoring mehessen a gépen, de akkor jól sejtettem, hogy ez nem megoldható így.
A router nem tud vlanokat kezelni, nincs külön IP-je a portoknak (4 portja van + 1 WAN port)
Igen statikusan állítottam be a vlan IP-ket ugyanarra mint ami a fizikai interface címe.
Akkor megpróbálom a fent említett megoldásokkal, remélem az iptables nem proci igényes nagyon.
- A hozzászóláshoz be kell jelentkezni
Jó. Egy pár kérdés?
Tisztában vagy azzal, hogy 802.1q vlan-ok nem szabványos ethernet csomagokkal kommunikálnak.
Ha igen akkor a switcheidet felkonfoltad úgy, hogy jó legyen. Ezt mondjuk vmware alatt nem tudom, hogy lehet szimulálni.
Tehát ahova a gépet bedugod ott taggesen felhúzod az 1-2 vlan-t. + Az 1. vlan rendszerint admin vlan.
A többit pedig úgy, hogy a megfelelő vlan-ban legyenek persze untaggesen. A szerint, hogy melyik gép mi szerint van osztályozva.
Az imq jó megoldás, de a példa szkript nem elég. Sajátot kell szerkeszteni.
Az lenne a kérdésem, hogy szabad-e az eth0.0 és eth0.1 interfacenek ugyanazt az IP címet adni mint ami a fizikai interface címe?
Ez lehetséges, de nem sok értelme van. Elméletileg néhány switch lekezeli.
Az egész így kívülről nem fog látszani. A routernek nem is kell tudnia, hogy mi folyik a hálózatodon belül. Sőt ha valahogy ki lehet deríteni akkor az egy rossz topologia :)
- A hozzászóláshoz be kell jelentkezni
Na most egy kicsit összekavartál :)
Nem, nem tudtam hogy a 802.1q nem szabványos csomagokkal kommunikál.
Először is: nincs semmiféle switch. Csak egy otthoni kis home router, amibe be lesz dugva ez a gép. A vlanoknak nem is kéne a gépen kívülről látszania, csak arra használnám hogy az Ubuntu Serveren belül legyen valami virtuális interface amin keresztül küldöm az internetes forgalmat (mivel ez lenne a default route) és így tudom mérni (a LAN forgalomtól külön) a és wondershaperrel szabályozni (úgy hogy a LAN sebességet nem befolyásolom).
De mint ahogy az előző hozzászóló írta, a vlanok alapvetően nem erre valók :)
Akkor most ha jól sejtem az eth0.0 vlan interface-en keresztül menő forgalomnak el lesz rontva az IP fejléce. Legalábbis a router nem fogja tudni értelmezni, mert még soha nem is hallott vlanokról :)
Meg lehet azt valahogy oldani, hogy ugyanolyan csomagot küldjön ki a gép mintha nem a vlan interface-en menne keresztül?
- A hozzászóláshoz be kell jelentkezni
"ha jól sejtem az eth0.0 vlan interface-en keresztül menő forgalomnak el lesz rontva az IP fejléce."
Az IP-hez nem nyúl, de az ethernet frame elejéhez igen. Ezt csak olyan eszköz fogja tudni megfelelően kezelni, amelyik rendelkezik ugyanilyen módon konfigurált porttal.
Ha nincs megfelelő switched, és a routernek sincs ilyen ethernet portja, akkor nincs két olyan eszközöd, amelyek között a VLAN élne.
"Meg lehet azt valahogy oldani, hogy ugyanolyan csomagot küldjön ki a gép mintha nem a vlan interface-en menne keresztül?"
Nem. Mivel a VLAN éppen azért van, hogy két hálózatot elválasszon. Nem lehet két natív (untagged) VLAN egy ethernet porton.
A mérésre a legegyszerűbb dolog a tűzfalszabályok legelejére tenni:
iptables -A INPUT -i eth0 -s 192.168.238.0/24
iptables -A INPUT -i eth0 -s ! 192.168.238.0/24
iptables -A INPUT -i eth0
iptables -A OUTPUT -o eth0 -d 192.168.238.0/24
iptables -A OUTPUT -o eth0 -d ! 192.168.238.0/24
iptables -A OUTPUT -o eth0
Listázás:
iptables -nvL INPUT
iptables -nvL OUTPUT
- A hozzászóláshoz be kell jelentkezni
Szerintem te neked csak az alias kellet volna. Az is hasonló csak nem eth1.1 hanem eth1:1. Ja persze itt sincs semmi értelme az azonos ip-k-nek.
Azt nem tudom, hogy lyukadtál ki a 802.1q-nál. Ez azért egy jól képzett rendszermérnőknek sem triviális feladat. :)
Itt egy kis kód amiből talán kitudsz indulni. Ja ez egy nat-olt hálóból való példa. Tehát ha ezt használni akarod akkor jó eséllyel kell egy másik nat is hozzá.
feltöltés korlát
tc qdisc del dev eth1 root 2>/dev/null
tc qdisc add dev eth1 root handle 1 htb default 2 r2q 35
tc class add dev eth1 parent 1: classid 1:2 htb rate 300kbit prio 2 quantum 59000
tc qdisc add dev eth1 parent 1:2 handle 2: htb r2q 50
#belso eleje
tc class add dev eth1 parent 1:2 classid 1:2006 htb rate 128kbit prio 2 quantum 2000
tc qdisc add dev eth1 parent 1:2006 handle 2006: sfq perturb 10
tc filter add dev eth1 parent 1:2 protocol ip prio 15 u32 match ip src pubip flowid 1:2006
tc filter add dev eth1 parent 1: protocol ip prio 5 u32 match ip src pubhalo/24 flowid 1:2
#belso vége
letöltés korlát
tc qdisc del dev eth0 root 2>/dev/null
tc qdisc add dev eth0 root handle 1 htb default 2
tc class add dev eth0 parent 1: classid 1:2 htb rate 3000kbit prio 1 quantum 59000
tc qdisc add dev eth0 parent 1:2 handle 2: htb
#belso eleje
tc class add dev eth0 parent 1:2 classid 1:2006 htb rate 1024kbit prio 2 quantum 2000
tc qdisc add dev eth0 parent 1:2006 handle 2006: sfq perturb 10
tc filter add dev eth0 parent 1:2 protocol ip prio 15 u32 match ip dst belsőgép ipje flowid 1:2006
tc filter add dev eth0 parent 1: protocol ip prio 10 u32 match ip dst belsőgéphálója/30 flowid 1:2
#belso vége
- A hozzászóláshoz be kell jelentkezni
Ó igen... a sima alias eth0:0 interface-el már próbálkoztam :D De egyrészt nem méri a rajta keresztül menő forgalmat, ezért nem működik rajta a vnstat a másik gond meg hogy nem lehet default route-nak beállitani mert hiába adsz meg eth0:0-át, akkor is eth0-hoz fogja rendelni a route-ot.
A vlanokkal tényleg kicsit eltévedtem, ezért is irtam a hup-ra. Mostmár tiszta a dolog.
A shaperd obsolete.
Az ifb jónak tűnik de túlságosan powerful nekem :D és nincs lelki erőm a bekonfigolásához.
Ez a tc amit bemásoltál meg kb kinai nekem. De láttam már ezeket a parancsokat valahol :)
De megvan az új ötlet: (persze lehet hogy ez is hülyeség)
apt-get install uml-utilities bridge-utils
modprobe tun #ez betölti a tun/tap modult
tunctl #ez létrehoz egy tap0 eszközt
ifconfig tap0 192.168.238.128 netmask 255.255.255.0 up
route add default gateway 192.168.238.2 dev tap0
És ezután persze nem megy a ping www.index.hu , de ez azért van mert valahogy össze kéne kötni a tap0 eszközt az eth0-val, hogy minden amit a tap0-ra küldök azt továbbitsa az eth0-ra. Persze nem tudom, hogy a bejövő internetes forgalmat mi alapján továbbitaná az eth0-ról a tap0-ra.
Gondolom ilyesmire való a bridge, amihez megint csak nem értek :)
brctl addbr br0
brctl addif br0 tap0
brctl addif br0 eth0
Ha hozzáadom az eth0-át a bridge-hez akkor teljesen elvesztem a kapcsolatot a géppel. Szóval még további finomitást igényel a dolog. Azt hittem egyszerűbb lesz ez a traffic shaping dolog... igaázból nekem nem is kell shaping, csak egyszerű bandwidth control.
- A hozzászóláshoz be kell jelentkezni
Ja. A bridge. Az megint egy szép kis hálózati anomália. Tandenbaum valahogy úgy írja le, hogy 2 hálózat összekapcsolására való. Ez pl arra jó, hogy van egy wifi-s hálód meg egy ethernet hálód. A kettő között létrehozol egy hidat az mindkét oldalról átlátható lesz. Legtöbbször wifi ap-k ben használják.
Erről annyit kell tudni, hogy ha egy eszközt beleraksz a bridge-be akkor az már csak annak egy része (portja) lesz. Viszont ha utol akarod érni akkor csak annyit kell tenned, hogy a br0-nak adsz egy ip címet. Attól kezdve az összes portja erre fog hallgatni.
Abban viszont igazad van, hogy a shaperd csak fizikailag létező eszközöket hajlandó kezelni. Semmi mást. Alias-okat főleg nem.
Viszont ha ip cím alapján akarsz bármit is csinálni akkor a cbq, htb lesz a te barátod. Igaz azokat nem könnyű kezelni. Amit írtam abba csak bele kell írni a megfelelő ip címeket és kész legalább is remélem. Egyébként nem csoda, hogy ismerős a legtöbb sor a htb demó cuccból van kiollózva.
- A hozzászóláshoz be kell jelentkezni
Habár nem követtem a szálat, ez esetleg hasznos lehet: ISP-fW, egy jó kis leírás hozzá: itt. Tud traffic shapinget, egész kezelhetően.
- A hozzászóláshoz be kell jelentkezni
Megoldottam a dolgot a trickle nevű progival egyszerűen és könnyen :) Ezzel nem interface-en korlátozok hanem az adott programoknak adom meg a sávszélességet amit használhatnak.
- A hozzászóláshoz be kell jelentkezni