Project-Id-Version: Trac 0.12
Report-Msgid-Bugs-To: trac-dev@googlegroups.com
POT-Creation-Date: 2013-01-27 11:21+0900
PO-Revision-Date: 2010-07-19 23:05+0200
Last-Translator: Jeroen Ruigrok van der Werven <asmodai@in-nomine.org>
Language-Team: en_US <trac-dev@googlegroups.com>
Plural-Forms: nplurals=2; plural=(n != 1)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Generated-By: Babel 0.9.6

Configuration/FirewallQoS – Trac ResEl
wiki:Configuration/FirewallQoS

Le Firewall Dynamique et de QoS du ResEl

Auteur : Alexandre "Pika" Manoury pika@…

Date : 28 Février 2013

Le but du nouveau script pour le Firewall / Shapping est de fournir un firewall dynamique (prise en compte automatique des inscriptions, bans, ...) et de QoS (répartition équitable de la bande passante entre les utilisateurs).

Les fonctionnalités

Paramètres du service

Un service nommé reselqos permet de gérer le firewall en effectuant diverses opérations :

  • Efface toutes les règles/chaînes, vide les files, vide les sets, puis relance le firewall dynamique :
service reselqos start
  • Arrête le script de firewall, sans supprimer les chaines (actuellement pour éviter de couper la passerelle par erreur pendant la phase de test) :
service reselqos stop
  • Mettre à jour le firewall; cette mise à jour s'effectue également toute seule à intervalle régulier (environ toutes les 10 secondes - paramétrable) :
service reselqos update
  • Recharger la configuration du firewall; cela permet de changer le débit ou certains paramètres sans avoir à relancer le firewall (attention, tous les paramètres ne peuvent pas être ainsi modifiés à chaud cf ...) :
service reselqos reload
  • Affiche l'aide :
service reselqos help

Fichier de configuration

Le fichier de configuration est /srv/qos/qos.conf et regroupe l'ensemble des paramètres du firewall, de la qos, de l'ipv6,...
La modification de ce fichier permet de configurer distinctement loli et peach, il n'y a pas besoin de modifier les scripts pour les différents routeurs.
Le fichier se présente sous la forme :

[section1]
key1 = value1
key2 = value2
...

Connexions requises

LDAP

Le script requière une connexion au LDAP (anonyme) pour récupérer la liste des utilisateurs et des machines.
Si cette connexion est perdue après le démarrage les utilisateurs ne seront pas mis à jour mais les règles resteront les mêmes : une personne déjà chargée pourra continuer à accéder à internet.
Le script tentera de se connecter au serveur régulièrement, si le serveur à changer il suffit de modifier le fichier de configuration et de faire un service reselqos reload pour se connecter au nouveau serveur sans redémarrer le serveur.

Les données relative au LDAP sont dans la section :

[ldap]
host = beaune.adm.maisel.enst-bretagne.fr
user =
password =
baseorga = ou=organisations,dc=maisel,dc=enst-bretagne,dc=fr
basepeople = ou=people,dc=maisel,dc=enst-bretagne,dc=fr
basehosts = ou=machines,dc=resel,dc=enst-bretagne,dc=fr

MySQL

Le script requière une connexion à un BDD MySQL afin de stocker la quantité de données téléchargées par utilisateur ainsi que pour le partage de bande passante entre les firewall.
Si cette connexion est perdue après le démarrage les règles resteront inchangées et la mise à jour dynamique continuera si le LDAP est toujours accessible. Néanmoins si le firewall est redémarrer avant de retrouver la connexion, les quota pour la QoS ne seront pas corrects.
Le script tentera de se connecter au serveur régulièrement, si le serveur à changer il suffit de modifier le fichier de configuration et de faire un service reselqos reload pour se connecter au nouveau serveur sans redémarrer le serveur.

Les données relative à MySQL sont dans la section :

[database]
host = maia.adm.maisel.enst-bretagne.fr
user = qos
password = ***
db = qos

Options

Firewall

Toutes les données pour configurer le firewall sont dans la section du même nom dans le fichier de configuration :

[firewall]
enabled = 1
areaPrefix = 172.22.
areaOtherPrefix = 172.23.
eth_ext = eth0.990
... (autres interfaces)
tunnel_name = to_rennes
ip_int = 172.22.199.30
... (autres IP)
net6 = 2001:0660:7302:D000::/52
... (autres network)
area6Prefix = 2001:0660:7302:d
...

IPv6

Le firewall gère actuellement en partie l'IPv6 : les IP des utilisateurs sont filtrées mais la plupart des autres IP (machines, blacklist) ne le sont pas. La gestion de la QoS et les quotas sont néanmoins en place en IPv6. Pour activer ou non l'IPv6 (en cas de désactivation, la politique est de tout accepter) :

[firewall]
v6Enabled = 1

Débit

La section rates du fichier de configuration permet de gérer tous les débits (en upload et en download) pour le débit total, le débit du tunnel, le débit shapé, ...
Le débit dit "Global" correspond au débit alloués à l'ensemble Brest + Rennes, il sert au partage dynamique de débit entre les deux campus si un campus sature et que l'autre a de la marge. (Cette fonctionnalité n'est pas encore activée)

Règle de débit

Si des changement de débit doivent avoir lieu sur des tranches horaires spécifiques il suffit de les renseigner dans la section ratesrules :
Exemple : pour passer à 160 Mbps entre 20h et 4h du matin en upload et en download :

[ratesrules]
rule1From = 20:00
rule1To = 4:00
rule1GlobalUp = 200Mbps
rule1GlobalDown = 200Mbps
rule1Up = 160Mbps
rule1Down = 160Mbps

Les autres débits seront adaptés de manière proportionnelle.
Pour qu'un débit ne soit pas modifié, il suffit de mettre sa valeur à 0 (attention, le champ doit quand même être présent !)

Pour ajouter d'autres règles il suffit de rajouter les 6 mêmes champ en remplaçant le début par rule2, rule3 et ainsi de suite.

Qos

Principe

Le principe utilisé ici est le suivant :
On possède M groupes de QoS, au début de la journée (vers 5h) tous les utilisateurs sont dans le groupe 0. En fonction de la quantité de données téléchargées, les utilisateurs vont franchir des limites et tomber dans le groupe n+1.

Il existe une distinction entre l'upload et le download. Ainsi un utilisateur peut se trouver dans le groupe 2 en download et dans le groupe 0 en upload.

Limites

La limite de chaque groupe dépend de deux paramètres classSeperationBase et classSeperationParameter : la limite du groupe n vaut :

(la limite du groupe n-1) * classSeperationParameter + classSeperationBase

La limite du groupe 0 vaut classSeperationBase.

Débit par utilisateur

A chaque groupe un débit par utilisateur cible est précisé, les règles TC sont donc mises à jour à chaque fois que des utilisateurs change de groupe afin de conserver le bon débit par utilisateur pour chaque groupe.
Le débit par utilisateur dépend d'un facteur classRateFactor < 1, du débit total, et de la répartition des utilisateurs dans chaque classe.
La répartition est faite de telle manière à répartir l'ensemble du débit disponible entre les utilisateurs tel que un utilisateur du groupe n+1 aura classRateFactor le débit d'un utilisateur du groupe n

Valeurs par défauts

Groupe Limits Rate factor
0 1250 Mo 100%
1 3250 Mo 80%
2 6450 Mo 64%
3 11570 Mo 51%
4 19762 Mo 41%
5 - 33%

Désactivation

La QoS peut être désactiver : dans ce cas tous les utilisateurs sont dans le même groupe et la quantité de données téléchargées n'entrent pas en jeu.

[qos]
enabled = 1

Logs

Un fichier de log est présent : /var/log/reselqos/reselqos.log (par défaut), pour le modifier :

[path]
log = /var/log/reselqos

Partie technique

Scripts

Des scripts pythons gèrent le nouveau firewall, ils sont présents dans /srv/qos/

  • Le fichier qosrunner.py constitue un programme avec une boucle d'actualisation.
  • Le fichier qospam.py sert à lancer ce programme.
  • Le fichier qosfirewall.py gère les règles IPTABLES, IPSET et TC.
  • Le fichier qosparser.py se gère de la lecture du fichier netacct pour recueillir les logs.
  • Le fichier objects.py contient les classes User et Host.
  • Le fichier utils.py contient des fonctions utilitaires.

Gestions des groupes de QoS

  1. Ipset :
  • Toutes les IP des machines d'un utilisateur du groupe 3 en upload seront mises dans l'Ipset qos_u3
  • Si l'utilisateur passe dans le groupe 4 en upload, ses IP seront supprimées de l'Ipset qos_u3 et rajoutées dans l'Ipset qos_u4'
  • De même pour les groupes en download qos_dX
  • Dans le cas de l'IPv6, les Ipset se nomment v6qos_dX et v6qos_uX
  1. Iptables :
  • Tous les paquets correspondant aux IP d'un Ipset qos_dX seront marqués avec le numéro 1000 + X (ou 2000 + X dans le cas d'un groupe d'upload)
  1. TC :
  • Un groupe de QoS correspond à une class TC avec une qdisc SFQ et associée à un filter TC
  • Le filter TC pour le groupe n récupère tous les paquets marqués avec le numéro 1000 + n (ou 2000 + n selon le cas)
  • Le débit d'un groupe de QoS correspond au débit de sa classe TC, chaque groupe peut emprunter du débit autres groupes (jusqu'à une certaine limite) s'ils n'utilisent pas leur bande passante allouée.
Last modified 3 years ago Last modified on Mar 5, 2015, 6:49:28 AM