LINUX:Routage statique IPv6
→ retour aux Notions de réseau
But
Quelques notions de base de routage statique IPV6. Celles-ci sont applicables sur tous réseaux mais sont appliquées dans les faits plutôt aux petits et moyens réseaux privés.
Schéma
Notre infrastructure se compose de deux réseaux. Chaque réseau comprend deux machines Linux. Un routeur Linux relie ces deux réseaux. Toutes ces cinq machines Linux utilisent le protocole IPv6. De plus le réseau du dessus est relié à Internet par une Bbox de notre ISP Proximus.

Chaque réseau a un prefix de réseau différent: "2a02:a03f:c92a:aa00::/64" pour le réseau du haut et "2a02:a03f:c92a:aa01::/64" pour le réseau du bas. Le premier nous est donné par notre ISP Proximus; le second est inventé par nous.
Machines Linux
Les quatre machines des deux réseaux sont configurées au niveau de la couche IPv6 selon la méthode "Automatique". Voyez l'article sur l'IPv6-Méthode Automatique.
Dans le fichier de configuration de NetworkManager "/etc/NetworkManager/system-connections/enp0s25.nmconnection", l'interface étant "enp0s25" dans ce cas, cette configuration est très réduite.
... [ipv6] method=auto addr-gen-mode=eui64 ...
Le routeur Linux
Le routeur Linux a deux interfaces configurés aussi selon la méthode "Automatique".
Comme c'est un routeur, il faut modifier un paramètre du système afin que le transfert entre réseaux puisse se faire.
On crée un fichier, par exemple, "/etc/sysctl.d/router.conf" dans lequel on ajoute la ligne:
net.ipv6.conf.all.forwarding=1
Pour l'activer, soit on redémarre la machine soit on lance la commande:
sysctl -p /etc/sysctl.d/router.conf
Le serveur RADVD sur le routeur Linux
Dans le protocole IPv6, un routeur a une fonction spéciale. C'est lui qui définit le prefix de chaque réseau qui lui sont connectés et l'adresse de la route par défaut. Eventuellement il fournit un autre routage et l'adresse d'un serveur DNS.
Il envoie régulièrement ses informations sur le réseau concerné et répond aux sollicitations des machines de ce réseau.
Installation
Il faut installer le paquet concerné:
dnf install radvd
Configuration
Voici le contenu du fichier de configuration "/etc/radvd.conf":
interface enp0s25
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultPreference low;
prefix 2a02:a03f:c92a:aa00::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
route 2a02:a03f:c92a:aa01::/64 {};
RDNSS 2001:4860:4860::8844 {};
};
interface enp6s0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultPreference medium;
prefix 2a02:a03f:c92a:aa01::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2001:4860:4860::8844 {};
};
Cette configuration est basique. Elle comporte deux sections, une par interface réseau:
- l'interface "enp0s25" est connecté au réseau du haut du schéma,
- l'interface "enp6s0" est connecté au réseau du bas du schéma.
Remarquons que les options "AdvManagedFlag" et "AdvOtherConfigFlag" sont désactivées (sur "off") car j'ai remarqué que la première n'a d'effet que sur la méthode "Automatique" d'IPv6 en présence d'un serveur DHCP et la seconde permet d'envoyer l'adresse du serveur DNS au client DHCP. Or nous n'avons pas de serveur DHCP.
Activation
Maintenant, on va activer et lancer le service concerné:
systemctl enable radvd.service systemctl start radvd.service
Vérification
Pour effectuer cette vérification, on doit installer le paquet "rdisc6":
dnf install rdisc6
On effectue ensuite notre requête. Elles envoient cette requête sur le réseau local et attend la réponse du service "RADVD".
Il faut indiquer sur quel interface réseau effectuer cette demande "enp0s25" pour la première:
rdisc6 enp0s25
Voici la réponse pour l'interface "enp0s25" connecté sur le réseau du dessus:
Solicitation de ff02::2 (ff02::2) sur enp0s25... Limite de saut (TTL) : 64 ( 0x40) Conf. d’adresse par DHCP : Non Autres réglages par DHCP : Non Agent domestique (mobile) : Non Préférence du routeur : faible Proxy (découverte voisin) : Non Durée de vie du routeur : 300 (0x0000012c) secondes Temps d’atteinte : non indiqué (0x00000000) Temps de retransmission : non indiqué (0x00000000) Préfixe : 2a02:a03f:c92a:aa00::/64 Sur le lien (on-link) : Oui Conf. autonome d’adresse: Oui Durée de validité : 86395 (0x0001517b) secondes Durée de préférence : 14400 (0x00003840) secondes Route : 2a02:a03f:c92a:aa01::/64 Préférence de route : moyen Durée de vie de route : 300 (0x0000012c) secondes Serveur DNS récursif : 2001:4860:4860::8844 Validité du serveur : 300 (0x0000012c) secondes Adresse source de lien : 00:1C:C0:2A:C4:25 de fe80::21c:c0ff:fe2a:c425 Limite de saut (TTL) : 64 ( 0x40) Conf. d’adresse par DHCP : Non Autres réglages par DHCP : Non Agent domestique (mobile) : Non Préférence du routeur : moyen Proxy (découverte voisin) : Non Durée de vie du routeur : 300 (0x0000012c) secondes Temps d’atteinte : 30000 (0x00007530) millisecondes Temps de retransmission : non indiqué (0x00000000) Préfixe : 2a02:a03f:c92a:aa00::/64 Sur le lien (on-link) : Oui Conf. autonome d’adresse: Oui Durée de validité : 86400 (0x00015180) secondes Durée de préférence : 72000 (0x00011940) secondes Route : 2a02:a03f:c92a:aa00::/56 Préférence de route : moyen Durée de vie de route : 86400 (0x00015180) secondes Serveur DNS récursif : fdaa:fbbc:bfdd:eef0:ff:f1d0:: Validité du serveur : 60 (0x0000003c) secondes MTU : 1488 octets (valide) Adresse source de lien : A8:6A:BB:88:99:E3 de fe80::aa6a:bbff:fe88:99e3
Nous obtenons deux réponses:
- la première provient de notre routeur Linux;
- la seconde provient du routeur de notre ISP Proximus.
Chacun fournissent le même préfix de ce réseau du haut du schéma.
Nous ne pouvons pas modifier les paramètres du routeur de notre ISP Proximus; or il a un niveau de préférence "moyen" et comme c'est par cette porte que l'on peut accéder à Internet; il est préférable que sa route par défaut soit privilégiée. Pour cette raison, nous avons défini notre routeur Linux avec une priorité plus basse ("AdvDefaultPreference low;") pour l'interface "enp0s25" connecté sur le même réseau que le routeur de notre ISP. A noter qu'il n'y a que trois niveaux: high, medium et low.
Si nous avions défini cette option à "high", le trafic des machines du réseau du dessus serait arrivé sur notre routeur Linux, qui l'aurait redirigé ensuite vers le routeur de notre ISP.
Nous remarquons une route ajoutée qui permettra aux machines du réseau du haut d'atteindre celles du réseau du bas ("route 2a02:a03f:c92a:aa01::/64{}").
Nous avons également ajouté une option qui définit l'adresse du serveur DNS ("RDNSS 2001:4860:4860::8844 {};").
Chaque routeur retourne en fin de journal, leur adresse Unicast Link-Local.
Et ensuite pour l'autre interface connecté sur le réseau du bas:
rdisc6 enp6s0
voici sa réponse:
Solicitation de ff02::2 (ff02::2) sur enp6s0... Limite de saut (TTL) : 64 ( 0x40) Conf. d’adresse par DHCP : Non Autres réglages par DHCP : Non Agent domestique (mobile) : Non Préférence du routeur : élevé Proxy (découverte voisin) : Non Durée de vie du routeur : 300 (0x0000012c) secondes Temps d’atteinte : non indiqué (0x00000000) Temps de retransmission : non indiqué (0x00000000) Préfixe : 2a02:a03f:c92a:aa01::/64 Sur le lien (on-link) : Oui Conf. autonome d’adresse: Oui Durée de validité : 84623 (0x00014a8f) secondes Durée de préférence : 12623 (0x0000314f) secondes Serveur DNS récursif : 2001:4860:4860::8844 Validité du serveur : 300 (0x0000012c) secondes Adresse source de lien : 00:1B:21:3B:B0:77 de fe80::21b:21ff:fe3b:b077
Nous y retrouvons:
- le prefix de ce réseau,
- l'adresse du serveur DNS,
- l'adresse Unicast Local-Link de cet interface du routeur Linux.
Note: Cette commande peut aussi être exécutée sur la machines Linux latérales. Le résultat dépendra du réseau auquel cette machine est connectée et donc des routeurs se trouvant sur ce même réseau.
Déroulement de l'adressage
La mise en place de l'adressage réseau se passe en plusieurs phases:
- Chaque machine crée son adresse IPv6 Link-Local
- Les deux interfaces réseau du routeur configurent leurs adresses IPv6 Unicast Global respectives et leurs routes par défaut avec l'aide des informations du serveur RADVD.
- Chacun des deux interfaces du routeur ont donc maintenant leur prefix attribué.
- Chaque machine Linux, sur base des deux serveurs RADVD (le routeur de l'ISP en a un actif), peuvent créer automatiquement leur adresse Unicast Global. Ils obtiennent des routeurs leur préfix, l'adresse du serveur DNS, leur route par défaut et pour celles du réseau du dessus, la route qui permet d'accéder aux machines du réseau du dessous.
Vérification
On va maintenant vérifier cette configuration réseau. On va passer en revue divers paramètres:
- Adresses réseaux
- Table de routage
- Résolution DNS
- Adresse réseau vue d'Internet
Routeur Linux
On visionne les adresses des deux interfaces réseaux avec la commande suivante:
ifconfig
Pour l'interface "enp0s25" vers le réseau du dessus dans le schéma, on a:
inet6 2a02:a03f:c92a:aa00:21c:c0ff:fe2a:c425 prefixlen 64 scopeid 0x0<global> inet6 fe80::21c:c0ff:fe2a:c425 prefixlen 64 scopeid 0x20<link> ether 00:1c:c0:2a:c4:25 txqueuelen 1000 (Ethernet)
Et pour l'interface "enp6s0" vers le réseau du bas dans le schéma, on a:
inet6 fe80::21b:21ff:fe3b:b077 prefixlen 64 scopeid 0x20<link> inet6 2a02:a03f:c92a:aa01:21b:21ff:fe3b:b077 prefixlen 64 scopeid 0x0<global> ether 00:1b:21:3b:b0:77 txqueuelen 1000 (Ethernet)
Ensuite on passe à la table de routage avec la commande suivante:
route -6n
qui donne:
Table de routage IPv6 du noyau Destination Next Hop Flag Met Ref Use If 2a02:a03f:c92a:aa00::/64 :: U 101 2 0 enp0s25 2a02:a03f:c92a:aa01::/64 :: U 100 3 0 enp6s0 2a02:a03f:c92a:aa00::/56 fe80::aa6a:bbff:fe88:99e3 UG 101 1 0 enp0s25 fe80::/64 :: U 1024 3 0 enp6s0 fe80::/64 :: U 1024 3 0 enp0s25 ::/0 fe80::aa6a:bbff:fe88:99e3 UG 101 3 0 enp0s25 ::1/128 :: Un 0 5 0 lo 2a02:a03f:c92a:aa00::/128 :: Un 0 3 0 enp0s25 2a02:a03f:c92a:aa00:21c:c0ff:fe2a:c425/128 :: Un 0 4 0 enp0s25 2a02:a03f:c92a:aa01::/128 :: Un 0 3 0 enp6s0 2a02:a03f:c92a:aa01:21b:21ff:fe3b:b077/128 :: Un 0 4 0 enp6s0 fe80::/128 :: Un 0 3 0 enp6s0 fe80::/128 :: Un 0 3 0 enp0s25 fe80::21b:21ff:fe3b:b077/128 :: Un 0 6 0 enp6s0 fe80::21c:c0ff:fe2a:c425/128 :: Un 0 4 0 enp0s25 ff00::/8 :: U 256 4 0 enp6s0 ff00::/8 :: U 256 3 0 enp0s25 ::/0 :: !n -1 1 0 lo
On remarque l'adresse Unicast Link-Local de la route par défaut du routeur de l'ISP (8ème ligne) pour l'interface "enp0s25" vers le réseau du dessus. On peut la retrouver dans la sortie de la commande "rdisc6 enp0s25".
La commande suivante donne la configuration de la résolution DNS:
resolvectl status
qui donne:
Global
Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (enp0s25)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1 2001:4860:4860::8844 fdaa:fbbc:bfdd:eef0:ff:f1d0::
DNS Domain: home.dom
Default Route: yes
Link 3 (enp6s0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 2001:4860:4860::8844
DNS Servers: 2001:4860:4860::8844
Default Route: yes
Dans ce cas, il y a deux sections, une par interface réseau. Parmi les adresses fournies par le routeur de l'ISP Proximus, on retrouve celle donnée par notre router Linux.
Note: On remarque des informations venant du protocole IPv4; les machines sont aussi configurées pour IPv4.
Vu d'Internet, la commande suivante:
curl -6 ifconfig.me
retourne bien l'adresse Unicast Global de l'interface "enp0s25" du réseau du dessus dans le schéma:
2a02:a03f:c92a:aa00:21c:c0ff:fe2a:c425
Machine Linux du réseau du haut
On passe aux machines Linux du haut du schéma (sr11.home.dom et sr12.home.dom).
On visionne les adresses avec la commande suivante:
ifconfig
Pour l'interface "enp0s25", on a:
inet6 fe80::21c:c0ff:feaf:f1db prefixlen 64 scopeid 0x20<link> inet6 2a02:a03f:c92a:aa00:21c:c0ff:feaf:f1db prefixlen 64 scopeid 0x0<global> ether 00:1c:c0:af:f1:db txqueuelen 1000 (Ethernet)
Ensuite on passe à la table de routage avec la commande suivante:
route -6n
qui donne:
Table de routage IPv6 du noyau Destination Next Hop Flag Met Ref Use If 2a02:a03f:c92a:aa00::/64 :: U 100 2 0 enp0s25 2a02:a03f:c92a:aa01::/64 fe80::21c:c0ff:fe2a:c425 UG 100 1 0 enp0s25 2a02:a03f:c92a:aa00::/56 fe80::aa6a:bbff:fe88:99e3 UG 100 1 0 enp0s25 fe80::/64 :: U 1024 1 0 enp0s25 ::/0 fe80::aa6a:bbff:fe88:99e3 UG 100 3 0 enp0s25 ::/0 fe80::21c:c0ff:fe2a:c425 UG 101 1 0 enp0s25 ::1/128 :: Un 0 5 0 lo 2a02:a03f:c92a:aa00:21c:c0ff:feaf:f1db/128 :: Un 0 3 0 enp0s25 fe80::21c:c0ff:feaf:f1db/128 :: Un 0 4 0 enp0s25 ff00::/8 :: U 256 4 0 enp0s25 ::/0 :: !n -1 1 0 lo
On remarque que la route par défaut (7ème ligne) renvoie vers routeur de l'ISP Proximus et est en première position (poids de 100) sur base de l'adresse Unicast Local-Link du routeur de l'ISP. On peut la retrouver dans la sortie de la commande "rdisc6 enp0s25" exécutée sur le routeur Linux.
Et en 4ème ligne, on retrouve la route vers l'autre réseau selon son prefix sur base de l'adresse Local-Link de notre routeur Linux. On peut la retrouver dans la sortie de la commande "rdisc6 enp0s25".
La commande suivante donne la configuration de la résolution DNS:
resolvectl status
qui donne:
Global
Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: foreign
Link 2 (enp0s25)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1 fdaa:fbbc:bfdd:eef0:ff:f1d0:: 2001:4860:4860::8844
DNS Domain: home.dom
Default Route: yes
Derrière les adresses fournies par le routeur de l'ISP Proximus, on retrouve celle donnée par notre router Linux.
Vu d'Internet, la commande suivante:
curl -6 ifconfig.me
retourne bien l'adresse Unicast Global de notre machine:
2a02:a03f:c92a:aa00:21c:c0ff:feaf:f1db
Machine Linux du réseau du bas
On passe aux machines Linux du bas du schéma (sr21.home.dom et sr22.home.dom).
On visionne les adresses avec la commande suivante:
ifconfig
Pour l'interface "enp0s25", on a:
inet6 2a02:a03f:c92a:aa01:21c:c0ff:fe30:2a38 prefixlen 64 scopeid 0x0<global> inet6 fe80::21c:c0ff:fe30:2a38 prefixlen 64 scopeid 0x20<link> ether 00:1c:c0:30:2a:38 txqueuelen 1000 (Ethernet)
Ensuite on passe à la table de routage avec la commande suivante:
route -6n
qui donne:
Table de routage IPv6 du noyau Destination Next Hop Flag Met Ref Use If 2a02:a03f:c92a:aa01::/64 :: U 100 1 0 enp0s25 fe80::/64 :: U 1024 1 0 enp0s25 ::/0 fe80::21b:21ff:fe3b:b077 UG 100 3 0 enp0s25 ::1/128 :: Un 0 5 0 lo 2a02:a03f:c92a:aa01:21c:c0ff:fe30:2a38/128 :: Un 0 4 0 enp0s25 fe80::21c:c0ff:fe30:2a38/128 :: Un 0 4 0 enp0s25 ff00::/8 :: U 256 4 0 enp0s25 ::/0 :: !n -1 1 0 lo
On remarque que la route par défaut (5ème ligne) renvoie vers routeur Linux sur base de l'adresse Unicast Local-Link du routeur Linux de son interface "enp6s0". On peut la retrouver dans la sortie de la commande "rdisc6 enp6s0" exécutée sur le routeur Linux.
La commande suivante donne la configuration de la résolution DNS:
resolvectl status
qui donne:
Global
Protocols: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (enp0s25)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 2001:4860:4860::8844
DNS Servers: 195.238.2.21 2001:4860:4860::8844
DNS Domain: home.dom
Default Route: yes
On retrouve l'adresse du serveur DNS donnée par notre router Linux.
La commande suivante utilisée dans les deux cas ci-dessus:
curl -6 ifconfig.me
ne donne rien.
Car ce réseau "2a02:a03f:c92a:aa01::/64" n'est pas reconnu au niveau d'Internet et de notre ISP Proximus. Ce dernier ne nous permettant d'utiliser que le réseau "2a02:a03f:c92a:aa00::/64". En conséquence, le réseau du bas du schéma n'a pas accès à Internet. Mais le trafic entre nos deux réseaux est effectif.
Nous contournerons cette limitation dans la section suivante grâce à quelques règles du FireWall.
FireWall
Actuellement tout système doit être pourvu d'un FireWall actif. Pour le protocole IPv6, nous utilisons le service IP6TABLES qui l'équivalent du service IPTABLES qui est destiné au protocole IPv4. Ces deux services travaille de façon analogue et leur configuration est la même. La différence réside dans l'adressage et le nom de certains protocoles comme ICMP et IPV6-ICMP. Voyez l'article sur le Firewall ou mur de feu.
Machines Linux latérales
Concernant nos quatre machines Linux latérales reprises dans le schéma, nous avons implémenté le fichier de configuration "/etc/sysconfig/ip6tables" suivant:
# # Table:FILTER # *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] #################################################################################### # # Filter:INPUT # -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED -j ACCEPT -A INPUT -m state --state RELATED -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT # SSH -A INPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 22 -j ACCEPT # Resolver -A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 5355 -j ACCEPT # Journal -A INPUT -j LOG --log-level debug --log-prefix "INPUT6-MORT " -A INPUT -j DROP #################################################################################### # # Filter:OUTPUT # -A OUTPUT -o lo -j ACCEPT -A OUTPUT -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -m state --state RELATED -j ACCEPT -A OUTPUT -p ipv6-icmp -j ACCEPT # SSH -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 22 -j ACCEPT # DNS -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 53 -j ACCEPT -A OUTPUT -m conntrack --ctstate NEW -m udp -p udp --dport 53 -j ACCEPT # NTP -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 123 -j ACCEPT -A OUTPUT -m conntrack --ctstate NEW -m udp -p udp --dport 123 -j ACCEPT # HTTP -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 80 -j ACCEPT -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 443 -j ACCEPT # Resolver -A OUTPUT -m conntrack --ctstate NEW -m udp -p udp --dport 5355 -j ACCEPT -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 5355 -j ACCEPT # SMTP -A OUTPUT -m conntrack --ctstate NEW -m tcp -p tcp --dport 25 -j ACCEPT # Journal -A OUTPUT -j LOG --log-level debug --log-prefix "OUTPUT6-MORT " -A OUTPUT -j DROP #################################################################################### # # Filter:FORWARD # # Journal -A FORWARD -j LOG --log-level debug --log-prefix "FORWARD6-MORT " -A FORWARD -j DROP COMMIT #################################################################################### # # Table:MANGLE # *mangle :PREROUTING ACCEPT [0:0] :FORWARD ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :INPUT ACCEPT [0:0] COMMIT #################################################################################### # # Table:NAT # *nat :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0] COMMIT
Il est basique. Les tables "Mangle" et "Nat" ainsi que la chaîne "Forward" de la table "Filter" sont vides car elles ne concernent pas ces machines.
En entrée, nous permettons l'accès au service SSH. En sortie, divers requêtes sont acceptées, les plus courantes, notamment SSH pour se connecter ou effectuer des échanges entre machines, SMTP pour envoyer des rapports du système par mail et HTTP pour les mises à jour à côté de la mise à l'heure et de la résolution de noms (DNS).
Pour activer ce service, on exécute les commandes suivantes:
systemctl enable ip6tables.service systemctl start ip6tables.service
Routeur Linux
Du côté du routeur Linux, c'est un peu plus complexe.
Les chaînes "INPUT" et "OUTPUT" de la table "FILTER" sont identiques aux quatre autres machines Linux; nous n'allons pas les décrire à nouveau; on les recopie. La table "MANGLE" ne nous intéresse pas non plus; on fait de même.
Par contre, la tâche d'un routeur est de faire transiter un paquet d'un interface réseau à l'autre. Il ressemblera à la chaîne "OUTPOUT" de la table "FILTER". Ici on pourrait bloquer certains transferts pour isoler les deux réseaux au sujet de diverses ressources; nous n'en avons pas fait.
Voici cette partie du fichier de configuration "/etc/sysconfig/ip6tables" que l'on remplace:
#################################################################################### # # Filter:FORWARD # -A FORWARD -m state --state ESTABLISHED -j ACCEPT -A FORWARD -m state --state RELATED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT # SSH -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 22 -j ACCEPT # SMTP -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 25 -j ACCEPT # DNS -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 53 -j ACCEPT -A FORWARD -m conntrack --ctstate NEW -m udp -p udp --dport 53 -j ACCEPT # NTP -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 123 -j ACCEPT -A FORWARD -m conntrack --ctstate NEW -m udp -p udp --dport 123 -j ACCEPT # HTTP -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 80 -j ACCEPT -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 443 -j ACCEPT # Resolver -A FORWARD -m conntrack --ctstate NEW -m udp -p udp --dport 5355 -j ACCEPT -A FORWARD -m conntrack --ctstate NEW -m tcp -p tcp --dport 5355 -j ACCEPT # Journal -A FORWARD -j LOG --log-level debug --log-prefix "FORWARD6-MORT " -A FORWARD -j DROP COMMIT
Passons à la table "NAT", plus spéciale.
Voici son contenu à adapter ou nous ajoutons des règles à la chaîne "POSTROUTING":
#################################################################################### # # Table:NAT # *nat :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0] #################################################################################### # # Nat:POSTROUTING # -A POSTROUTING -s 2a02:a03f:c92a:aa00::/64 -j ACCEPT -A POSTROUTING -o enp0s25 -j MASQUERADE # Journal -A POSTROUTING -j LOG --log-level debug --log-prefix "POSTROUTING6-TRACE " COMMIT
On n'oublie pas d'activer le service IP6TABLES.
Plus haut, nous avions un problème, le réseau du bas du schéma n'avait pas accès à Internet car ce réseau "2a02:a03f:c92a:aa01::/64" ne nous est pas attribué par notre ISP Proximus.
La solution réside à le tromper grâce à la règle "-A POSTROUTING -o enp0s25 -j MASQUERADE". Cette règle intervient juste avant la sortie du processus du mur de feu. Il consiste à subtituer l'adresse de l'interface "enp0s25" du routeur Linux à tout paquet voulant sortir du réseau du bas du schéma. Donc, par exemple, l'adresse de la machine "sr22.home.dom" devient "2a02:a03f:c92a:aa00:21c:c0ff:fe2a:c425" dans le paquet qui est transmis de cette machine. Dès lors ce paquet est reconnu par notre ISP qui le laisse passer. Au retour la manipulation inverse s'opère. La machine de notre exemple "sr22.home.dom" a accès à Internet.
Et donc la commande suivante effectuée sur les machines Linux du réseau du bas:
curl -6 ifconfig.me
donnera l'adresse Unicast Global du routeur Linux et non de la machine émettrice:
2a02:a03f:c92a:aa00:21c:c0ff:fe2a:c425
Revers de la médaille, cette règle isole ce réseau du bas du schéma du reste d'Internet et du réseau du haut "2a02:a03f:c92a:aa00::/64". Dès lors, notre réseau du haut du schéma ne peut plus accéder aux machines du réseau du bas. Il faudrait une plétore de règles pour pourvoir accéder aux machines et à leurs services du réseau du bas.
Pour contourner ce problème de façon simple, on ajoute la règle "-A POSTROUTING -s 2a02:a03f:c92a:aa00::/64 -j ACCEPT" avant que la règle ayant l'action "MASQUERADE", n'entre en action. Cette règle spécifie que tous les paquets provenant des machines du réseau du haut du schéma sont acceptés, en spécifiant son prefix, et donc ils évitent la règle suivante. Nos deux réseaux sont de nouveau en libre échange mais les paquets en provenance d'Internet, non.
Déroulement du routage
Nous allons suivre le routage des paquets selon quelques situations de façon simplifiée.
Pour récupérer les adresses, il y a deux situations:
- pour les machines situées sur Internet, cette récupération se fait via le DNS
- pour les machines internes à notre réseau, on amende le fichier "/etc/hosts" de toutes nos cinq machines Linux par les adresses IPv6 Unicast Global de ses cinq machines Linux. On peut le faire également pour les adresses Unicast Local-Link mais sous un autre nom.
Machines du réseau du bas vers Internet
Une machine du réseau du bas du schéma veut consulter un site Web situé sur Internet.
- Envoi: la machine "sr22.home.dom" veut atteindre un serveur Web situé sur Internet:
- Elle récupère l'adresse du serveur Web
- Elle constate que cette adresse n'est pas sur son réseau selon sa table de routage (ligne 3)
- Elle envoie le paquet à la route par défaut (ligne 5) au routeur Linux "rt.home.dom" via son interface "enp0s25"
- Le routeur Linux "rt.home.dom" le réceptionne sur son interface "enp6s0"
- Le FireWall du routeur Linux change l'adresse émetrice contenue dans le paquet de la machine "sr22.home.dom" par la sienne, celle de l'interface "enp0s25" (MASQUERADE)
- Le routeur Linux constate que l'adresse du site Web cible n'est aucun des réseaux directement connectés à lui (lignes 3 et 4)
- Le routeur Linux envoie le paquet à la route par défaut (ligne 8) au routeur de l'ISP Proximus via son interface "enp0s25"
- Le routeur de l'ISP Proximus réceptionne le paquet de son interface interne; le vérifie et l'envoie vers l'infrastructure de Proximus et Internet vers le site Web cible via son interface externe
- Réception: la machine "sr22.home.dom" reçoit la réponse du serveur Web situé sur Internet:
- Le routeur de l'ISP Proximus récupère le paquet et constate que l'adresse cible est celle du routeur Linux "rt.home.dom" sur le réseau du haut avec lequel il est connecté.
- Le routeur de l'ISP Proximus envoie le paquet au routeur Linux via son interface interne
- Le routeur Linux réceptionne le paquet sur son interface "enp0s25"
- Le FireWall du routeur Linux change l'adresse du destinataire contenue dans le paquet, qui la sienne, par celle de la machine "sr22.home.dom" (MASQUERADE)
- Le routeur Linux constate que l'adresse cible est sur le réseau du bas dans sa table de routage (ligne 4)
- Le routeur Linux envoie le paquet à la machine "sr22.home.dom" par son interface "enp6s0"
- La machine "sr22.home.dom" réceptionne le paquet sur son interface "enp0s25"
Machines du réseau du haut vers Internet
Une machine du réseau du haut du schéma veut consulter un site Web situé sur Internet.
- Envoi: la machine "sr11.home.dom" veut atteindre un serveur Web situé sur Internet:
- Elle récupère l'adresse du serveur Web
- Elle constate que cette adresse n'est pas sur son réseau selon sa table de routage (ligne 3)
- Elle envoie le paquet à la route par défaut (ligne 7) au routeur de l'ISP Proximus via son interface "enp0s25"
- Le routeur de l'ISP Proximus réceptionne le paquet de son interface interne; le vérifie et l'envoie vers l'infrastructure de Proximus et Internet vers le site Web cible via son interface externe
- Réception: la machine "sr11.home.dom" reçoit la réponse du serveur Web situé sur Internet:
- Le routeur de l'ISP Proximus récupère le paquet et constate que l'adresse cible est celle de la machine Linux "sr11.home.dom" sur le réseau du haut avec lequel il est connecté.
- Le routeur de l'ISP Proximus envoie le paquet à la machine Linux "sr11.home.dom" via son interface interne
- La machine "sr11.home.dom" réceptionne le paquet sur son interface "enp0s25"
Machines du réseau du bas vers une machine du réseau du haut
Une machine du réseau du bas du schéma ("sr22.home.dom") veut se connecter à une machine du réseau du haut du schéma ("sr11.home.dom").
- Envoi: la machine "sr22.home.dom" veut atteindre la machine "sr11.home.dom":
- Elle récupère l'adresse de la machine "sr11.home.dom"
- Elle constate que cette adresse n'est pas sur son réseau selon sa table de routage (ligne 3)
- Elle envoie le paquet à la route par défaut (ligne 5) au routeur Linux "rt.home.dom" via son interface "enp0s25"
- Le routeur Linux "rt.home.dom" le réceptionne sur son interface "enp6s0"
- Le routeur Linux constate que l'adresse de la machine "sr11.home.dom" est sur le réseau du haut avec lequel il est connecté, dans sa table de routage (ligne 3)
- Le routeur Linux envoie le paquet à la machine "sr11.home.dom" via son interface "enp0s25"
- La machine "sr11.home.dom" réceptionne le paquet sur son interface "enp0s25"
- Réception: la machine "sr22.home.dom" reçoit la réponse de la machine "sr11.home.dom":
- La machine "sr11.home.dom" récupère l'adresse de la machine "sr22.home.dom"
- Elle constate que cette adresse n'est pas sur son réseau selon sa table de routage (ligne 3)
- Par contre, elle constate qu'elle a une route vers le réseau du bas où cette machine cible est située (ligne 4) qui passe par le routeur Linux
- Elle envoie le paquet au routeur Linux via son interface "enp0s25"
- Le routeur Linux réceptionne le paquet sur son interface "enp0s25"
- Le routeur Linux constate que l'adresse cible est sur le réseau du bas dans sa table de routage (ligne 4)
- Le routeur Linux envoie le paquet à la machine "sr22.home.dom" par son interface "enp6s0"
- La machine "sr22.home.dom" réceptionne le paquet sur son interface "enp0s25"
→ retour aux Notions de réseau