J’ai récemment décidé de me mettre au vert pour vivre la belle vie à la campagne ! Je me suis donc installé en novembre 2023 dans une petite maison, loin de tout. Première préoccupation : Internet ! Et quelle histoire ! En novembre, j’anticipe pour avoir Internet dès notre arrivée et contacte Free pour effectuer le raccordement à la nouvelle adresse. Ils ont le nom de l’ancienne locataire, et tout semble bien se présenter. Le technicien Free vient une première fois, et surprise : ils ne connaissent pas ce nom, donc il faut ouvrir une ligne. Mais il n’y a plus de place sur le répartiteur, ou quelque chose de ce genre. Bref… pas d’Internet. Enfin, si… nous utilisons nos connexions 4G. Problème : c’est une ancienne maison, et le réseau ne passe pas très bien. Nous plaçons donc nos téléphones dans le garage en partage de connexion (cela veut dire que nos téléphones sont « séquestrés », et je ne peux pas scroller mes réseaux sociaux comme tout bon addict… tristesse). Ce n’est pas très pratique, mais ça fonctionne. Par contre, pour le télétravail avec des appels en visio, ça tombe à l’eau.

OpenMPTCProuter

Il faut trouver une solution ! Mon colocataire a droit à trois jours de télétravail, mais il fait des allers-retours tous les jours… Impensable. Il m’a donc parlé du projet OpenMPTCProuter, développé par un Français, Yannick Chabanois, et utilisé notamment par Apple pour son assistant virtuel Siri. Ce logiciel open source peut tourner sur une Raspberry Pi ; il repose sur le protocole MPTCP (MultiPathTCP), qui est d’ailleurs intégré aux dernières versions du noyau Linux. L’idée derrière MPTCP est de « découpler » l’IP de TCP, d’une certaine manière. Si l’on dispose de plusieurs connexions, nous avons donc deux IP distinctes sur Internet. Une connexion TCP sur ces deux IP est impossible sans fermer la socket TCP et la rouvrir sur une autre interface. Le protocole MPTCP résout ce problème.

Dingue ! Bref, pour rentrer dans le détail : l’idée est d’agréger plusieurs connexions Internet pour, par exemple :

  • améliorer la latence d’une connexion grâce à une autre,
  • augmenter la vitesse en couplant les deux connexions.

Mon idée est donc d’agréger plusieurs connexions 4G et de voir ce que ça donne ! C’est parti : j’installe OpenMPTCProuter sur une petite Raspberry Pi qui traînait, et hop, on démarre tout ça. Voici le wiki pour l’installation : il faut installer la partie routeur sur la Raspberry Pi et aussi mettre en place un VPS. OpenMPTCProuter Au passage, je réalise que c’est basé sur OpenWRT, un projet plus vaste qui développe un système d’exploitation pour les objets connectés. Très pratique pour créer un petit routeur maison !

Pour revenir à notre projet, je vais essayer d’agréger trois connexions 4G : j’ai ma puce Bouygues, une Free et celle de mon colocataire. Chacune offre entre 30 et 60 mégas au maximum. Nous allons essayer de connecter les puces à la Raspberry Pi via un dongle USB ou nos téléphones en partage de connexion USB. Un bon bricolage, même si ce n’est pas hyper fonctionnel ! Toujours aucune nouvelle de Free pour le raccordement ADSL, cela fait déjà un mois ou deux.

Stop, ça suffit ! Je décide de prendre les choses en main, avec la dernière solution envisageable : le satellite ! Je découvre qu’Orange propose une solution avec NordNet. Ça pourrait être intéressant, d’autant plus avec les aides de l’État, mais comme nous sommes locataires, notre propriétaire pourrait ne pas apprécier une grande antenne parabolique. Tant pis, on part pour Starlink. (Disclaimer : Je ne suis pas fan d’Elon Musk, mais le service est vraiment excellent et fonctionne très bien.)

Je passe commande, et on reçoit le matériel en 3 ou 4 jours, super rapide ! L’installation de Starlink prend quelques heures : tout le matériel est là, une parabole plutôt petite, robuste avec son pied en métal bien lourd. Ensuite, un câble assez long qu’on fait passer sous la porte du garage, très pratique, jusqu’au routeur Starlink, qui par défaut est un routeur Wi-Fi mesh.

Après de nombreux ajustements de l’antenne, nous avons maintenant une connexion assez stable, autour de 100 méga ! Il y a encore parfois des interruptions notables et une latence visible jusque dans le navigateur. Il reste donc des points à améliorer.

Le réseau local

Yeah, succès ! Maintenant, le problème est de répartir cette connexion Internet dans toute la maison. Un routeur Wi-Fi côté garage n’est pas assez puissant pour couvrir toutes les pièces. Heureusement, la maison est récente, et chaque pièce est équipée de prises Ethernet reliées au garage ! On installe un petit switch, on brasse toutes les prises derrière la Raspberry Pi, et le tour est… ah non. Il manque une prise Ethernet par défaut sur le Starlink, donc il faut un dongle supplémentaire.

Dongle reçu, on connecte tout ça, et voilà ! Si du Wi-Fi est nécessaire dans une pièce en particulier, on ajoute un répéteur, généralement une Raspberry Pi en plus, et le tour est joué ! Au passage, on a abandonné OpenMPTCProuter, car le routeur Starlink fait le boulot.

Rebondissement dans l’affaire Free !

Plusieurs mois ont passé, et là, tout s’enchaîne : Free et Orange ont finalement trouvé un moyen de nous raccorder. Je vous épargne les détails, mais les techniciens ont dû vérifier 4 km de ligne ADSL pour identifier le problème ! (Spoiler : un court-circuit.) Nous avons enfin une ligne ADSL ! Et elle n’est pas mauvaise, autour de 15 méga ! Starlink… ADSL… Hmm, vous voyez où je veux en venir ?

Le retour d’OpenMPTCProuter

Eh oui, avec deux connexions distinctes, il va falloir retenter le coup. Ça pourrait bien résoudre nos petits problèmes de latence ! (Au passage, les connexions 4G sont abandonnées, car nous n’avons plus que nos puces de téléphone, et on en a besoin.) Donc je me relance, mais il y a un problème : la Raspberry Pi n’a qu’un port Ethernet, alors que j’ai deux entrées, une depuis la box Free et une autre depuis le routeur Starlink.

Je pourrais ajouter un dongle USB Ethernet, mais d’après mes recherches, ce n’est pas forcément idéal. Une autre solution serait d’acheter un appareil dédié avec plusieurs ports Ethernet ou une carte réseau. J’essaie de limiter mes achats électroniques, donc… place à une solution plus astucieuse : les VLANs ! En fouillant un peu, je suis tombé sur une vidéo expliquant qu’avec les VLANs, on peut diviser un port Ethernet en plusieurs virtuellement. Damn !

Les VLANs

D’accord, je suis développeur à l’origine, donc j’ai une bonne idée de ce qu’est un VLAN. L’objectif est de le configurer sur un switch administrable afin de créer plusieurs réseaux distincts pour différents appareils, en les isolant les uns des autres.

Imaginons : Caro de la compta ne doit pas être sur le même réseau que Jean du service commercial pour des raisons de sécurité et de confidentialité. Au lieu de tirer des câbles dans tous les sens (d’autant que les services peuvent ne pas être dans des pièces séparées), on branche les postes sur des switches administrables et on segmente virtuellement le réseau. Ainsi, lorsque Caro envoie une requête, le switch sait qu’elle ne peut communiquer qu’avec les membres de la compta, et surtout pas avec les commerciaux.

Exemple simple de VLAN Dans cet exemple, nous avons créé deux réseaux bien séparés. Le VLAN vert est dédié aux commerciaux : le PC de Jean ne peut envoyer des paquets qu’à ses collègues du même VLAN. De la même manière, le VLAN bleu isole Caro, qui peut uniquement communiquer avec ses collègues de la compta.

Trunk VLANs

Les VLANs, c’est pratique, mais dans une configuration comme la nôtre (deux colocataires), être sur le même réseau pourrait suffire. Cependant, il existe un type de VLAN qui va vraiment me simplifier la vie : le fameux Trunk VLAN !

Comme je l’ai mentionné plus haut, j’ai maintenant deux connexions WAN (Starlink et Freebox) ainsi qu’un réseau LAN. Grâce au Trunk VLAN, je vais pouvoir faire passer plusieurs VLANs sur un seul câble, ce qui permet de gérer les différents réseaux de manière optimisée et organisée. Wlan Lan Home Problème : la Raspberry Pi n’a qu’un seul port Ethernet… L’idée avec le Trunk VLAN va être de “diviser” virtuellement ce port en plusieurs (en l’occurrence, trois). Comment est-ce possible ? Le but est de faire en sorte que des réseaux différents soient connectés via le même port Ethernet sans créer de chaos, sans chevauchement de réseaux, etc.

Ce que l’on va réellement mettre en place, c’est donc une configuration où chaque VLAN utilise le même port, mais reste isolé, permettant ainsi une gestion efficace de plusieurs connexions.

Trunk Vlan Nous allons configurer notre switch manageable en créant trois VLANs : un VLAN reliant les ports 1 et 3, un autre entre les ports 2 et 3, et enfin un VLAN pour le LAN avec tous les autres ports et le port 3. Vous remarquerez que le port 3 est bien chargé ! Trois réseaux sur un seul port… mais comment cela fonctionne-t-il ?

Cela fonctionne grâce aux tags VLAN. Sur le port 3 (l’interface physique “eth0”), chaque réseau est étiqueté, permettant de différencier les trafics sans qu’ils se mélangent.

Configuration OpenMPTCProuter

Dans un premier temps, nous allons créer deux nouvelles interfaces sur le routeur.

  1. Par défault, le CIDR OpenMPTCProuter est 192.168.100.1/24
    • Connexion SSH :
      ssh root@192.168.100.1
      
  2. Modification des définitions d’interfaces :
    • Éditer le fichier de configuration des interfaces :
      vim /etc/config/network
      

Exemple simple de définition de l’interface LAN liée à eth0 :

config interface 'lan'
        option proto 'static'
        option ipaddr '192.168.100.1'
        option netmask '255.255.255.0'
        option device 'eth0'
        option ifname 'eth0'
        option ip4table 'lan'

Ici, nous attribuons une IP statique. Passons à la configuration des deux interfaces de périphériques :

config device 'freewan_dev'
        option name 'eth0.10'

config device 'starwan_dev'
        option name 'eth0.100'

Nous ajoutons un tag VLAN sur chaque device : le tag “10” pour Starlink et “100” pour Freebox. Ainsi, chaque paquet réseau sortant par ces interfaces sera encapsulé avec le tag correspondant. Trame Vlan

Définition des interfaces correspondantes :

config interface 'freewan'
        option proto 'dhcp'
        option metric '9'
        option multipath 'on'
        option device 'eth0.10'

config interface 'starwan'
        option proto 'dhcp'
        option metric '10'
        option multipath 'master'
        option device 'eth0.100'

Chaque interface utilise un client DHCP pour obtenir une IP, car les équipements (Freebox et Starlink) imposent leur propre serveur DHCP, même en mode bridge ou bypass…

Configuration côté switch

Voici l’interface de configuration de mon switch D-Link : Vlan Setup On y voit déjà les différents VLANs configurés. Pour refaire les étapes dans l’ordre, il faut d’abord créer un VID (VLAN ID). Vlan Setup 2

  1. Création des VLANs :

    • Pour Freebox, définissez le tag VLAN “100” et nommez-le “freewan”.
    • Sélectionnez les ports participants : le port 1 doit être untagged (la Freebox ne comprend pas les paquets taggés), et le port 3 tagged pour que le routeur OpenMPTCRouter sache rediriger vers la bonne interface (eth0.10).
  2. Répétez pour Starlink :

    • Le port 3 reste tagged, et le port 2 doit être untagged.
  3. Configuration par défaut :

    • Tous les autres ports non membres sont affectés au VLAN par défaut “1”.
  4. PVID (Port VLAN ID) :

    • Donc “10” pour eth1, “100” pour eth2 et le reste sur le VID 1 ! Vlan Setup 3

Et voila ! On branche tout et ça devrait fonctionner !

Le chemin d’une trame

Essayons de schématisé ce qu’il se passe :

Chemin d’une trame avec Vlan