situazione seguente: Siamo un gruppo di studenti che gestiscono la connessione Internet per le sale locali residenti, con un totale di circa 2000 utenti finali.
Abbiamo un sistema di punti di traffico, ogni MB riduce o carica i punti di costo, i nuovi punti vengono aggiunti ogni ora. Al momento, blocciamo l'accesso a Internet di un utente quando ha speso tutti i suoi punti (inserendolo in una politica REJECT in iptables sul nostro router gateway Debian).
Vorremmo solo limitare la larghezza di banda di un utente. Qual è il modo migliore per farlo?
La semplice risposta sarebbe quella di impostare un limite di velocità sulla porta dello switch dell'utente (principalmente Cisco Catalyst 3550s). Tuttavia, ciò è indesiderabile, poiché il traffico all'interno della nostra rete e verso la rete universitaria dovrebbe rimanere illimitato. Esiste un modo per limitare la larghezza di banda solo per i pacchetti con una determinata destinazione o intervallo IP di origine (quindi sia in uscita che in ingresso) in Cisco IOS? Non sono riuscito a trovare nulla.
L'altro modo sarebbe controllare il traffico sul nostro router gateway. Mi vengono in mente diverse soluzioni:
tc o tcng - sembra che entrambi abbiano una sintassi piuttosto arcana e non offrano buone funzionalità per eseguire il controllo del traffico per IP. Un QDisc dedicato per così tante persone probabilmente rallenterebbe parecchio il router. Inoltre, la documentazione su entrambi è piuttosto obsoleta.
shorewall - sembra avere una sintassi piuttosto ordinata per le configurazioni, tuttavia, non sono sicuro che sia in grado di gestire questa quantità di traffico e utenti e se sia adatto alla limitazione del traffico per IP
pfSense: sembra un sistema operativo destinato a scopi come il nostro. Tuttavia, richiederebbe la reinstallazione completa del nostro router gateway. Non abbiamo altri sistemi BSD e pfSense dovrebbe avere ottime capacità di contabilità del traffico (al momento stiamo utilizzando fprobe-ulog e ulog-acctd).
Qual è la tua esperienza? Quale soluzione soddisfa le nostre esigenze e può essere facilmente mantenuta? Hai altre idee?
Se hai bisogno di ulteriori informazioni sul nostro sistema, non esitare a chiedere.
Grazie in anticipo.
EDIT : ho implementato il sistema con iptables
e tc
.
Ogni utente ha una sottorete / 28, un IP VPN (entrambi da 10.0.0.0/8) e un IP esterno, tutti gestiti attraverso una catena iptables. Questa catena ha solo una regola, una semplice RETURN
.
Ogni cinque minuti, uno script Python legge i contatori di byte di queste regole. Reimposta i contatori e aggiorna l'account del punto di traffico dell'utente nel nostro database PostgreSQL.
Se il bilanciamento dei punti di un utente diminuisce al di sotto di una determinata soglia, vengono create due classi tc per questo utente (una per quella in entrata, una per l'interfaccia in uscita sul nostro router gateway), gli IP vengono inseriti in filtri tc appartenenti a queste classi. Le classi sono limitate dalla velocità da un HTB.
Rispetto al sistema precedente fprobe-ulog
e ulog-acctd
questo è molto più veloce in quanto il conteggio dei byte viene eseguito da iptables.
La velocità della rete è notevolmente migliorata per i nostri utenti.