Communiquer plus vite en multipliant les interfaces

Le titre de cet article aurait pu être "Pourquoi se priver lorsqu'on peut avoir le double pour seulement deux fois le prix ?". Dans le domaine des interfaces réseaux, les modèles courants se trouvent à des prix très intéressants. D'un autre côté, les interfaces performantes sont absolument inabordables pour un particulier ou une petite entreprise ...

Comment faire alors pour mettre en place un réseau un peu plus performant sans se retrouver sur la paille ? Il suffit de multiplier les interfaces et de les faire fonctionner de concert comme une seule et même entité.

EQL

Sans doute la plus vieille implémentation de ce support pour Linux, EQL permet de "fusionner" deux interfaces série (SLIP ou PPP) afin d'en faire une interface unique utilisant les deux canaux de communication. Bien que maintenant rendu obsolète par d'autres implémentations, EQL est toujours présent dans les versions les plus récentes du kernel Linux. Celui-ci peut être compilé dans le kernel ou sous la forme d'un module eql.o qui sera, alors, placé avec les autres modules de support d'interface réseau.

La mise en oeuvre d'EQL après le chargement du module nécessite la présence de l'utilitaire eql_enslave. Malheureusement, il semblerait que cet utilitaire ne soit plus maintenu. En effet, la dernière version que nous avons pu trouver est la 1.2 datant de 1995. Cette dernière ne se compilera pas, sans modification, avec des versions récentes du kernel. Nous ne nous étendrons donc pas sur le sujet. Voici tout de même les manipulations nécessaires à la mise en oeuvre de l'interface tel qu'expliqué dans le fichier de documentation.

1. - Configurez l'interface eql :

# ifconfig eql 192.168.0.1 netmask 255.255.255.0 mtu 1500

Le MTU de l'interface eql doit correspondre à celui de vos interfaces série. Dans le cas contraire, eql_enslave refusera de fonctionner.

2. - Lancez vos connexions SLIP ou PPP. Vous devez alors posséder deux interfaces supplémentaires sl0 et sl1 pour SLIP, ou ppp0 et ppp1 pour ... PPP.

3. - Attachez vos interfaces ip-série à l'interface eql grâce à l'utilitaire eql_enslave en spécifiant leur vitesse :

# eql_enslave eql ppp0 14400
# eql_enslave eql ppp1 57600

Les valeurs fournies en fin de ligne permettent au support EQL de procéder à l'équilibrage du trafic en fonction de la vitesse des interfaces série. Pour supprimer une interface série de l'interface eql, il vous suffit de couper la connexion. Normalement, le support EQL devrait détecter le "départ" de l'interface en question et la supprimer en conséquence. Il est fortement déconseillé d'utiliser le support EQL en raison de son obsolescence. Cependant, si vous tenez absolument à en faire usage, reportez-vous à la documentation livrée avec les sources du kernel dans le fichier Documentation/networking/eql.txt.

Bonding

Tout comme EQL le fait pour les interfaces séries, le support "Bonding" de Linux permet de "fusionner" deux interfaces Ethernet. Vous pourrez ainsi facilement obtenir une interface virtuelle à 200 Mb/s ou 300 Mb/s en mariant les performances de deux ou trois interfaces Ethernet 100 BaseT.

A l'instar d'EQL, le support du bonding peut être compilé dans le kernel ou sous la forme d'un module. Une fois encore, vous aurez besoin d'un utilitaire particulier pour gérer l'interface virtuelle. Ici, il s'agit d'ifenslave. Il se peut que les sources de cet utilitaire (ifenslave.c) soient présentes parmi les sources de votre kernel. Si ce n'est pas le cas, reportez-vous au bloc de liens en fin d'article pour vous en procurer un exemplaire. Vous pourrez compiler ifenslave avec :

$ gcc -O2 -s -o ifenslave ifenslave.c

Une fois le module du kernel chargé, utilisez ifenslave pour créer votre interface virtuelle :

# ifconfig bond0 192.168.0.1 netmask 255.255.255.0

Il ne vous reste plus qu'à ajouter vos interfaces eth* :

# ifenslave bond0 eth0
# ifenslave bond0 eth1
...

Bien que ce support soit un peu plus récent qu'EQL, préférez la méthode générique qui va suivre. Vous trouverez dans le bloc de liens une référence vers une documentation complète pour le bonding sous Linux. Enfin, notons que le terme bonding utilisé sous Linux est l'équivalent du Trunking de Sun ou de l'EtherChannel de Cisco.

TEQL (Trivial / True Link Equalizer)

Teql est une partie du projet IProute2. IProute est un ensemble de fonctionnalités permettant une gestion avancée du routage du trafic IP avec le kernel Linux. Présentes depuis la série 2.2 du kernel, les fonctionnalités de routage IP sont peu connues et pourtant très intéressantes. Nous ne couvrirons pas ici l'ensemble des fonctionnalités du support référencé dans la configuration du kernel sous le nom "QoS and/or fair queueing". Sachez simplement qu'un ensemble de modules vous permet de définir des règles de routage beaucoup plus complexes que le FIFO standard. En activant les fonctionnalités de routage avancé, vous aurez accès à un large panel de fonctionnalités et de règles de routage supplémentaires.

Le contrôle du trafic sous Linux se compose de trois composants de base :

  • les disciplines
  • les classes
  • les filtres
  • le policing (littéralement, le maintien de l'ordre).

    Pour résumer, à chaque périphérique réseau est associée une discipline de file (queueing discipline). Cette discipline contrôle la manière dont les paquets réseau sortant de la file sont traités. Une discipline simpliste utilisera une seule file d'où les paquets sortiront dans leur ordre d'arrivée dans la file. La file sera vidée à la vitesse à laquelle le périphérique pourra les expédier.

    Une discipline plus complexe utilisera des filtres afin de classer les paquets dans des classes spécifiques. Il est alors possible de gérer ces classes de paquets de manières différentes les unes des autres. Ceci permet par exemple de donner une priorité plus grande pour les paquets d'une certaine classe ou encore de tout simplement éliminer les paquets d'une autre. Le nombre de combinaisons et de possibilités de routage est alors presque infini. L'administrateur réseau pourra personnaliser à souhait le routage des paquets afin de l'adapter au mieux à son installation réseau.

    Pour utiliser ces fonctionnalités puissantes offertes par le kernel, vous devrez bien sûr en spécifier l'activation dans la configuration de votre kernel. Il est recommandé d'utiliser ce support sous la forme de modules. Vous gagnerez ainsi en souplesse et en légèreté.

    A l'instar du support Netfilter du kernel 2.4, les fonctionnalités QoS et fair queuing sont configurables à l'aide d'utilitaires en mode utilisateur. Vous devrez récupérer ces utilitaires en suivant les liens données en fin d'article. Parmi ces utilitaires se trouve tc, permettant de définir et de gérer le contrôle du routage. C'est sans doute l'utilitaire dont vous aurez le plus besoin.

    Teql est un algorithme ou plus exactement une discipline pour le CBQ (Class Based Queuing) permettant de combiner plusieurs périphériques physiques en un périphérique virtuel. Le module sch_teql est l'oeuvre d'Alexey Kuznetsov. Il permet une utilisation beaucoup plus souple du partage de périphérique que les solutions précédentes puisqu'il permet de "fusionner" des périphériques réseau génériques (indépendamment de leur type). Trois points sont importants concernant l'utilisation du module sch_teql :

  • Les périphériques dit esclaves doivent être actifs. Il est donc hors de question d'automatiser le démarrage d'un système et d'utiliser des connexions ppp (par exemple) alors qu'elles ne sont pas encore actives. Vous ne pourrez pas non plus fusionner des périphériques spéciaux ou virtuels comme ceux utilisés pour le tunneling.

  • sch_teql fonctionnera avec n'importe quels périphériques, peu importe sa vitesse. Il est donc possible de fusionner une ou plusieurs lignes série (PPP) avec un périphérique rapide comme un eth0 à 100 Mb/s. Sachez cependant qu'en cas de différence de vitesse importante entre les périphériques, les performances risquent de ne pas être à la hauteur de vos espérances. En effet, la réorganisation des paquets réseau risque dans ce genre de situation de prendre énormément de temps et cela influera sur les performances générales du système.

  • Les périphériques esclaves peuvent être utilisés directement. Là encore, il est important de savoir que le trafic natif sur ces périphériques reste prioritaire sans mettre en péril le périphérique virtuel. Si vous rencontrez des problèmes de performance, c'est sans doute par là qu'il faudra commencer à chercher.

    La mise en oeuvre du module sch_teql est relativement simple par rapport aux solutions précédentes. Après le chargement du module dans le kernel, vous devez obtenir un nouveau périphérique teql0 ainsi qu'une nouvelle discipline de file portant le même nom. Il suffit alors d'utiliser la commande tc du pack iproute2 pour attacher à teql0 différents périphériques esclaves :

    # tc qdisc add dev eth2 root teql0
    # tc qdisc add dev eth1 root teql0
    

    Vous pourrez ensuite utiliser le périphérique teql0 comme n'importe quel périphérique réseau classique.

    Nous venons de le voir, les solutions ne manquent pas pour mettre en oeuvre un réseau possédant des performances dignes d'installations scientifiques. Il vous faudra choisir l'une des trois méthodes décrites ici en fonction de vos besoins. Il semble qu'iproute soit celle qui permet le plus grand nombre de fonctionnalités puisque le True Link Equalizer ne représente qu'une infime partie des possibilités offertes. Signalons tout de même que ces fonctionnalités sont spécifiées comme étant expérimentales dans la configuration du kernel. Il est donc déconseillé de les utiliser dans un environnement de production.

    Liens

    Linux Bonding Driver Mini Howto
    http://www-miaif.lip6.fr/willy/pub/linux-patches/bonding/bonding.txt

    ifenslave.c
    http://www-miaif.lip6.fr/willy/pub/bonding/

    Linux IProute 2, Traffic Control & Friends
    http://defiant.coinet.com/iproute2/

    IProute 2 + tc notes
    http://snafu.freedom.org/linux2.2/iproute-notes.html

    Advanced routing Mini Howto
    http://snafu.freedom.org/linux2.2/docs/advanced-routing/

    Linux Magazine France n°28 - Mai 2001