Après avoir testé les échanges de paquets sur le lien
WAN dans la section précédente,
on se préoccupe maintenant du routage depuis et vers le routeur
spoke
via ce même lien.
Désactivation de la configuration de l'interface LAN du routeur Spoke
Dans les sections précédentes, l'interface eth0
du routeur spoke
a servi à communiquer avec l'Internet. On
doit donc désactiver la configuration automatique de cette
interface aussi bien en IPv4
qu'en IPv6.
Voici un extrait du fichier /etc/network/interfaces
du routeur spoke
pour l'interface eth0
sans configuration automatique.
allow-hotplug eth0 iface eth0 inet manual up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/forwarding up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra up ip link set dev $IFACE up down ip link set dev $IFACE down
Cette solution permet de conserver un accès depuis le système hôte via l'adresse IPv6 de lien local.
Pour forcer l'application de la route par défaut via le protocole PPP, on utilise les scripts système de manipulation des interfaces.
#
ifdown dsl-provider#
ifup dsl-provider
La table de routage IPv4 devient :
#
ip route ls
default dev ppp0 scope link
203.0.113.1 dev ppp0 proto kernel scope link src 203.0.113.11
La table de routage IPv6
reste inchangée tant que le routeur hub
ne dispose pas d'outil d'annonce
SLAAC.
Activation du routage IPv4 & IPv6 sur le routeur Hub
Si on respecte la règle de configuration adoptée dans les
sections précédentes, on utilise les fichiers système pour
configurer le routage. Ici, c'est le fichier /etc/sysctl.conf
qui nous intéresse. Voici la
liste des options de configuration utilisées. Dans la copie d'écran
ci-dessous, on a supprimé les commentaires et les lignes vides.
#
egrep -v '(^#|^$)' /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.log_martians = 1
Ces options sont appliquées à l'aide de la commande
.#
sysctl
-p
Traduction d'adresses IPv4 sur le routeur Hub
Le démon pppd
du routeur
hub
délivre des adresses
IPv4 appartenant au préfixe
203.0.113.0/24
. Ce préfixe de la
famille TESTNET est non routable sur l'Internet. On a donc recours
à la traduction d'adresses sources pour que le trafic du routeur
spoke
soit correctement routé.
On utilise le paquet ipatbles-persistent pour préserver les règles
de traduction d'adresses d'un redémarrage système à l'autre. Le
fichier de sauvegarde est : /etc/iptables/rules.v4
.
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth0 -p tcp -m tcp --syn -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu -A POSTROUTING -o eth0 -j MASQUERADE COMMIT
Il suffit de consulter les compteurs associés aux règles de filtrage pour valider leur fonctionnement.
#
iptables -t nat -vL POSTROUTING
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
30 1800 TCPMSS tcp -- any eth0 anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN tcpmss match 1400:1536 TCPMSS clamp to PMTU
256 26578 MASQUERADE all -- any eth0 anywhere anywhere
Note | |
---|---|
L'utilisation du module Le protocole TCP de la couche
transport négocie, lors de l'établissement d'une connexion, la
quantité maximale d'octets que peut contenir un segment. Comme la
couche transport ne sait rien de l'encapsulation en couche liaison,
la règle de filtrage qui fait appel au module |
Adresses IPv6 ULA
Avec IPv6, les adresses dites Unique local address sont l'équivalent des adresses privées IPv4. Ce document constitue une bonne occasion d'illustrer leur utilisation.
Par définition, le préfixe réseau à utiliser est le :
fd00::/8
. À ce préfixe il faut
adjoindre 40 bits aléatoires pour obtenir un préfixe /48
qui constitue la base du plan
d'adressage.
On commence donc par générer une chaine de 40 bits aléatoires notée en hexadécimal.
$
openssl rand -hex 5
271684e79b
Le préfixe réseau obtenu est le : fd27:1684:e79b::/48
. Pour adresser les
différents routeurs spoke
potentiels, l'espace d'adressage est ainsi de 2^16 liens
WAN possibles. Les 16 bits
réseau sont obtenus en faisant la différence entre 64 (le nombre de
bits de la partie hôte) et 48 (le nombre de bits de la partie
réseau). Puisque la maquette utilisée ne comprend qu'un seul lien
WAN, on utilise le premier
préfixe réseau disponible pour la suite des manipulations :
fd27:1684:e79b::/64
.
Une fois le plan d'adressage défini, on passe à la configuration
du routeur hub
.
-
Affectation d'une adresse IPv6 à l'interface
ppp0
.#
ip -6 addr add fd27:1684:e79b::1/64 dev ppp0 -
Configuration du démon radvd pour annoncer le préfixe réseau ainsi que le resolver DNS en direction du routeur
spoke
.interface ppp0 { AdvSendAdvert on; prefix fd27:1684:e79b::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; RDNSS 2001:db8:fe00:8175::1 { }; };
Ces deux étapes de configuration doivent normalement être
réalisées lors de l'établissement du lien WAN via le démon pppd. On peut donc placer deux scripts dans le
répertoire /etc/ppp/ipv6-up.d/
.
Ainsi, dès que l'interface pppX
est
activée, on effectue automatiquement les opérations de
configuration spécifiques à IPv6.
-
Ajout automatique de l'adresse IPv6 de la famille Unique local address à l'interface PPP. Voici le script
/etc/ppp/ipv6-up.d/ipv6-ula-address
#!/bin/sh # ULA network prefix prefix=fd27:1684:e79b # extract $IFACE number as network nibble netnum=$(echo $IFACE | grep -o [0-9]*) # compute ULA interface address ula=$prefix:$netnum::1/64 ip -6 addr add $ula dev $IFACE
-
Le démon radvd est conçu pour réagir dynamiquement aux activations/désactivations d'interfaces et au modifications de son fichier de configuration :
/etc/radvd.conf
. Voici le script qui permet de compléter dynamiquement la configuration en fonction de l'activation d'une interface PPP :/etc/ppp/ipv6-up.d/radvd-conf-update
.#!/bin/sh # radvd main configuration file radvd_conf="/etc/radvd.conf" if [ -z "$(grep $IFACE $radvd_conf)" ] then # ULA network prefix prefix=fd27:1684:e79b # DNS resolver IPv6 address ipv6_resolver=2001:db8:fe00:8175::1 # extract $IFACE number as network nibble netnum=$(echo $IFACE | grep -o [0-9]*) cat << EOF >> $radvd_conf interface $IFACE { AdvSendAdvert on; prefix $prefix:$netnum::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; RDNSS $ipv6_resolver { }; }; EOF systemctl restart radvd fi
Traduction d'adresses IPv6 sur le routeur Hub
On reprend ici la même démarche que pour le protocole
IPv4 avec l'utilisation du
paquet ipatbles-persistent et la
sauvegarde des règles de filtrage dans le fichier /etc/iptables/rules.v6
.
*nat :PREROUTING ACCEPT [15:2078] :INPUT ACCEPT [9:1586] :OUTPUT ACCEPT [13:1536] :POSTROUTING ACCEPT [9:1120] -A POSTROUTING -o eth0 -p tcp -m tcp --syn -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu -A POSTROUTING -s fd00::/8 -o eth0 -j SNAT --to 2001:db8:fe00:8175:b8ad:ff:feca:fe00 COMMIT
Comme avec le routage des paquets IPv4, les compteurs servent à qualifier l'utilisation des règles de filtrage.
-
Sur le routeur
spoke
, on lance le chargement d'une page web.$
wget -q -6 -O /dev/null http://inetdoc.net -
Sur le routeur
hub
, on relève les compteurs des règles de la tablenat
.#
ip6tables -t nat -vnL POSTROUTING Chain POSTROUTING (policy ACCEPT 13 packets, 2149 bytes) pkts bytes target prot opt in out source destination 8 640 TCPMSS tcp * eth0 ::/0 ::/0 tcp flags:0x17/0x02 tcpmss match 1400:1536 TCPMSS clamp to PMTU 14 1312 SNAT all * eth0 fd00::/8 ::/0 to:2001:db8:fe00:8175:b8ad:ff:feca:fe00
Note | |
---|---|
Avec le protocole IPv6,
l'emploi du module |