Selenith
Projets, mémos et infos diverses

Créer un switch administrable sous Linux

Publié le 03/03/2024

Les switch du commerce sont très bien tant qu'on n'a pas besoin de fonctionnalités particulières. Mais dès lors qu'on veut faire quelque chose d'un peu poussé, on est vite limité. Nous allons donc voir comment transformer un pc en switch administrable.

L'interet

Avec un switch administrable et évolutif on peut imaginer faire pas mal de choses tel que :

  • Monitorer du trafic et faire des captures réseau.
  • Copier le trafic et le renvoyer vers une interface sur laquelle est branchée une sonde de detection de menace (IDS) type suricata.
  • Avoir un point d'arrivée ou de depart d'un tunnel VPN.
  • Gérer son propre hardware wifi et installer des cartes externes très performantes.
  • Faire un répéteur wifi.
  • Faire du filtrage complexe avec nftables (seul moyen actuel de faire du filtrage fin en IPv6 à la maison).
  • Gérer son propre DNS intégré.
  • Gérer son propre DHCP intégré.
  • Activer l'IP forwarding et faire du routage !

Le matériel

Dans ce domaine, le choix est assez vaste. Il est possible d'utiliser un vieux PC de récup auquel on va ajouter une ou deux carte réseaux (1, 2 ou 4 ports Ethernet). Il existe aussi des machines vendues en ligne sous la dénomination mini PC firewall qui sont parfaites pour ça. Ces dernières ont ma préférence car leur refroidissement est passif et avec un SSD elles sont parfaitement silencieuses.

La config

L'idée de base est de permettre le trafic à travers toutes les interfaces réseau de la machine. Une adresse IP sera disponible sur une interface virtuelle afin d'être disponible depuis n'importe laquelle des interfaces physiques.

Schema D'exemple

Ci-dessous, un exemple un peu plus visuel.

Schéma montrant un bridge fait entre 3 interfaces réseau physiques et une interface virtuelle portant une IP

L'idée est de pouvoir accéder à l'interface virtuelle de la machine via son ip depuis n'importe quelle interface physique intégrée au bridge.

Interface bridge

C'est l'interface virtuelle qui va nous permettre de lier les interfaces physique ensemble et d'avoir un point pour attribuer une IP.

On va créer un fichier .netdev nommé 05-lan_bridge.netdev contenant :

[NetDev]
Name=lan_bridge
Kind=bridge

# Si boucles dans le réseau, activer le spanning tree 
# en décommentant les lignes ci dessous.
#[BRIDGE]
#STP=yes

Ce fichier permet de creer l'interface.

Ensuite, on va pouvoir lui attribuer la config liée à notre réseau.

Dans cet exemple le switch dispose d'une adresse ip V4 et d'une V6. Il est donc important de définir les gateway pour les deux réseaux.

[Match]
Name=lan_bridge

[Network]
# 3 parametres ci dessous utilisés car on attribue ici une ip fixe
DHCP=no
IPv6AcceptRA=false
LinkLocalAddressing=no
DNS=10.8.0.252 #optionnel

[Address]
Address=10.8.0.1/24

[Address]
Address=fe80::1ce:cafe/64 

[Route]
Gateway=fe80::e69e:12ff:fe0b:653a
GatewayOnLink=yes

[Route]
Gateway=10.8.0.254
GatewayOnLink=yes

Interfaces physiques

Les fichiers .network indiquent à quel bridge ces interfaces sont attachées. L'interface bridge contiendra les paramètres réseaux de niveau 3, donc pas besoin de préciser plus de parametres ici. Pour plus de detail sur la configuration des interfaces et leur nommage tu peux voir mon article à ce sujet.

Exemple : interface 1

Fichier 10-lan_1.link :

[Match]
MACAddress=08:00:27:3c:d3:10

[Link]
Description=Interface vers maison
Name=lan_1

Fichier 10-lan_1.network :

``` conf
[Match]
Name=lan_1

[Network]
Bridge=lan_bridge

Exemple : interface 2

Fichier 20-lan_2.link :

[Match]
MACAddress=08:00:27:3c:d3:d9

[Link]
Description=Interface vers labo
Name=lan_2

Fichier 20-lan_2.network :

[Match]
Name=lan_2

[Network]
Bridge=lan_bridge

Activation de la config

N'oublie pas de redémarrer le service systemd-networkd.service pour activer la configuration.

Une fois la config rechargée, la machine se comportera comme un switch réseau au niveau du groupe d'interfaces liées par un bridge. De plus, une autre machine connectée à n'importe quelle interfaces physique de notre switch pourra le pinger (ou s'y connecter en SSH, etc) via l'IP unique du Bridge.