[Debian] Bandbreedtebeheer

Pagina: 1
Acties:

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Ik ben bezig met een router opstelling aan het maken in Debian Sarge die het volgende moet kunnen:

- Routeren van internet verkeer van en naar de clients, zeg maar zoals een gewone hardware routertje
- "Smalband" systeem: bij het overschreiden van een bepaald toegelaten volume (bvb 2GB) moet deze pc in kwestie op een smalband verbinding (bvb 64kbit) geplaatst worden.
- Eventueel in combinatie met een Proxy Server (Squid) HTTP performance opkrikken door te gaan cachen.

Nu heb ik al:

- Configuratie van iptables (met IP Masquerading) zodat er al gerouteerd wordt.
- d.m.v. een cbq.init script de mogelijkheid om uitgaand verkeer te gaan "shapen". Dit kan op basis van bestemmingsnetwerk of -host in de LAN.

Wat beperken van de eigenlijke snelheid betreft is er dus geen probleem (genoeg over te vinden op GoT en Google). Ik kan dus perfect de snelheid per pc of per subnet gaan regelen, eventueel ook per poort indien nodig.

Daarbij wil ik ook nog dat ik het internetverkeer (dat betekend dus, geen verkeer voor de server zelf bestemd, zoals een lokale ftp en http server) gemonitord wordt per pc (ik veronderstel dus per MAC adres).

Er wordt dan op basis van dat genereerd verkeer per pc bepaald of die pc al dan niet op "smalband" gaat (= activatie van cbq class voor deze pc).

Het probleem is dat:

1) Ik geen manier ken om traffiek te gaan meten per source en destination MAC.
bijvoorbeeld:
Een pc stuurt een request (uploaden) om een bestand te downloaden (download). Het gaat dus respectievelijk over het source mac en het destination mac adres waarbij dit verkeer (zowel up als download, al dan niet gescheiden) dus moet worden opgeslagen/bijgehouden.
Ik vond bvb wel vnstat terug, waarmee je per interface traffiek kan bijhouden maar dit houd dan geen rekening met zaken als source en destination mac van het frame.

2) Er moet een koppeling plaatsvinden tussen enerzijds een limiet overschrijden en het activeren van een CBQ class script. Ik denk daarbij dat er constant moet gemonitord worden, en zodra MAC adres x zijn toegelaten limiet overschreden heeft, een script moet geactiveerd worden om zijn snelheid te limiteren.
Dit moet ook ongedaan kunnen gemaakt worden (bvb bij het begin van een nieuwe maand).

Verder gebruikt de Debian machine een DHCP server zodat alle clients een ip adres toegewezen krijgen. Uit de leases file kan ik dus wel een koppeling maken tussen het IP adres op dit moment geleast en het MAC adres van deze client.

Iemand die mij een tip kan geven?

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Niemand?

  • berties
  • Registratie: Januari 2000
  • Laatst online: 27-01 14:07
Misschien kun je iets met ipfm
Deze logt het inkomende en uitgaande verkeer van een host op basis van het macadres als ik me niet vergis.
Daarbij krijg je een logfile die er zo uit kan komen te zien:
HOST IN OUT TOTAL
host1.domain.com 12345 6666684 6679029
host2.domain.com 1232314 12345 1244659
host3.domain.com 6645632 123 6645755

Je kunt dan een script aanroepen in cron dat het verkeer per host controleerd en indien nodig op basis daarvan je traffic shaped (dat is niet echt goed nederlands of engels maar je begrijpt wat ik bedoel.)

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Bedankt, daarmee kan ik wel even verder.
Aangezien ik geen DNS server gebruik, krijg ik nu de IP adressen te zien.

Nu heb ik een scriptje gemaakt waardoor ik m.b.v. ARP kan zien over welke MAC adressen het gaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash

logs=`cat /var/log/ipfm/192.168.5.0 | grep 192.168`
# echo $logs

teller=1
for line in $logs ; do
    #echo lijn $teller: $line 
    case $teller in
    1)
        mac=`arp | grep $line | cut -f17 -d " "`
        ((teller=teller+1))
        ;;
    2)  incoming=$(( line/1024 ))
        ((teller=teller+1))
        ;;
    3)  outgoing=$(( line/1024 ))
        ((teller=teller+1))
        ;;
    4)  total=$(( line/1024 ))
        ((teller=1))
        echo -e "$mac\t$incoming\t$outgoing\t$total"
        ;;
    esac
done


Het probleem daar natuurlijk bij is, is dat het ARP cache niet blijvend deze entries blijft bevatten. Met dit kan ik dus bij recente connecties zien over welk MAC adres het gaat, maar eens die host inactief is voor een bepaalde tijd, wordt dit dus leeg.

Dit wordt ook tevens in kolomvorm weergeven, dus
MAC Ingaand verkeer Uitgaand verkeer Totaal verkeer
Alles omgerekend in KB.

In feite voldoet IPFM op zich al perfect, ware het niet dat d.m.v. DHCP de clients een IP adres krijgen toegewezen.

Dit kan natuurlijk wel voor rare effecten zorgen (lees: verkeer van pc x wordt bij pc y gerekend):
op dag 1 heeft pc x ip a en pc y ip b
dag erop pc x ip b en pc y ip a
... enzoverder

Idee hoe ik hieruit geraak, zodat ik op een betrouwbare manier over een lange tijd verkeer per pc kan meten, dus op basis van MAC (mac spoofing nu even buiten de kwestie gehouden)?

Thx

  • lonkhuijzen
  • Registratie: December 2001
  • Laatst online: 08:16

lonkhuijzen

100% ADH

Voor een studentenhuis met 28 studenten en een limiet van 30gb down en 5 gb up heb ik hetzelfde gemaakt. Hierbij heb ik gebruik gemaakt van ipac-ng. Op zich doet ipac-ng nix anders dan loggen ( die kan dat namelijk heel mooi naar mysql doen) maar met behulp van bash, mysql en php kan je prima zelf scripts maken.

Hier wordt iedere 15 minuten gekeken of een student over zijn limiet is en in dien nodig wordt deze gekickt van internet(smallband zou ook kunnen).

Enige nadeel is dat ipac-ng alleen op ip kan loggen en niet op mac, oplossing daarvoor is het macaddress invoeren in de dhcpserver en daarmee een fixed ip geven.

op http://jpkot.mine.nu kan je zien hoe het er voor de gebruikers nu uitziet. op verzoek kan ik de scripts wel online gooien.

[ Voor 3% gewijzigd door lonkhuijzen op 27-11-2006 18:01 ]

5,85kWp 15x Sunpower Max3 390Wp OZO | live PV output | LabelA@‘78


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Ziet er nettjes uit, is het mogelijk om die dingen online te plaatsen?

  • lonkhuijzen
  • Registratie: December 2001
  • Laatst online: 08:16

lonkhuijzen

100% ADH

Beetje laat :)

Kotmeter

Ik ben nog niet helemaal tevreden over het iptables gedeelte, maar het is ook nog maar een work in progress :).

Voor het gemak de website en de sql er ook bij gedaan. veel plezier ermee. om het zelf te kunnen gebruiken zal je nog wel het een en ander moeten tunen.

* lonkhuijzen hoopt wel dat hij overal de wachtwoorden netjes heeft uitgesloopt :P

Let wel ik ben geen scripter of webdevver :P dus het kan zijn dat er onnozele fouten in staan :D

5,85kWp 15x Sunpower Max3 390Wp OZO | live PV output | LabelA@‘78


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Bedankt, zal het eens op het gemak bekijken. :)

  • berties
  • Registratie: Januari 2000
  • Laatst online: 27-01 14:07
Ik denk dat de oplossing om fixed ip adressen toe te voegen de beste is. Je voert zoals eerder gezegt de mac adressen in, in de config van de dhcp server en je weet wie bij wel ip adres hoort.
Als je vervolgens de hostnames en ipadressen in de host file gooit /etc/hosts zal ipfm geen ipadressen maar hostnames loggen (als ik me niet vergis, weet dit niet helemaal zeker). Maar daarvoor kun je altijd een scriptje schrijven die dit voor je doet.

Als je weet wie welk ipadres heeft is het vervolgens eenvoudig om mbv een script hier verdere actie op te ondernemen zoals je eigen cbq.init script of mbv een script zoals pluk dat eerder aangaf (mogelijk ook in combinatie met cbq.init).

Op deze manier heb ik lange tijd voor een studenten huis mrtg grafieken gemaakt van het bandbreedte gebruik van de users in het lan.

  • berties
  • Registratie: Januari 2000
  • Laatst online: 27-01 14:07
Misschien dat resolveip (standaard meegeleverd met mysql-server (in ieder geval wel met mijn debian-binary)) nog een optie is. Hiermee wordt in eerste instantie je hostfile gebruikt om het ipadres om te zetten naar een hostname.

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Ondertussen weeral een tijdje geleden dat ik hier nog aan gewerkt heb, maar ben dus nu bezig om traffic te shapen zoal up- als download.

Download:
code:
1
2
3
4
5
DEVICE=eth1,10Mbit,1Mbit
RATE=128Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.168.5.0/24


en upload:
code:
1
2
3
4
5
DEVICE=eth0,10Mbit,1Mbit
RATE=64Kbit
WEIGHT=5Kbit
PRIO=5
RULE=192.168.5.0/24,


Nu test ik voor het volledige netwerk, maar het wordt dus de bedoeling dat dit per client (per ip adres) zal worden.

Nu heb ik echter met het volgende probleem te maken: het download script werkt perfect, het upload script niet.

Volgens ik ergens gelezen heb zou dit te maken hebben met NAT, omdat die het source adres al vertaald heeft tegen dat het door eth0 (internet) moet en bijgevolg die rule niet mached.

Nu werkt dit wel:
code:
1
RULE=,:80

... maar dan geld dit voor alle upload verkeer naar het internet toe, van eender welke host na het NAT gedeelte.

Iemand een idee hoe ik dit kan oplossen?

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Niemand een idee?
Pagina: 1