situation suivante: Nous sommes un groupe d'étudiants administrant la connexion Internet pour les résidences locales, avec un total d'environ 2000 utilisateurs finaux.
Nous avons un système de points de trafic, chaque Mo coûte des points de téléchargement ou de téléchargement, de nouveaux points sont ajoutés à l'heure. Pour le moment, nous bloquons l'accès à Internet d'un utilisateur lorsqu'il a dépensé tous ses points (en le plaçant dans une politique REJETER dans iptables sur notre routeur de passerelle Debian).
Nous souhaitons uniquement limiter la bande passante d'un utilisateur. Quelle est la meilleure façon de procéder?
La réponse simple serait de définir une limite de débit sur le port du commutateur de l'utilisateur (principalement Cisco Catalyst 3550s). Cependant, cela n'est pas souhaitable, car le trafic à l'intérieur de notre propre réseau et vers le réseau universitaire devrait rester illimité. Existe-t-il un moyen de limiter la bande passante uniquement pour les paquets avec une certaine plage IP de destination ou source (donc à la fois pour la sortie et l'entrée) dans Cisco IOS? Je n'ai rien trouvé.
L'autre façon serait de contrôler le trafic sur notre routeur passerelle. Plusieurs solutions me viennent à l'esprit:
tc ou tcng - semble que les deux ont une syntaxe plutôt arcane et n'offrent pas de bonnes fonctionnalités pour effectuer le contrôle du trafic par IP. Un QDisc dédié pour tant de gens ralentirait probablement beaucoup le routeur. De plus, la documentation sur les deux est assez obsolète.
shorewall - semble avoir une syntaxe plutôt soignée pour les configurations, cependant, je ne sais pas s'il peut gérer cette quantité de trafic et d'utilisateurs et s'il convient à la limitation du trafic par IP
pfSense - ressemble à un système d'exploitation destiné à des fins comme la nôtre. Cependant, cela nous obligerait à réinstaller complètement notre routeur de passerelle. Nous n'avons pas d'autres systèmes BSD et pfSense devrait avoir de très bonnes capacités de comptabilité du trafic (nous utilisons actuellement fprobe-ulog et ulog-acctd).
Quelle est votre expérience? Quelle solution répond à nos besoins et peut être la plus facilement maintenue? Avez-vous d'autres idées?
Si vous avez besoin d'informations supplémentaires sur notre système, n'hésitez pas à demander.
Merci d'avance.
EDIT : J'ai implémenté le système avec iptables
et tc
.
Chaque utilisateur possède un sous-réseau / 28, une IP VPN (à la fois à partir de 10.0.0.0/8) et une IP externe, tous sont pilotés via une chaîne iptables. Cette chaîne n'a qu'une seule règle, une simple RETURN
.
Toutes les cinq minutes, un script Python lit les compteurs d'octets de ces règles. Il réinitialise les compteurs et met à jour le compte de point de trafic de l'utilisateur dans notre base de données PostgreSQL.
Si le solde de points d'un utilisateur diminue en dessous d'un certain seuil, deux classes tc sont créées pour cet utilisateur (une pour l'interface entrante, une pour l'interface sortante sur notre routeur de passerelle), les adresses IP sont entrées dans des filtres tc appartenant à ces classes. Les classes sont limitées en vitesse par un HTB.
Par rapport au système précédent avec fprobe-ulog
et ulog-acctd
cela est beaucoup plus rapide car le comptage d'octets est effectué par iptables.
La vitesse du réseau s'est considérablement améliorée pour nos utilisateurs.
la source
dummynet est une très bonne suggestion à mon avis. Mais je suis sûr que iptables est également capable de façonner le trafic , vous pouvez donc le faire sur votre boîte Debian.
la source
tc devrait bien fonctionner .. Je crois que ce que vous voulez faire est de changer vos règles iptables actuelles pour marquer plutôt que REJETER le trafic, alors vous pouvez utiliser un petit nombre de règles tc pour appliquer la mise en forme du trafic à ces flux marqués.
consultez également ipset pour gérer la liste des utilisateurs restreints http://ipset.netfilter.org/
la source
Trafficpanel semble être une solution. Entre autres fonctionnalités:
En fait, je n'ai jamais essayé cette chose, mais ça va.
la source