Bonjour à tous,
Je tiens à faire un petit retour d'expérience sur la mise en place d'une box sous GNU/Linux Debian pour remplacer sa Freebox. Ce tutorial a déjà été posté sur un autre forum mais je me dis que diffuser l'information au plus grand nombre c'est bien. Ce tutorial ne présente que la partie accès à internet. Pour avoir la partie TV et téléphonie il vous faudra de toute manière la Freebox sur un VLAN particulier (835 de mémoire) mais je n'ai pas testé.
Pour ma part, je suis dans un immeuble fibré par Orange et je dispose donc de l'ONU Free (le petit boitier noir fourni par Free).
Si vous n'avez pas ce boitier je ne peux pas garantir le bon déroulement de ce tutorial. De ce que j'ai pu glaner sur Internet les Pop et Delta intègrent une partie du traitement des flux fibres (ce que fait l'ONU en fait) et donc votre liaison fibre ne montera pas si vous branchez directement la prise SFP sans l'ONU :/.
Après s'il y a des connaisseurs qui ont des informations là-dessus et éventuellement des solutions, je suis preneur (moi aussi j'aimerai bien me débarasser de l'ONU

.
Pourquoi utiliser une distribution GNU/Linux Debian et pas OpenWRT / Vyos / pfSense / ... ?
- le challenge ;
- c'est fun ;
- profiter de tous les paquets Debian ;
- pouvoir customiser aux petits oignons (partages FTP / NFS / Samba / serveur PXE côté LAN, Wireguard, OpenVPN, ...) ;
- gestion fine de la sécurité.
Voici le matériel dont nous allons avoir besoin :
- l'ONU de Free ;
- un media converter fibre vers RJ45 type TP-Link MC220L ;
- une machine Debian avec au moins deux cartes réseaux (une WAN et une LAN) qui sera notre Miambox ;
- un moyen d'accéder à la machine (écran VGA + clavier, port série, SSH, ...).
Choix du chef-cuisinier pour la Miambox :
- une carte PC Engine APU4D4 (CPU AMD avec AES-NI, 4 Go de RAM, 4 RJ45 Gigabit) ;
- un disque SSD au format mSATA ;
- adaptateur ethernet Gigabit en USB3 (il me sert d'interface WAN afin de garder les 4 ports de la carte en tant que switch).
Optionnellement vous pouvez aussi ajouter une carte Wi-Fi au format mPCI + les antennes qui vont bien. Côté logiciel, il y a hostapd pour configurer le point d'accès sans-fil.
ATTENTION : ce tutorial requiert des connaissances GNU/Linux, en réseau et tout va se dérouler en ligne de commande uniquement.
Je pars du principe que GNU/Linux Debian Buster est déjà installé sur votre Miambox et que vous y avez accès (soit par VGA, câble série ou via SSH).
Maintenant nous allons détailler les différentes étapes du projet.
1) Récupération des informations techniques du compte FreeIl faut se connecter sur votre compte client Free, puis aller sur "MA FREEBOX" et cliquer sur "Afficher mon adresse IP et les caractériques de ma ligne".
Notez votre adresse IP, la tranche de ports allouée (si vous n'êtes pas en IP fixe V4 full-stack) et votre préfixe IPv6.
Il faut aussi récupérer l'adresse MAC de la Freebox (sur le côté ou en dessous).
Dans la suite de ce tutorial :
- l'adresse IP sera noté XX.YY.ZZ.WW ;
- la tranche de port : AAAA-BBBB ;
- le préfixe IPv6 : 2a01:e0a:XXXX:XXX0::/60 (notez bien le XXX0 et oui c'est bien un /60 même si Free vous dit que c'est un /64) ;
- l'adresse MAC de la Freebox : AA:BB:CC:DD:EE:FF.
2) Préparation de la MiamboxPour la connectivité WAN de base, il faudra installer les paquets suivant :
- tcpdump
- vlan
- bridge-utils
- dnsutils
- telnet
- ndisc6
- curl
- ifupdown2
Note : la partie LAN sera traitée plus loin.
Activer le routage IPv4 et IPv6 en ajoutant les deux lignes au fichier /etc/sysctl.conf
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
Brancher le SFP de l'ONU sur le TP-Link MC220L et enfin relier la prise RJ45 du MC220L sur le port WAN de la Miambox.
Trouver le nom de l'interface réseau côté GNU/Linux (eth0, eth1, ...).
Nous la nommerons ethX dans la suite du tutorial.
Free vérifie que la machine connecté à la fibre correspond bien à la Freebox via son adresse MAC.
Il nous faut donc donc usuper l'adresse MAC de la freebox sur notre interface WAN.
Editer le fichier /etc/network/interfaces et ajouter / modifier la partie qui correspond à ethX :
allow-hotplug ethX
auto ethX
iface ethX inet6 manual
hwaddress ether AA:BB:CC:DD:EE:FF
mtu 1700
Notez ici que nous augmentons le MTU qui va nous servir à garder un MTU de 1500 pour le tunnel IPv4.
Free supporte les "jumbo frames" côté WAN.
3) Connectivité IPv6Le flux Internet se passe sur le VLAN 836, on va dédier un fichier spécifique pour la configuration WAN.
Edit : possible soucis en cas de reboot de l'ONU, voir ma réponse du 30/05 pour la configuration à jour qui utilise DHCPv6 et qui semble ne plus poser de problème.Editer le fichier /etc/network/interfaces.d/uplink :
allow-hotplug ethX.836
auto ethX.836
iface ethX.836 inet6 static
description wan6
address 2a01:e0a:XXXX:XXX0::1/60 # notez bien le XXX0 et le ::1 à la fin !
hwaddress AA:BB:CC:DD:EE:FF
mtu 1700
post-up sysctl -q net.ipv6.conf.ethX/836.forwarding=1
post-up sysctl -q net.ipv6.conf.ethX/836.accept_ra=2
La dernière ligne indique que nous acceptons les "Router advertisement" même si nous sommes un routeur (ces messages contiennent entre autre des informations sur les routes IPv6). L'avant-dernière ligne s'assure que le routage est activé sur cette interface VLAN.
Appliquer les changements d'interface :
ifreload -a
4) Test de la connectivité IPv6Faire un ping vers le serveur DNS de Free :
ping -6 -c4 2a01:e00::2
Ajouter au fichier /etc/resolv.conf :
nameserver 2a01:e00::2
Faire une résolution DNS :
dig aaaa +short www.free.fr
Faire un ping IPv6 vers
www.free.fr :
ping -6 -c 4 www.free.fr
Faire une requête HTTP :
curl -v -6 www.free.fr
Normalement à cette étape, votre Miambox a une connectivité IPv6 fonctionnelle. Victoire pour le peuple !
5) Connectivité IPv4Afin d'accéder au monde IPv4, la Freebox utilise un tunnel "IPv4 over IPv6" avec un partage de port (une IPv4 pour 4 abonnés), autrement dit c'est la technologie MAP-E. Il y a quelques logiciels pour faire du MAP-E sous GNU/Linux mais non-maintenu mais on peut également utiliser NFTables. Néanmoins vu les spécificités de Free (la tranche de ports allouée est contigüe), j'ai décidé de le faire à la main avec iptables (via Shorewall chez moi).
Un tunnel, quel qu'il soit, requiert de connaître l'adresse local et son point de sortie (endpoint). Pour déterminer ces deux paramètres:
- lancer une capture tcpdump sur la Miambox ;
tcpdump -nxi ethX.836
- à partir d'un autre accès internet IPv4 (via partage 3G, collègues, ...), faire un telnet sur votre IPv4 à destination d'un port de votre tranche de porst allouée ;
telnet XX.YY.ZZ.WW AAAA # (premier port de votre tranche de ports)
Sur la Miambox vous devriez avoir une ligne du type :
10:50:47.546694 IP6 2a01:e00:XXXX:XXXX::XXXX > 2a01:e0a:XXXX:XXX0:0:XXXX:XXXX:XXXX: IP XX.XX.XX.XX.yyyy > XX.YY.ZZ.WW:AAAA:
La première adresse IPv6 est l'adresse du relai (RELAY_IPv6_ADDRESS), normalement c'est 2a01:e00:29:200a::fffb ou 2a01:e00:29:200a::ffff. La deuxième est votre IPv6 local au tunnel (LOCAL_IPV6_ADDRESS).
Ajouter ce qui suit au fichier /etc/network/interfaces.d/uplink et remplacer RELAY_IPV6_ADDRESS, LOCAL_IPV6_ADDRESS par les bonnes valeurs :
allow-hotplug ip4tnl0
auto ip4tnl0
iface ip4tnl0 inet tunnel
description wan4
address XX.YY.ZZ.WW/32
mode ipip6
local LOCAL_IPV6_ADDRESS
endpoint RELAY_IPV6_ADDRESS
tunnel-physdev ethX.836
# Free ISP requires to have encaplimit = none
post-up ip -6 tunnel change ip4tnl0 encaplimit none
# Enable routing
post-up sysctl -q net.ipv4.conf.ip4tnl0.forwarding=1
# Adds IPv4 default route to pass by this interface
post-up ip -4 route add default dev ip4tnl0
mtu 1500
On s'aperçoit qu'on s'assure que le tunnel soint en mode routage ainsi de la présence d'une spécificité du tunnel (encaplimit none sinon vous aurez des messages ICMPv6 "Parameters problem").
Noter également le mtu à 1500. Je n'ai pas testé plus haut mais en tout cas ce MTU ne doit pas être supérieur à celui de l'interface WAN IPv6 - 40 octets (soit 1660 dans mon exemple).
Dernier point, il vous faut ajouter une ligne dans la configuration "iface ethX.836 inet6 static" (interface WAN IPv6) :
address LOCAL_IPV6_ADDRESS/64 # (n'oubliez pas le /64):
Appliquer les changements d'interface :
ifup ip4tnl0
Si vous avez une IPv4 full-stack, normalement (je n'ai pas testé car je ne l'ai pas activé) vous pouvez passer directement au test de connectivité IPv4.
Si vous êtes en partage "quart de port", il faut ajouter trois règles iptables :
iptables -t nat -A POSTROUTING -p icmp -o ip4tnl0 -j MASQUERADE \
--source XX.YY.ZZ.WW --to-ports AAAA-BBBB
iptables -t nat -A POSTROUTING -p tcp -o ip4tnl0 -j MASQUERADE \
--source XX.YY.ZZ.WW --to-ports AAAA-BBBB
iptables -t nat -A POSTROUTING -p udp -o ip4tnl0 -j MASQUERADE \
--source XX.YY.ZZ.WW --to-ports AAAA-BBBB
Note : ces règles ne sont que pour les connexion de la Miambox vers Internet. Les règles pour le LAN seront détaillées après.
Note 2 : on pourrait penser que le "to-ports" est sans-effet pour ICMP (vu qu'il n'y a pas de port dans ICMP) mais en fait cela modifie le champs "identification" de l'entête ICMP. Si vous ne respectez pas ceci, certains test de ping marcheront et d'autres non car Free se base sur le champs ID pour router vers le bon abonné.
ATTENTION : les règles iptables tapées sont éphémères (i.e. ne survit pas au reboot), il est conseillé d'utiliser un outil de pare-feu (shorewall, ufw, firewalld, ...), iptables-persistent ou encore des commandes "post-up" dans /etc/network/interfaces.d/uplink pour faire persister la configuration !
6) Test de la connectivité IPv4Faire un ping vers le serveur DNS de Free :
ping -4 -c 4 212.27.40.240
Faire une résolution DNS :
dig +short www.free.fr
Faire un ping IPv4 vers
www.free.fr :
ping -4 -c 4 www.free.fr
Faire une requête HTTP :
curl -v -4 www.free.fr
Normalement à cette étape, votre box a une connectivité IPv4 fonctionnelle. Victoire pour le peuple !
7) Pare-feuATTENTION : il est obligatoire maintenant de configurer votre pare-feu avec les outils que vous maitrisez (iptables, shorewall, ufw, firewalld, nftables, ...).
Je ne vais pas trop rentrer dans les détails mais voici en résumé, les règles qu'il faudrait mettre :
- bloquer les connexions UDP / TCP / ICMP de l'internet vers la Miambox lui-même en IPv4 et IPv6
- autoriser les paquets LAN vers Internet en IPv4 et IPv6
- autoriser les paquets de la Miambox vers Internet en IPv4 et IPv6
- autoriser le SSH du LAN vers la Miambox
Il est aussi possible, suivant les pare-feux, de configurer le NAT avec le quart de port IPv4 (Shorewall peut le faire pour UDP et TCP avec l'action MASQUERADE(AAAA-BBBB) ADRESSE_IP/24 ip4tnl0 PROTOCOL).
7) Configuration du LANIl reste maintenant à configurer la partie LAN.
Je suis parti sur une configuration à base de bridge (vu que ma Miambox a plusieurs interfaces pour le LAN).
Dans l'exemple, nous noterons les interfaces du LAN par ethY, ethZ, ethW et ethV. Côté IPv4, nous prendrons l'adressage 192.168.0.0/24
et l'adresse de la Miambox sera 192.168.0.254.
Editer le fichier /etc/network/interfaces.d/bridge en remplaçant les interfaces par les vôtres :
auto br0
iface br0 inet static
description lan
bridge_ports ethY ethZ ethW ethV
bridge_stp on
bridge_maxwait 0
bridge_fd 2
address 192.168.0.254/24
iface br0 inet6 static
address 2a01:e0a:XXXX:XXX1::1/64 # (noter bien le XXX1 à la place de XXX0 par rapport à avant)
mtu 1700
Appliquer les changements d'interface :
ifup br0
Il faut maintenant ajouter le routage NAT. Si vous êtes en mode partage "quart de port", exécutez les règles iptables suivantes :
iptables -t nat -A POSTROUTING -p icmp -o ip4tnl0 -j MASQUERADE \
--source 192.168.0.0/24 --to-ports AAAA-BBBB
iptables -t nat -A POSTROUTING -p tcp -o ip4tnl0 -j MASQUERADE \
--source 192.168.0.0/24 --to-ports AAAA-BBBB
iptables -t nat -A POSTROUTING -p udp -o ip4tnl0 -j MASQUERADE \
--source 192.168.0.0/24 --to-ports AAAA-BBBB
Si vous êtes en IPv4 full-stack, normalement il faudrait juste exécuter les mêmes commandes en supprimant le "--to-ports AAAA-BBBB" (encore une fois je n'ai pas testé).
Note : on pourrait penser que le "to-ports" est sans-effet pour ICMP (vu qu'il n'y a pas de port dans ICMP) mais en fait cela modifie le champs "identification" de l'entête ICMP. Si vous ne respectez pas ceci, certains test de ping marcheront et d'autres non car Free se base sur le champs ID pour router vers le bon abonné.
ATTENTION : les règles iptables tapées sont éphémères (i.e. ne survit pas au reboot), il est conseillé d'utiliser un outil de pare-feu (shorewall, ufw, firewalld, ...), iptables-persistent ou encore des commandes "post-up" dans /etc/network/interfaces.d/uplink pour faire persister la configuration !
Il ne reste plus qu'à installer un serveur DHCP / RA / DNS pour que le LAN dispose d'une connectivité réseau automatique :
apt install dnsmasq
Ajouter le fichier lan.conf ci-après dans /etc/dnsmasq.d/
# Interface
interface=br0
listen-address=127.0.0.1,192.168.0.254
bind-interfaces
# DHCP
local=/lan/
dhcp-range=br0,192.168.0.100,192.168.0.200,1h
dhcp-authoritative
# IPv6
enable-ra
ra-param=br0,mtu:1700,high,3600,3600
dhcp-range=::,constructor:br0,ra-names,64,60
server=2a01:e00::2
Redémarrer dnsmasq :
systemctl restart dnsmasq
8.) Test de connectivité du LANBrancher un poste sur un port du LAN de votre Miambox :
- vérifier qu'il obtient une adresse IPv4 ;
- vérifier les routes IPv4 ;
- vérifier qu'il obtient une adresse IPv6 ;
- vérifier les routes IPv6 ;
- faites un ping en IPv4 vers
www.free.fr ;
- faites un ping en IPv6 vers
www.free.fr ;
- lancer un navigateur internet sur
www.free.fr (IPv6) et sur
www.linuxfr.org (IPv4)
Finalement à cette étape, vos PC du LAN ont une connectivité IPv4 et IPv6 fonctionnelle via votre Miambox. Victoire pour le peuple !
9) SécuritéMaintenant que votre Miambox est opérationnelle :
- configurez un pare-feu aux petits oignons ;
- mettez un système de mise à jour automatique (unattended-upgrades) ;
- mettez à jour votre noyau régulièrement ;
- faite des tests avec nmap côté WAN pour bien s'assurer qu'aucun port n'est ouvert sur votre box.
10) DebugEn cas de soucis :
- vérifier que les interfaces ethX, ethX.836 et ip4tnl0 sont UP (pensez bien à mettre les interfaces WAN, vlan et tunnel en allow-hotplug dans /etc/network/interfaces.d/*) ;
- vérifier les adresses IPv4 des interfaces ;
- vérifier si l'interface ethX.836 dispose bien de *deux* adresses IPv6 commençant par 2a01:e0a (une dans le préfixe et l'autre pour le tunnel) ;
- vérifier si les interfaces sont en mode routage (dans /proc/sys/net/ipv6/conf/ethX.836/forwarding et /proc/sys/net/ipv4/conf/ip4tnl0/forwarding pour ip4tnl0) ;
- vérifier si la route par défaut IPv4 est présente ;
- vérifier si la route par défaut IPv6 est présente (si non, vérifier que /proc/sys/net/ipv6/conf/ethX.836/accept_ra est bien à 2) ;
- vérifier que l'adresse de relai IPv6 est joignable avec un ping ;
- vérifier les règles iptables pour le NAT quart de port (iptables -t nat -L) ;
- vérifier si une règle de votre pare-feu bloque le traffic ;
- faire une capture réseau (avec tcpdump) et vérifier ce qui sort (est-ce que les connexions IPv4 sortent sur la bonne tranche de port, erreur ICMPv6 "Parameter problem", des messages Router Advertisement passent sur ethX.836, ...).
Voilà ce tutorial est terminé et vous pouvez retourner à une activité normale

.