4. La configuration PPPoE

Les deux protocoles PPP et PPPoe se distinguent par le fait qu'une session PPPoe doit être établie avant que les échanges PPP ne débutent.

Le caractère asymétrique du dialogue PPPoE a une influence importante sur la configuration des deux (systèmes|routeurs) virtuels. Le routeur Hub doit exécuter un processus spécifique pppoe-server qui lui permet d'attendre les requêtes du routeur Spoke. La configuration de ce routeur Spoke est très voisine de celle de n'importe quel client PPP. Il suffit juste de spécifier l'utilisation du greffon pppoe dans la configuration.

4.1. Le routeur Hub

Par définition, un système Broadband Remote Access Server assure les fonctions suivantes :

  • Agréger le trafic en provenance des équipements Digital subscriber line access multiplexer (DSLAM). Sur la maquette, nous utilisons le commutateur wan-sw en lieu et place du DSLAM.

  • Fournir une connectivité de niveau 2 à travers des réseaux Ethernet ou ATM sur lesquels les sessions PPP sont établies. Cette fonction est bien assurée par l'interface eth1 du routeur Hub.

  • Faire respecter les politiques de qualité de service (QoS). Cette fonction n'est pas traitée ici.

  • Fournir une connectivité de niveau 3 et un routage des paquets IP vers le fournisseur d'accès (et|ou) l'Internet. Cette fonction est aussi assurée par le routeur Hub.

Comme cette liste correspond bien au rôle assigné au routeur Hub on peut passer à la configuration de la nouvelle interface WAN. On commence par s'intéresser à la liste des paquets Debian utiles. On détaille ensuite les fichiers de configuration correspondants.

$ aptitude search ~ippp
i A ppp         - Point-to-Point Protocol (PPP) - daemon
i   pppoe       - PPP over Ethernet driver

Le paquet pppoe contient l'outil pppoe-server qui permet de gérer le dialogue de gestion de session du protocole. Les outils fournis avec ce paquet sont une implémentation complète du protocole PPPoE dans l'espace utilisateur.

$ dpkg -S `which pppoe-server`
pppoe: /usr/sbin/pppoe-server

Il est tout à fait possible d'utiliser cet outil directement à partir de la ligne de commande. Dans le cas présent, on souhaite retrouver la configuration d'une exécution à l'autre des instances de machines virtuelles. On essaie donc de paramétrer le serveur PPPoE dans les fichiers de configuration usuels de la distribution. Voici une liste des fichiers de configuration qui permettent de lancer le service.

  • Le fichier /etc/network/interfaces :

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto eth0
    iface eth0 inet static
            address 192.0.2.62/26
            gateway 192.0.2.1
    
    iface eth0 inet6 static
            address 2001:db8:fe00:8175:b8ad:ff:feca:fe00/64
            gateway fe80::9083:f2ff:febf:2ef0
    
    auto eth1
    iface eth1 inet manual
            up ip link set dev $IFACE up
            up pppoe-server -I $IFACE -C BRAS -L 203.0.113.1 -p /etc/ppp/ip-range
            down killall pppoe-server
            down ip link set dev $IFACE up
    

    La méthode de configuration de l'interface eth1 est dite manuelle. Avec cette méthode aucun paramètre n'est requis. On donne deux instructions. On active l'interface au niveau liaison (couche 2) et on lance l'outil pppoe-server avec cette même interface comme paramètre.

  • Le fichier /etc/ppp/pppoe-server-options :

    debug
    login
    require-chap
    nodefaultroute
    ms-dns 192.0.2.1
    +ipv6
    

    La présence de ce fichier est obligatoire pour le fonctionnement de l'outil pppoe-server. Dans le cas présent, on se utilise le jeu d'options suivant extrait des pages de manuels du démon pppd.

    • debug : affichage des étapes d'établissement de session dans les journaux système.

    • login : référence de compte utilisateur à utiliser lors de l'authentification du routeur spoke. Cette option implique que le compte utilisateur existe sur le système et qu'il soit présent dans le fichier /etc/ppp/chap-secrets.

    • require-chap : impose au routeur spoke une authentification via le protocole CHAP (Challenge Handshake Authentication Protocol).

    • nodefaultroute : préserve la route par défaut (accès Internet) du routeur hub.

    • ms-dns : publie l'adresse IPv4 du serveur DNS à utiliser.

    • +ipv6 : active les protocoles IPv6CP et IPv6.

  • Le fichier /etc/ppp/chap-secrets :

    # Secrets for authentication using CHAP
    # client        server  secret                  IP addresses
    "hub"           *       "5up3r53cr3t"           *
    "spoke"         *       "5up3r53cr3t"           *

    Comme l'option login impose l'existence d'un compte utilisateur pour référencer la ligne du fichier chap-secrets, le moyen le plus simple est de créer un compte local sur le routeur hub.

    # adduser --disabled-login spoke
  • Le fichier /etc/ppp/ip-range :

    203.0.113.10-100

    Ce fichier définit la liste des adresses IPv4 que le démon peut délivrer en fonction des demandes de connexion PPP.

Une fois la session PPPoE établie, le seul travail effectué par l'outil pppoe-server consiste à lancer le démon pppd qui se charge de gérer ses propres transactions aux deux niveaux LCP et NCP.

4.2. Le routeur d'accès Spoke

La configuration côté routeur d'accès ne présente qu'une seule spécificité : l'appel au greffon pppoe. Comme dans le cas précédent, on commence par le contrôle du paquet ppp et on poursuit avec les fichiers de configuration.

$ aptitude search ~ippp
i   ppp       - protocole point à point (PPP) - démon

Le paquet ppp, en plus du code nécessaire à la gestion du dialogue PPP, contient un greffon pppoe. Ce greffon permet l'utilisation du code PPPoE fourni avec le noyau Linux.

Comme avec l'autre routeur, il est possible d'exécuter le démon PPP avec l'ensemble de ses paramètres directement à la ligne de commande. On suit ici le même principe que pour le routeur Hub : une configuration sauvegardée dans les fichiers de configuration du système.

  • Le fichier /etc/network/interfaces :

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    allow-hotplug eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet manual
            up ip link set dev $IFACE up
            down ip link set dev $IFACE down
    
    auto dsl-provider
    iface dsl-provider inet ppp
            pre-up ifup eth1
            provider dsl-provider
    

    La définition de l'interface ppp0 utilise la méthode ppp. Avec cette méthode, on peut utiliser la directive provider qui permet d'automatiser le lancement du démon PPP avec les paramètres spécifiés dans le fichier dsl-provider. Comme avec l'autre routeur, on fait précéder le lancement du démon par l'activation de l'interface au niveau liaison (couche 2).

    Le fichier présenté est directement inspiré de la page du wiki Debian PPPoE

  • Le fichier /etc/ppp/peers/dsl-provider :

    # There should be a matching entry with the password in /etc/ppp/chap-secrets.
    user "spoke"
    
    # Load the PPPoE plugin.
    plugin rp-pppoe.so
    
    # Ethernet interface to which the modem is connected.
    eth1
    
    # Assumes that your IP address is allocated dynamically by the ISP.
    noipdefault
    # Try to get the name server addresses from the ISP.
    usepeerdns
    # Use this connection as the default route.
    defaultroute
    
    # Makes pppd "dial again" when the connection is lost.
    persist
    
    # Do not ask the remote to authenticate.
    noauth
    
    debug
    +ipv6
    

    C'est à ce niveau que l'on trouve l'appel au greffon PPPoE. Sa fonction est essentiellement l'utilisation de l'interface Ethernet eth1 en lieu et place d'une interface «série» classique. Le fichier présenté est directement inspiré du modèle fourni avec la documentation du paquet ppp : /usr/share/doc/ppp/examples/peers-pppoe.

    Les options ajoutées : debug et +ipv6, sont relatives au niveau des détails présents dans les journaux systèmes et l'activation des protocoles associés à IPv6.