LINUX:Routage statique IPv6

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

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