Comment transformer n’importe quoi en routeur
(nbailey.ca)- Procédure pas à pas pour transformer un ordinateur classique ou un mini PC en routeur complet
- Configuration d’un réseau filaire et sans fil avec un minimum de paquets comme
hostapd,dnsmasqetbridge-utilssous Debian ou Alpine Linux - Avec seulement deux interfaces Ethernet, n’importe quel équipement — desktop, laptop, SBC — peut être converti en routeur
- Mise en place de fonctions dignes d’un routeur du commerce via la configuration du pare-feu (
nftables), des services DHCP/DNS et de l’IP forwarding - Possibilité de construire une infrastructure réseau stable et flexible uniquement avec du matériel réformé et de l’open source
Comment transformer n’importe quel appareil en routeur
- Présentation d’une méthode pour construire soi-même un routeur à partir de matériel existant, à la suite de l’interdiction d’importation de routeurs grand public décidée par le gouvernement américain
- À partir d’une expérience de plusieurs années d’exploitation stable d’un routeur basé sur un mini PC sous Linux, l’article détaille pas à pas les composants nécessaires et la procédure de configuration
- Un routeur ayant fondamentalement la même architecture qu’un ordinateur classique, il peut être réalisé avec des équipements variés comme un desktop, un laptop ou un SBC
- Configuration sous Debian ou Alpine Linux avec un minimum de paquets comme hostapd, dnsmasq, bridge-utils
- L’objectif n’est pas de répondre à une politique particulière, mais de réutiliser du matériel existant et de mieux comprendre le fonctionnement des réseaux
Choix du matériel
- Un mini PC à refroidissement passif est idéal, mais n’importe quel appareil convient à partir du moment où il dispose de deux interfaces Ethernet
- On peut compléter avec un dongle USB-Ethernet ; c’est un peu moins fiable, mais cela fonctionne très bien
- Exemple donné : une machine Celeron 3205U dual-core (1,5 GHz) peut traiter 820 à 850 Mbps en filaire et environ 300 Mbps en sans fil
- Par le passé, l’auteur a assemblé un système à partir de pièces de récupération comme un ThinkPad T60, un pont ExpressCard-PCIe, un switch Cisco 2960 et un routeur D-Link (utilisé uniquement comme AP)
- Le résultat était peu élégant, mais fonctionnait comme un routeur complet
Configuration réseau
- Configuration des interfaces
eth0: WANeth1: LAN (filaire)wlan0: LAN (sans fil)
- Le LAN filaire et sans fil sont réunis dans un bridge pour fonctionner sur le même réseau
- Si davantage de ports LAN sont nécessaires, on peut ajouter des dongles USB-Ethernet et les rattacher au bridge
- Le système d’exploitation utilisé est Debian Linux, avec les composants essentiels suivants
hostapd: création du réseau Wi-Fidnsmasq: services DNS et DHCPbridge-utils: bridging des ports
Installation et configuration initiale
- Réglages BIOS/UEFI
- Désactiver le démarrage réseau PXE
- Désactiver la gestion de l’alimentation USB/PCI
- Activer l’option « démarrage automatique après retour du courant secteur »
- Utiliser un dongle HDMI factice pour résoudre les problèmes de démarrage sans écran connecté
- Certains matériels nécessitent l’activation du dépôt non-free-firmware
- Installation du firmware selon le chipset Wi-Fi
- Intel :
firmware-iwlwifi - Realtek :
firmware-ath9k-htc - Anciennes puces Atheros :
firmware-atheros
- Intel :
Installation des paquets indispensables
- Installer les principaux utilitaires avec la commande suivante
sudo apt install bridge-utils hostapd dnsmasq - L’ensemble du système représente environ 250 paquets
Fixer les noms des interfaces réseau
- Les versions récentes de Linux utilisent des noms du type
enp0s31f6, mais il est possible de les fixer au format traditionnel ethX - Créer le fichier
/etc/systemd/network/10-persistent-ethX.link[Match] MACAddress=AA:BB:CC:DD:00:11 [Link] Name=ethX
Créer le réseau sans fil
- Configurer un dongle Wi-Fi USB en point d’accès (AP)
- Exemple de
/etc/hostapd/hostapd.confinterface=wlan0 bridge=br0 hw_mode=g channel=11 ssid=My Cool and Creative Wi-Fi Name wpa_passphrase=mysecurepassword - Activer le service
hostapdsudo systemctl unmask hostapd sudo systemctl enable --now hostapd
Configuration des interfaces
- Configuration de
/etc/network/interfacesallow-hotplug eth0 allow-hotplug eth1 auto wlan0 auto br0 iface eth0 inet dhcp iface br0 inet static bridge_ports eth1 wlan0 address 192.168.1.1/24 - Après redémarrage, vérifier l’état du bridge avec la commande
brctl show br0
Activer l’IP forwarding
- Ajouter dans le fichier
/etc/sysctl.d/10-forward.confnet.ipv4.ip_forward=1 - Appliquer ensuite
sudo systemctl restart systemd-sysctl.service
Configuration du pare-feu et du NAT
- Configuration basée sur nftables (
/etc/nftables.conf)- blocage du trafic externe
- autorisation du DNS, du DHCP et du SSH internes
- mise en place du NAT
- Activer le service
sudo systemctl enable nftables.service
Configuration DHCP et DNS
- Utilisation de
dnsmasq(/etc/dnsmasq.conf)interface=br0 dhcp-range=192.168.1.50,192.168.1.250,255.255.255.0,6h dhcp-option=option:router,192.168.1.1 dhcp-option=option:dns-server,192.168.1.1 cache-size=10000 - Activer le service
sudo systemctl enable dnsmasq
Gestion du port série
- Si l’appareil dispose d’un port console série, il peut être administré sans moniteur
- Modifier
/etc/default/grubGRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8' GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" - Exécuter
systemctl enable [email protected], puissudo update-grub
Vérification du fonctionnement
- Après redémarrage, vérifier l’état du pare-feu avec
sudo nft list ruleset - Valider la configuration avec
sudo nft -c -f /etc/nftables.conf - Les règles peuvent être rechargées sans interruption via
sudo systemctl reload nftables.service - Vérifier les logs DHCP
sudo less /var/lib/misc/dnsmasq.leases sudo journalctl -eu dnsmasq.service
Fonctionnalités supplémentaires
- Extensions possibles : journalisation et analyse du trafic, segmentation VLAN, prise en charge d’IPv6, tunneling VPN, routage dynamique (BGP, IGP)
- Ajout possible de fonctions comme le monitoring basé sur Prometheus, le port forwarding DMZ, ainsi que la détection et le blocage d’intrusion
- En revanche, il vaut mieux éviter d’installer trop de logiciels directement sur le routeur lui-même, et préférer l’isolation du trafic via une DMZ ou des VLAN
Conclusion
- Il est possible de construire un routeur complet uniquement avec des logiciels gratuits et du matériel réformé
- Un routeur n’est au fond rien d’autre qu’un ordinateur classique, et tout le monde peut donc en fabriquer un soi-même
- Réutiliser du matériel inutile permet de bâtir une infrastructure réseau stable et flexible
1 commentaires
Commentaires sur Hacker News
Excellent article. J’aimerais présenter le script create_ap que je maintiens depuis longtemps
Il est disponible dans le dépôt GitHub.
C’est un script shell qui transforme n’importe quel ordinateur Linux en routeur Wi‑Fi avec une seule ligne de commande.
Il configure automatiquement la carte Wi‑Fi en mode AP, ainsi que WPA2/3, le filtrage MAC et même un serveur DHCP/DNS.
Il a très peu de dépendances et ne nécessite pas NetworkManager.
Je l’ai aussi utilisé comme passerelle Internet domestique sur un vieux mini-PC Atom, et je m’en sers souvent pour créer un réseau de test pour le reverse engineering d’appareils IoT
On peut voir un cas lié dans cet article
Beaucoup de commentaires disent « utilise simplement X », mais l’essentiel de cet article est de montrer la configuration minimale du routage et sa simplicité
Si vous avez déjà utilisé du NAT dans Docker ou une VM, vous avez en fait déjà fait la même chose.
La fonction hotspot Wi‑Fi d’Android s’appuie elle aussi au final sur les mêmes fonctionnalités du noyau Linux.
Même ce message vous parvient probablement en passant par plusieurs routeurs logiciels
Je pense que c’est un bon principe de conception logicielle
Le Partage de connexion Internet de Windows n’était au fond qu’une case à cocher pour activer le NAT
Le fait de regrouper pare-feu, switch, serveur de fichiers, etc. sur une seule machine et d’appeler cela un « routeur » semble troubler les gens
Cet article m’a rappelé de vieux souvenirs. Mon premier usage de Linux, c’était de fabriquer un routeur avec un ordinateur de récupération
J’avais mis deux cartes réseau ISA 3Com dans un Pentium à 100 MHz et je l’avais configuré en suivant l’IP-Masquerading HOWTO.
Je l’ai ensuite fait évoluer à partir du livre Linux Firewalls de Robert Ziegler, en y ajoutant même un filtre anti-spam et un cache Squid, ce qui m’a permis de tirer quelque chose d’utile de matériel destiné à la benne
27 ans plus tard, on m’appelle encore quand quelqu’un veut savoir « comment résoudre ça à bas coût avec Linux, des élastiques et des trombones »
Référence : Linux Routers - A Primer for Network Administrators
J’utilise OPNsense/pfSense depuis longtemps et je le recommande vivement
Les fonctionnalités sont excellentes : mises à jour automatiques, sauvegardes, tunnels WireGuard, filtrage de paquets basé sur Suricata, etc.
C’est pratique de pouvoir configurer cela via une interface web plutôt que dans un terminal pendant qu’on administre le réseau le week-end
Site officiel
pfSense, OpenWRT, Barracuda, Verizon OEM, etc. offrent les mêmes fonctions mais les présentent chacun à leur manière
Je n’aime pas les produits qui adoptent l’attitude « la machine sait mieux que moi ». Le manque de flexibilité a été décisif
J’ai routé jusqu’à 300 Mb/s avec un mini-PC Atom, puis je suis passé à une VM OPNsense en migrant vers un accès gigabit
C’est amusant de faire du passthrough port par port vers la VM avec une carte Intel à 4 ports
J’utilise un équipement de routeur N100 + 10 Gbit et j’ai l’impression que la latence est plus élevée qu’avec un routeur matériel dédié
Les chipsets spécialisés traitent les paquets sans intervention du CPU, donc c’est bien plus efficace.
Je me demande si quelqu’un a réellement mesuré cette différence. La plupart des gens ne font que des tests de bande passante
OpenWRT prend en charge certaines API de switch matériel, mais il n’existe presque rien sous forme de carte PCIe
Le CCR2004-1G-2XS-PCIe de Mikrotik en est un exemple intéressant.
Le principe consiste à connecter en PCIe une carte routeur complète qui fait tourner RouterOS.
Si vous pouvez exploiter les ports à 25 Gbit/s, cela vaut le coup ; sinon, la différence avec un RB5009 n’est pas énorme
Si vous avez un switch manageable, il est possible de monter un routeur avec une seule carte réseau
En le configurant en port trunk 802.1q, on peut utiliser le switch comme un prolongateur d’interfaces
Chez moi, c’est une configuration « router-on-a-stick »
En combinant un switch PoE et un Aruba IAP d’occasion, on peut obtenir un Wi‑Fi bien meilleur que sur du matériel grand public
Avant, j’utilisais un ThinkPad comme routeur, mais je suis passé à un Dell Optiplex, que j’utilise maintenant comme routeur de homelab faisant aussi tourner des VM
Alpine Linux est excellent pour cet usage
C’est dommage, car acheter un AP offrant les mêmes performances me coûterait environ 180 dollars
Je me demande quelle est la raison politique des interdictions d’importation de routeurs
Comme l’essentiel du trafic est déjà chiffré en TLS, je me demande pourquoi cela est encore considéré comme un risque
Est-ce lié aux botnets, aux attaques DDoS, aux mots de passe par défaut faibles, ou à l’intrusion dans les réseaux internes ?
Des cas comme Volt Typhoon ou Flax Typhoon sont toujours actifs.
Cela ne se résout pas entièrement en interdisant du matériel étranger, mais la sécurité n’est pas un produit, c’est un processus, donc contrôler la chaîne d’approvisionnement reste nécessaire
J’ai autrefois travaillé sur la Bot Mitigation chez Amazon et j’ai vu le trafic généré par des appareils grand public dans le monde entier.
Avec moins de la moitié des appareils actifs, on atteignait déjà un volume de trafic impossible à bloquer
Que ce soit Huawei ou Netgear, la source des DDoS reste la même
Accès aux métadonnées DNS/de trafic, attaques contre le réseau interne, DDoS, coupure d’Internet, etc.
Au final, cela peut être détourné comme outil de surveillance et de contrôle
L’hypothèse qu’un équipement étranger puisse contenir une porte dérobée est réaliste
Dire « utilise simplement OPNsense » est un bon conseil en production, mais c’est le pire possible pour apprendre
La valeur de cet article est de montrer à quel point le routage repose sur des principes simples
Ce n’est pas mentionné dans l’article, mais si on utilise cela comme routeur, on peut réduire la surcharge avec des réglages comme ceux-ci dans
/etc/sysctl.d/10_router.conf:C’est efficace pour des ajustements visant à réduire la latence et la gigue, par exemple pour la VoIP ou les jeux.
J’ajuste aussi
gro_flush_timeout,sch_cake,napi_defer_hard_irqs, etc.L’objectif est que la famille ressente une meilleure expérience de jeu
Dans mon cas, fq_codel suffit déjà à rester parfaitement stable en environnement 10 Gbit/s
Pour ma part, je suis encore plus intéressé par le remplacement du modem fibre
Celui fourni par AT&T ralentit souvent et sa sécurité me semble douteuse.
Je me demande s’il existe un guide expliquant comment le remplacer soi-même par un modem fibre