Csinaltam egy fasza kis pppoe-server / radius / mysql kombot, mukodik is szepen, winxp-vel tesztevel, authol radiuson keresztul. Ez a resze okay.
Meg kell viszont valositani az upload/download savszelessegek kiosztasat user/pw alapjan. SQL-ben el tudom tarolni a min-ul, max-ul, min-dl, max-dl ertekeket ez ok. Kerdes erre milyen shaping megoldas lenne a legjobb? htb-t szeretnek, cronbol egy script percenkent generalja le a shaping tablat? Vagy ki hogy oldana meg? Thx.
- 3963 megtekintés
Hozzászólások
a megoldást majd oszd meg velünk is.köszi.
- A hozzászóláshoz be kell jelentkezni
Ha osszeall az egesz, es nem lesz tulsagosan gany, akkor csinalok rola egy rovidke leirast.
- A hozzászóláshoz be kell jelentkezni
összeállt ez a trió? mert engem is érdekelne a dolog...
--
by Mikul@s
- A hozzászóláshoz be kell jelentkezni
Leallitottak vegul a projektrol, mert nem lett meg a melo, ami ezt a rendszert igenyelte volna. :(
- A hozzászóláshoz be kell jelentkezni
azert amit sikerult osszehozni, arrol csinalhatnal egy doksit: legyen mar ertelme, ha mar annyi szoptal vele...
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Igen, ettol fuggetlen azert akartam vmit irni, ha masert nem, hogy ha egy ev mulva elo kell venni ujra, akkor hamarabb kepbe jojjek. Ahogy idom engedi csinalom!
- A hozzászóláshoz be kell jelentkezni
pppd-nek van radattr modulja. Még nem használtam, de pont hasonló témakörhöz néztem: amikor ppp-t felépíti, radius attributumokat bele tudja pakolni egy fajlba, hogy a etc/network/if*.d scriptekből ezt felhasználhasd.
Innentől már csak annyi, hogy az interfész "felépülése" után beállítod az adott pppN interfészre a ratelimiteket, azt hali. Itt nyilván kell egy kis kézi scriptelés, de az gondolom már menni fog.
- A hozzászóláshoz be kell jelentkezni
Errol a radattr-rol csak egy rovidke manualt talaltam, ami nem szol semmilyen configrol. Nincs esetleg valami emleked, hogy hogyan is menne? A radius sikeres auth utan beleir ugye az accounting tablaba, de arra nem talaltam utalast, hogy kiirna egy kulso fajlba. Thx.
- A hozzászóláshoz be kell jelentkezni
A radattr egy file-ba (/var/run/radattr.pppx, ahol pppx az aktualis ppp interfesz neve, pl. ppp0) teszi le a megkapott RADIUS attributumokat. Ha az en radattr pluginomat hasznalod (ftp://ftp.kite.hu/muszi/sources/radattr.c), akkor annak meg lehet mondani, hogy egy garantaltan egyedi nevu file-ba tegye le (mkstemp(3)-pel hozza letre), mert kulonben elofordulhat, hogy az egyik pppd letorli a masik altal letrehozott file-t. A file nevet egy RADATTR_FILE nevu environment valtozoban kapod meg, es az /etc/ip-up szkriptben felhasznalhatod. Jo fel eve mukodik hibatlanul egy kis ISP-nel (~170 user).
Felhasznalas: a pppd konfigjaba kell egy:
plugin radattr.so
radattr-unique-filenames
(a radattr persze nem megy a radius plugin nelkul, az utan kell szerepeljen a konfigban).
- A hozzászóláshoz be kell jelentkezni
Nagyon koszonom, sokat segitettel! Neked shapinget nem kellett csinalni? Ha igen, mit hasznalsz ra? Thx.
- A hozzászóláshoz be kell jelentkezni
Szivi. A shaping ugy keszul, hogy az ip-up szkript megkapja a RADIUS-tol a juzer {down,up}load sebesseget (erdemes sajat attributumot letrehozni a RADIUS-ban), es ez alapjan konfiguralja be az adott interfeszt (lefele tbf, felfele ingress police). Azert jo, mert amikor eltunik az interfesz, akkor magatol eltunteti a sebessegkorlatozasokat is.
- A hozzászóláshoz be kell jelentkezni
Valamit nagyon ellamerkedek, de hiaba csinalok egy "Upload-Rate-Limit-Min = 64" key/value parost a radreply tablaba, nem kerul bele a /var/run/radattr... fajlba. :( Vegigprobaltam az operatorokat is, ==, :=, =, =* stb.
- A hozzászóláshoz be kell jelentkezni
Nalam igy nez ki az /etc/freeradius/users-ben egy user:
"username" Auth-Type := Local, User-Password == "password", Service-Type == Framed-User, Framed-Protocol == PPP
Max-Download-Speed = 256, Max-Upload-Speed = 64,
Fall-Through = Yes
A kovetkezoket pedig bele kell tenni a RADIUS serveren az /etc/freeradius/dictionary-ba, meg a PPPoE serveren az /etc/radiusclient/dictionary-ba (nem art, ha tudja, hogy mi az a 192-es attributum :-)
ATTRIBUTE Max-Download-Speed 192 integer
ATTRIBUTE Max-Upload-Speed 193 integer
Azert 192 es 193, mert az RFC2138 szerint 192-223 reserved for experimental use, 224-240 reserved for implementation-specific use, 241-255 reserved and should not be used. A freeradius leirasa szerint csak az 1000 alattiakat teszi bele a valaszcsomagba, de ugy emlekszem, nekem 500-zal sem ment.
- A hozzászóláshoz be kell jelentkezni
Koszonom, persze, hogy kihagytam a sok dictionary kozul az egyiket (ez egy Gentoo, ahol van egy par)
/etc/radiusclient/dictionary
/etc/ppp/radius/dictionary
/usr/share/freeradius/dictionary
Szuper most mar visszakapom az erteket, bekerul a radattr fileba is. Innentol akkor shaping... hm.
- A hozzászóláshoz be kell jelentkezni
Ha sok felhasználót akarsz így kiszolgálni, akkor nem biztos, hogy a HTB a legjobb. Nem ismerem a számokat (és nem is vagyok igazán a téma szakértője), de néhány nagyságrend felett én már sokkal inkább mondjuk egy sima TBF -t használnék.
http://lartc.org/howto/lartc.qdisc.classless.html
TBF is very precise, network- and processor friendly. It should be your first choice if you simply want to slow an interface down!
Ha szeretnéd, hogy a min és max közötti sávszélesség jól / igazságosan legyen elosztva, akkor szerintem ezeket az egyéni max-ra korlátozások után még beköthetsz valami "okosabb" dolgot, mondjuk a te általad említett HTB-t, de itt már sokkal kevesebb class is elég lesz.
A lényeg az, gondold meg mielőtt _sok_ HTB class-t csinálsz. Sajnos nem tudom mennyi a sok, de ezt szerintem te el tudod dönteni.
A megvalósítással kapcsolatban pedig az jutott eszembe, hogy még arra vigyázz, hogy ha cron-ból generálod is a shaping táblát, akkor se húzd újra teljesen percenként, mert ha egy class-t törölsz és újra visszaraksz, akkor
1, egy kis ideig nincs megfelelő szabályozás
2, törlöd a class-okban található adatokat is (pl. htb-nél maradva mennyi "sávszélesség" van kölcsön az adott class-nál), ez minden alkalommal nemkívánatos ingadozásokat okozhat
Szerintem .. bár nem tudom pontosan hogyan lehetne csinálni, egy valamilyen hook kellene a connect / disconnect eseményekhez, és pontosan akkor kerüljön be a szabályzó táblába egy sebesség-fogó szabály, amikor arra szükség van, és amikor már nincs, akkor törlődjön.
Ebben az esetben nem kell az automatikus frissítésekből eredő ingadozásoktól tartani, viszont arra figyelni kell, hogy ne maradjanak a táblában elhagyott szabály-sorok (ha valamiért nem futna le a disconnect esemény kezelője), mert ezek felszaporodása könnyen megölheti az egész szabály-rendszert.
Ha tényleg sok szabály van, akkor esetleg megpróbálhatod az iptables "limit" nevű választóját. Ezt chain-ekkel valamilyen fába szervezve egész jó, kb. logaritmikus skálázhatóságot kaphatsz.
Ennyi jutott most eszembe. Még egyszer mondom, nem vagyok a téma szakértője, ezek csak ötletek / érzések. De azért remélem hasznosnak találod.
- A hozzászóláshoz be kell jelentkezni
Koszi a reszletes valaszt, sok erdekes kerdest vetettel fel. A cronos mokat el szeretnem vetni, mert tobb gond is van vele, te is irtal parat. Nagysagrend kb. 150 account, egyidejuleg talan a fele -- bar ez csak hasrautes, nincs mogotte komoly marketingkutas. :) A TBF-et megnezem, koszi. Ez a hook-os modszer lenne a legkezenfekvobb, talan gyu tud bovebb infoval szolgalni. :)
- A hozzászóláshoz be kell jelentkezni
latom masik TOS-t hasznal SMTP Command es DATA phase eseten.
meg arra sem jottem ra hogy kulonboztetem ezeket meg iptables-el, de ezen kivul meg az is erdekelne hogy hogy tudok mas-mas TOS-t beallitani SSH, SCP es SFTP-re! koszi!
- A hozzászóláshoz be kell jelentkezni
Hasonlot csinaltam HTB-vel, sok class-nel valoszinuleg docog.
En az aszinkron modot valasztottam. Beteszi az adatbazisba, egy flag-et 1-re tesz.
Python script percenkent lefut, megnezi, hogy melyik flagek vannak 1-en (hozzaadas, torles, modositas)
es elvegzi a piszkos munkat a HTB-vel. Mukodott kerek egy evig egy kb 500-as felhasznalotaboron, most valtottak le, nem tudom, hogy jobb e az uj. Egy masik ugyfelnel meg mindig ez mukodik.
Nalad annyival komplikaltabb a mese, hogy egy log file-t kell parse-olni, amibol kiszeded oket, es sokkal jobb volna, ha szinkron menne az egesz. Egy script ami allandoan fut, es a log file-t figyeli, es kuldi a message-eket pl. egy pipe-on keresztul egy masik processznek, ami elvegzi a munkat (kiolvassa az adatbazisbol, es belovi a htb-be, vagy akarmibe). Sokkal elegansabb megoldas, ha az elso reszt SNMP Trap-ekkel oldod meg, de akkor is kell egy program.
Programozasi keszseg kell hozza, es kb egy het munka, debugolassal, dokumentalassal, tervezessel. A lenyeg, hogy HTB-bol lehet menet kozben torolni, hozzaadni, modositani, tehat egyaltalan nem elegans cron-bol 5 percenkent mindent lenullazni es megvarni mig magahoz ter.
- A hozzászóláshoz be kell jelentkezni
Bocsanat, most lattam csak, hogy irtal. Koszonom valaszod.
Egy script ami allandoan fut, es a log file-t figyeli, es kuldi a message-eket
Erre szerintem a fail2ban modositott valtozata jo lehetne.
Jol sejtem, hogy a Te dokumentaciod nonpublic? :)
- A hozzászóláshoz be kell jelentkezni
Nekem van egy működő, egyszerű megoldásom pont erre, de az általam készített, és nem publikus (értsd: nem free). Ha negyon kell (Gondolom te sem jótékonykodni akarsz vele) akkor meg tudunk állapodni magánban.
- A hozzászóláshoz be kell jelentkezni
Koszi, egyelore gyurom meg, de ha nagyon eluszok vele akkor megkereslek!
- A hozzászóláshoz be kell jelentkezni
Gyurjad meg egy kicsit, most nekem sincs idom foglalkozni vele (pentek du-ig). A forras nem feltetlenul titkos (az otletet viszont patentolom :D).
Mint mondtam, nekem egy adatbazisbol htb-t epito python scriptem van. Adatbazisod van? Amugy tenyleg annyira egyszeru...
- A hozzászóláshoz be kell jelentkezni
Igen, mysql backend van a radius mogott. Egyszeru-egyszeru igen, amikor az ember mar megcsinalta, vegigszopta es rajott a turpissagokra :))
- A hozzászóláshoz be kell jelentkezni
Mivel szívsz éppen? HTB kell végül? Hány felhasználó?
- A hozzászóláshoz be kell jelentkezni
Most ott all a dolog, hogy Muszi es adamx javaslatara tbf-fel megfogtam a letoltest, ingress-el a feltoltest. Ezzel meg tudtam adni maximum fel/letoltesi sebesseget, es mukodik is. De garantalt minimumot nem. Erre pedig htb kepes. Nincs savszelessegkolcsonzes sem tbf-fel. 170 felhasznalo kb. de egyidejuleg ennyi talan sosem lesz.
tbf es ingress megy ip-up fajlbol mindig az adott iface-re, s gondoltam jo lenne egy global az eth0-ra (amin az atjaro kapja a netet) prioritassal, htb-vel stb. Na most az van, hogy komolyabb teszt kornyezet kellene, mert jelenleg van a pppoe server es egy xp vmwareben, de meg vagy tiz kliens elkelne tesztelni.
Ha valamit elbaxok vagy nem jol gondolok, szoljatok. :)
- A hozzászóláshoz be kell jelentkezni
No kicsit eltuntem, csinalom csak most par hetig nem volt ra kapcitas. Jelenleg itt tartok:
pppX interface-eken ingress/tbf-fel bekorlatozom maximalis savszelesseget (le/fel).
A globalis eth0 iface-n (ezen kapja a publikus netet a gep) felallitottam 7 classidt kulonbozo proioritasokkal, s ebbe flowid szerint (netfilter jelolessel) bekerulnek a csomagok, pl. icmp, dns, ssh magas prioritas, smtp alacsony stb.
Ez mind szep es jo, mukodik is. Viszont a helyzet nem ilyen egyszeru. A link (amit kapunk az ISP-tol) rettento mertekben ingadozik (elvileg 10 mbit, neha a meg otode sem, pl. ha jon egy szelvihar). Ezert csak a tbf-re nem hagyatkozhatok, mert ha jon negy user, akik tbf szerintm 512k-t kapnak max., akkor ez a 4 user azonnal kihasznalta csutkara a 2 mbitet, a tobbinek gyakorlatilag nem jut semmi. tbf sajnos nem tud borrowing-et es garantalt minimumot sem -- nyilvan nem is ezert hoztak letre.
Szoval ott vagyok bajban, hogy hogy hozzam ossze a generikus prioritizalo szabalyokat a per user savszelessegkorlatozassal. Irtatok fentebb, hogy nem jo a tul sok szabaly, es en is igy gondolom. A savszelessegmegosztas/kolcsonzes csak azonos iface-n megy, pppX-ek egymas kozt nem tudnak, igaz?
Minden otletet szivesen fogadok, szoljatok, ha valami nem vilagos, lehet h en gondolom rosszul. Thx.
- A hozzászóláshoz be kell jelentkezni
Az inga nagyon nem jó, mert sosem tudod hányadán állsz. Mérni sem tudod.
A másik gondodra (több interfész kölcsönzés) az imq (intermediate queue) a megoldás, de meg kell patchelni a kernelt, és iptables-t is kell fordítani. Egyelőre ez a megoldás, volt/van valami más kezdeményezés is, de fogalmam nincs hogy áll.
- A hozzászóláshoz be kell jelentkezni
egy kis segitseg az utannam jovoknek :P
- A hozzászóláshoz be kell jelentkezni