LINUX:Routeur-PPPOE
But
La pièce maitresse et centrale du projet est l'installation et la configuration du routeur Linux. Trois problèmes nous attendent: la connexion PPPOE, le routage et le firewall. La sécurisation sera minimale; une approche plus posée d'un point de vue sécurité est fortement souhaitée; il ne faut pas oublier que cette machine est directement connectée à Internet sans isolement comme on l'a derrière la BBOS 3.
Matériel
Comme matériel nous avons besoin d'un PC ayant trois cartes réseaux.
- Celle de la carte mère nommée "enp0s25" servira à la connexion à Internet via le protocole PPPOE. Un câble réseau la reliera à un des ports RJ45 de la BBOX 3.
- La seconde carte réseau est placée dans un slot PCI et se nomme "enp4s0". Un câble réseau la reliera à un des ports RJ45 de la BBOX 3. Il sert à la connexion au LAN n°1 "192.168.1.0/24".
- La troisième carte réseau est placée dans un autre slot PCI et se nomme "enp4s2". Un câble réseau la reliera à un des ports RJ45 d'un switch indépendant. Il sert à la connexion au LAN n°2 "192.168.2.0/24".
Il est évident que l'emplacement des cartes est propre au projet afin de faciliter l'exposé. Si vous avez une machine serveur ayant 4 ports réseaux sur la carte mère, on s'y adapte.
Installation de l'OS
Nous avons l'habitude d'utiliser la distribution Linux-Fedora. Nous sommes en présence de la version 35. On installe la version serveur sans option. Il est inutile d'avoir une interface graphique tel Gnome ou de serveur WEB ou autre. Ce n'est pas une station de travail. Dès que l'installation sera effectuée, on n'aura plus à y toucher. Il faut être familier à utiliser une console texte. Un programme tel Midnight Commander peut vous y aider.
Comme nous devrons utiliser le type de connexion réseau PPPOE, un module de Network Manager doit être ajouté. On l'installe avec la commande suivante:
dnf install NetworkManager-ppp
Utilisation de Network Manager TUI
Dans la suite de l'exposé, nous utiliserons l'utilitaire "nmtui".
Pour le lancer, on ouvre une console Shell et on lance la commande "nmtui". L'écran suivant apparaît.
La première option nous ouvre la possibilité d'ajouter, modifier ou supprimer une connectique réseau comme présenté dans l'image ci-dessous. La seconde permet de les activer ou les désactiver.
Configuration de l'interface "enp4s0"
L'adaptation des paramètres de l'interface "enp4s0" ne pose pas de problème. On donne le même nom au profile que le nom du périphérique. On n'a pas besoin de spécifier l'adresse MAC; elle sera ajoutée automatiquement lors de la sauvegarde. On introduit l'adresse IPV4 "192.168.1.33/24" afin de la relier au LAN n°1; le reste reste vide. On désactive l'IPV6. On valide. On peut vérifier que l'interface est active.
Configuration de l'interface "enp4s2"
L'adaptation des paramètres de l'interface "enp4s2" ne pose pas de problème. Il est semblable au précédent. On donne le même nom au profile que le nom du périphérique. On n'a pas besoin de spécifier l'adresse MAC; elle sera ajoutée automatiquement lors de la sauvegarde. On introduit l'adresse IPV4 "192.168.2.1/24" afin de la relier au LAN n°2; le reste reste vide. On désactive l'IPV6. On valide. On peut vérifier que l'interface est active.
Remarque: Si l'interface désiré ne se trouve pas dans la liste, on l'ajoute en prenant le type "Ethernet".
Configuration de l'interface "pppoe-enp0s25"
Si dans la liste l'interface "enp0s25" existe, il faut le supprimer car il est de type "Ethernet" or celle qu'on veut utiliser est de type "DSL".
On commence par ajouter une nouvelle connexion de type "DSL" à choisir dans la liste ci-dessous.
Un écran vierge apparaît. On le remplit comme présenté ci-dessous. Dans la rubrique "DSL". Le nom du périphérique est "enp0s25". Le nom d'utilisateur et son mot de passe associé est à adapter selon votre compte auprès de votre ISP. Ils sont les mêmes que ceux présents dans la configuration de la BBOX 3.
Pour la méthode d'authentification PPP, toutes les options sont cochées mais en regardant par la suite dans les journaux de connexions, on se rend compte que la méthode "CHAP" est utilisée. La configuration de l'IPV4 est en mode automatique car comme pour une connexion DHCP, c'est votre ISP qui fournit ces paramètres. L'IPV6 est désactivée. On valide.
La liste des connexions est au final la suivante.
On peut vérifier que l'interface est active par la présence d'une étoile "*" devant son nom.
Vérification des paramètres réseaux
On peut vérifier la configuration avec les commandes suivante.
Pour l'adressage:
ifconfig
qui donne:
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:1c:c0:92:a2:08 txqueuelen 1000 (Ethernet) RX packets 329026 bytes 315162745 (300.5 MiB) RX errors 0 dropped 75 overruns 0 frame 0 TX packets 128415 bytes 10981151 (10.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 20 memory 0xd3300000-d3320000 enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.33 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:1b:21:3b:b6:ea txqueuelen 1000 (Ethernet) RX packets 110743 bytes 7891334 (7.5 MiB) RX errors 0 dropped 74 overruns 0 frame 0 TX packets 44314 bytes 32958920 (31.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp4s2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 ether 00:1b:21:3b:b0:77 txqueuelen 1000 (Ethernet) RX packets 65004 bytes 5454415 (5.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 119781 bytes 166386288 (158.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Boucle locale) RX packets 58 bytes 6020 (5.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 58 bytes 6020 (5.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1492 inet 81.242.17.14 netmask 255.255.255.255 destination 10.24.145.89 ppp txqueuelen 3 (Protocole Point-à-Point) RX packets 231107 bytes 302214074 (288.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 112072 bytes 6979037 (6.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Pour la route:
route -n
qui donne:
Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 0.0.0.0 10.24.145.89 0.0.0.0 UG 102 0 0 ppp0 10.24.145.89 0.0.0.0 255.255.255.255 UH 103 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp4s0 192.168.2.0 0.0.0.0 255.255.255.0 U 101 0 0 enp4s2
Pour le DNS, faire une recherche:
nslookup www.google.be
qui donne:
Server: 195.238.2.21 Address: 195.238.2.21#53 Non-authoritative answer: Name: www.google.be Address: 216.58.208.99 Name: www.google.be Address: 2a00:1450:4007:80f::2003
Activation du routage
Notre machine a pour ambition d'être un routeur. Il faut donc l'activer. On doit agir sur les paramètres du système. Pour y arriver, on crée le fichier "router.conf" dans le répertoire "/etc/sysctl.d". Le nom du fichier n'a pas d'importance, l'extension si.
On y ajoute la ligne:
net.ipv4.ip_forward = 1
On active cette configuration soit en redémarrant la machine, soit avec la commande suivante:
sysctl -p /etc/sysctl.d/router.conf
On vérifier sa bonne prise en compte avec la commande suivante:
systcl | grep "net.ipv4.ip_forward"
Désactivation de l'IPV6 pour le loopback
Dans le même fichier que ci-dessus (ou un autre), on ajoute les lignes:
net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6 = 1
Notons que cette étape est facultative mais met de la cohérence.
Dans le résultat de la commande "ifconfig", l'adresse IPV6 de l'interface "lo" aura disparu.
Martians
Vous avez sûrement remarqué une incohérence dans la connectique; Il y a deux câbles réseaux qui relient le routeur à la BBOX 3. Or on ne sait les isoler par exemple par des VLANs car nous n'avons pas cette possibilité dans la configuration de la BBOX 3. Une solution est de ne plus utiliser l'adresse IP publique n°1 procurée au niveau de la BBOX 3 en désactivant la connexion "PPP" dans la configuration de la BBOX 3. Il faut alors repenser notre réseau et sa configuration en conséquence.
Si on laisse la situation telle quelle, on observe des paquets venant du LAN n°1 par l'interface "enp0s25" dédié à la connexion vers internet. On le remarque par la présence de lignes venant s'ajouter au fichier journal "/var/log/messages" comme dans l'exemple ci-dessous:
Jan 9 21:58:41 server kernel: IPv4: martian source 192.168.1.99 from 192.168.1.1, on dev enp0s25 Jan 9 21:58:41 server kernel: ll header: 00000000: ff ff ff ff ff ff 30 91 8f ba ce 62 08 06
Une première approche est de désactiver ces messages qui gonflent inutilement ce journal.
Dans le fichier "/etc/sysctl.d/router.conf" (ou un autre), on ajoute les lignes:
net.ipv4.conf.all.log_martians = 0 net.ipv4.conf.enp0s25.log_martians = 0 net.ipv4.conf.ppp0.log_martians = 0
La seconde approche additionnelle est de rejeter ces paquets via le firewall. Nous verrons cela plus loin.
Firewall ou mur de feu
Etape très importante, il faut sécuriser et filtrer les connexions d'autant plus qu'on est directement connecté à internet. Vient s'ajouter le problème, propre à IPV4 de l'interfaçage entre le réseau public et le réseau privé. En outre une particularité de la connexion PPP doit être appliquée.
Problème propre au PPPOE: MTU et MSS
A partir du routeur lui-même, nous n'avons aucun problème de trafic vers Internet, par exemple en voulant effectuer des mises à jour. Par contre quand nous voulons effectuer cette même tâche à partir d'une machine du LAN n°2 dont le trafic passe par notre routeur, le trafic de gros paquets est bloqué sur certains serveurs distants.
Quant on y regarde de plus près, on remarque que le MTU (Maximum Transmission Unit) la taille maximale d'un paquet passe de 1500 sur les interfaces Ethernet à 1492 sur l'interface PPPOE-PPP (ppp0) suite à l'encapsulation PPP. La commande "ifconfig" permet de visualiser ces valeurs ci-dessus. Le MSS (Maximum Segment Size) la taille maximale des données transmises est défini comme MTU-40 octets soit 1460 sur Ethernet mais 1452 sous PPPOE-PPP (nos 8 octets en moins). Si le MSS et donc le MTU ne sont pas adaptés, il s'ensuit des phénomènes de fragmentations. Deux sous-paquets seront envoyés (1452+8) pour le même MSS, ce qui double le trafic. Certaines machines n'aime pas la fragmentation et ne transmettent pas la valeur du MSS souhaitée et bloquent le trafic.
La solution est d'envoyer au client un message (ICMP) pour qu'il réduise de 8 octets son MSS et le paquet passera en un seul bloc sans fragmentation du paquet à travers l'interface PPPOE-PPP.
En pratique, c'est une commande du firewall IPTABLES qui va s'en charger par un tour de passe-passe. Ceci se déroule dans le cadre du filtrage FORWARD car le problème apparaît lors du transit à travers le routeur. Lors de l'échange de messages entre client et serveur, la valeur de 1460 du client est transformée par le routeur en 1452; le serveur répond au client "OK pour 1452" et le client s’exécute.
La phrase magique est:
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
à mettre en début. Elle peut être placée dans la table MANGLE d'IPTABLES via la chaîne POSTROUTING en spécifiant l'interface de sortie "ppp0".