3. Routeur Hub

Le rôle du routeur Hub est d'interconnecter un réseau de collecte opérateur (LAN) qui donne accès à l'Internet et plusieurs réseaux étendus (WAN) de raccordement de sites distants. Le routeur Hub assure aussi la fonction Broadband Remote Access Server (BRAS). C'est la raison pour laquelle il détient les adresses IPv4 et IPv6 à attribuer aux routeurs d'extrémité appelés Spoke.

Le routeur Hub doit aussi gérer l'encapsulation des trames PPP sur un réseau de diffusion Ethernet.

Cette section reprend essentiellement la partie Routeur Hub du support Routage inter-VLAN et protocole PPPoE. On doit cependant adapter la configuration des interfaces réseau du routeur Hub en ajoutant un second jeu d'interfaces pour le deuxième site distant.

Q1.

Comment activer le routage dans le sous-système réseau du noyau Linux ?

Utiliser la commande sysctl pour effectuer des recherches et identifier les paramètres utiles. Par exemple :

sudo sysctl -a -r ".*forward.*"

Il est dorénavant recommandé de créer un fichier de configuration spécifique par fonction. C'est la raison pour laquelle on crée un nouveau fichier /etc/sysctl.d/10-routing.conf.

cat << EOF | sudo tee /etc/sysctl.d/10-routing.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.log_martians=1
EOF

Attention ! N'oubliez pas d'appliquer les nouvelles valeurs des paramètres de configuration.

sudo sysctl --system

Q2.

Comment assurer la traduction d'adresses sources pour tous les flux réseaux sortants sur le réseau d'infrastructure (VLAN rouge) ?

Rechercher dans des exemples de configuration nftables avec la fonction MASQUERADE.

Voici un exemple de création du fichier /etc/nftables.conf avec le jeu d'instructions qui assure la traduction d'adresses sources pour IPv4 et IPv6.

cat << 'EOF' | sudo tee /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

# Define variables
define RED_VLAN = enp0s1.360

table inet nat {
    chain postrouting {
        type nat hook postrouting priority 100;
        oifname $RED_VLAN counter packets 0 bytes 0 masquerade
    }
}
EOF
[Avertissement] Avertissement

Il faut impérativement changer le nom d'interface en utilisant le numéro de VLAN attribué dans le plan d'adressage des travaux pratiques.

La création de ce fichier de règles n'est pas suffisante. Il faut appliquer les règles contenues dans le fichier.

sudo nft -f /etc/nftables.conf

Il faut aussi activer ce service pour assurer le chargement automatique des règles de filtrage au démarrage.

sudo systemctl enable --now nftables.service
sudo systemctl status nftables.service

Q3.

Quel paquet spécifique à la gestion du dialogue PPPoE à installer sur le routeur Hub ?

Rechercher dans le catalogue des paquets, la référence pppoe.

apt search ^pppoe

Le résultat de la commande apt show pppoe montre que c'est bien le paquet pppoe qui répond au besoin. On peut donc l'installer.

sudo apt -y install pppoe

Q4.

Dans quel fichier sont stockés les paramètres d'identité et d'authentification utilisés par le protocole EAP pour la méthode CHAP ?

Consulter les pages de manuels du démon pppd à la section AUTHENTICATION.

C'est le fichier /etc/ppp/chap-secrets qui contient les couples login/password utilisés lors de l'authentification.

Voici un exemple du contenu de ce fichier.

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"spoke_site1"   *               "0r4ng3_1"              *
"spoke_site2"   *               "0r4ng3_2"              *

Q5.

Dans quel fichier sont stockés les paramètres passés au démon pppd lors du lancement du serveur PPPoE ?

Consulter les pages de manuels de l'outil pppoe-server.

C'est le fichier /etc/ppp/pppoe-server-options qui contient la liste des paramètres utilisés lors du dialogue PPP.

Ce fichier contient tous les paramètres communs aux deux démons pppd qui sont lancés via pppoe-server. Voici comment créer le fichier.

cat << 'EOF' | sudo tee /etc/ppp/pppoe-server-options
# Gestion de session avec PAM
login
# Authentification EAP
require-eap
# Le Routeur Hub détient déjà une route par défaut
nodefaultroute
# Envoi de l'adresse de résolution DNS avec les adresses IPv4
ms-dns 172.16.0.2
# Ajout du protocole IPv6
+ipv6
# Informations détaillées dans la journalisation
debug
# Options préconisées par la documentation
noaccomp
default-asyncmap
nodeflate
nopcomp
novj
novjccomp
lcp-echo-interval 10
EOF

Q6.

Comment créer les comptes utilisateurs locaux sur le routeur Hub sachant qu'ils ne sont autorisés ni à se connecter ni à avoir un répertoire personnel ?

Consulter les options de la commande adduser.

Voici un exemple dans le contexte de la maquette.

sudo adduser --gecos 'Spoke 1' --disabled-login --no-create-home spoke_site1
sudo adduser --gecos 'Spoke 2' --disabled-login --no-create-home spoke_site2

Q7.

Quel paramètre supplémentaire doit être ajouté à la configuration de la commande pppoe-server pour distinguer les échanges entre les deux routeurs Spoke ?

Relativement au support Routage inter-VLAN et protocole PPPoE, il est essentiel de définir correctement les routes statiques vers les réseaux d'extrémité de chaque routeur Spoke.

Consulter les options de la commande pppoe-server.

L'option -u permet de désigner une “unité“ qui sert à nommer l'interface. Par exemple, -u 0 correspond à l'interface ppp0.

Q8.

Comment créer deux nouvelles unités systemd responsables du lancement des processus pppoe-server ?

Consulter la page systemd Services et rechercher la procédure à suivre pour ajouter un service au lancement du système.

On commence par la création du fichier de service appelé : /etc/systemd/system/pppoe-server.service qui contient toutes les directives de lancement du processus pppoe-server avec les paramètres d'adressage du lien point à point.

Voici un exemple de création du fichier d'unité systemd pour le premier service.

cat << 'EOF' | sudo tee /etc/systemd/system/pppoe-server1.service
[Unit]
Description=PPPoE Server
After=systemd-networkd.service
Wants=systemd-networkd.service
BindsTo=sys-subsystem-net-devices-enp0s1.441.device
After=sys-subsystem-net-devices-enp0s1.441.device

[Service]
Type=forking
ExecCondition=/bin/sh -c '[ "$(systemctl show --property MainPID --value pppoe-server1.service)" = "0" ]'
ExecStart=/usr/sbin/pppoe-server -I enp0s1.441 -C BRAS -L 10.44.1.1 -R 10.44.1.2 -N 1 -u 0
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Voici un exemple de création du fichier d'unité systemd pour le second service.

cat << 'EOF' | sudo tee /etc/systemd/system/pppoe-server2.service
[Unit]
Description=PPPoE Server
After=systemd-networkd.service
Wants=systemd-networkd.service
BindsTo=sys-subsystem-net-devices-enp0s1.443.device
After=sys-subsystem-net-devices-enp0s1.443.device

[Service]
Type=forking
ExecCondition=/bin/sh -c '[ "$(systemctl show --property MainPID --value pppoe-server2.service)" = "0" ]'
ExecStart=/usr/sbin/pppoe-server -I enp0s1.443 -C BRAS -L 10.44.3.1 -R 10.44.3.2 -N 1 -u 1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Q9.

Comment activer les deux nouveaux services et contrôler leur état après lancement ?

Consulter la page systemd Services et rechercher la procédure à suivre pour activer et lancer un service.

On commence par la relecture de la liste des services disponibles par le gestionnaire systemd.

sudo systemctl daemon-reload

On active les nouveaux services.

for i in {1..2}; do sudo systemctl enable pppoe-server$i.service; done

On lance ce nouveau service.

for i in {1..2}; do sudo systemctl start pppoe-server$i.service; done

On vérifie que l'opération s'est déroulée correctement.

for i in {1..2}; do systemctl status pppoe-server$i.service; done

En l'état actuel de la configuration, aucune session PPP n'a encore été établie. Il faut maintenant passer à la configuration réseau du routeur Spoke pour avancer dans l'utilisation du protocole PPP.