Apprendre à passer en IPv6

État : Actuellement en IP v4 mais IP v6 déjà attribuée.
FAI = Free - FreeBox révolution configurée en mode routeur.
Plusieurs machines, dont un serveur, en réseau.

En dehors de la configuration du parefeu, que je suis sur le fil ouvert par Vger ; Questions :

Sur Freebox OS, j’ai vu la possibilité d’activer IPv6 en cochant la case ad hoc.
Il y a une mise en garde que je ne déchiffre pas (Capture d’écran)
Même début d’IP avec le dernier chiffre incrémenté à chaque lignes (8 lignes au total).
Pas configurer un nex hop pour les premier subnet
Peuvent pas parler français :unamused:
Je suppose, mais comme je ne tiens pas à faire d’erreurs, je préfère qu’un traducteur expérimenté m’explique ce que je ne dois pas faire
Merci.

Subnet = sous-réseau.
Next hop = prochain saut, routeur suivant.

Mais si on ne connaît pas les principes du routage IP, ça n’avance pas à grand-chose.

Si mes souvenirs sont exacts, Free alloue un préfixe IPv6 global /60 (*) à chaque connexion ADSL (et probablement fibre), soit 2^(128-60) = 295 milliards de milliards d’adresses. Ce préfixe contient 16 préfixes /64 contenant chacun 2^(128-64) = 18 milliard de milliards d’adresses, la taille standard d’un sous-réseau IPv6. Autrefois seul le premier préfixe /64, celui qui finit par 0, était utilisé pour les machines connectées directement à l’interface LAN de la freebox, et les 15 autres n’étaient a priori pas utilisés. Si on voulait par exemple intercaler un pare-feu entre la freebox et son LAN, il fallait mettre en place une configuration un peu tordue mêlant routage+NAT IPv4 et pontage IPv6, désignée parfois sous le nom “brouter” (contraction de bridge-router). Par dérision je l’appelais aussi “prouteur” (contraction de pont-routeur).

Apparemment la freebox est maintenant capable de router chaque préfixe /64 de son /60. Pour cela on doit spécifier dans le champ “Next Hop” correspondant l’adresse IPv6 du routeur auquel la freebox doit faire suivre les paquets IPv6 qu’elle reçoit à destination de ce préfixe.

L’IPv6 possède un mécanisme d’autoconfiguration sans état plus simple que DHCP. Un routeur diffuse périodiquement et sur demande des annonces contenant les préfixes du sous-réseau et diverses informations optionnelles comme des routes additionnelles et des adresses de DNS. Les machines utilisant l’autoconfiguration reçoivent ces annonces et utilisent les informations qu’elles contiennent pour se configurer. La freebox, en tant que routeur IPv6, émet par défaut des annonces pour le premier préfixe sur son LAN.

Si on définit un next hop pour le premier préfixe /64, cela signifie que ce sous-réseau n’est plus situé directement sur le LAN derrière la freebox mais derrière le routeur désigné comme next hop, lui-même connecté à la freebox. La freebox n’a donc plus de raison de diffuser des annonces pour ce préfixe.

En résumé, ce que tu ne dois pas faire, c’est configurer une adresse de next hop pour le premier préfixe /64 si tu ne sais pas exactement ce que tu fais. Sinon plus d’IPv6 derrière la freebox.

(*) Le nombre derrière le / représente la taille du préfixe en bits, sachant qu’une adresse IPv6 a 128 bits.

Merci pour toutes ces explications, Pascal.
Si je traduis bien le dernier paragraphe, je ne remplis pas la première case [mono]XXXXXXXX70::/64[/mono] mais seulement à partir de la seconde case [mono]xxxxxxxx71::/64[/mono].
Que porte-t-on dans cette case, l’IP de chaque machine du LAN (192.168.0.X) ?

Question 2 :
Si je fais une bêtise, puis-je revenir en IPv4 en décochant la case IPv6 ?

Les champs Next Hop doivent contenir les adresses IPv6 des routeurs IPv6 pour chaque sous-réseau IPv6 desservi par ces routeurs. Si tu n’as pas de routeur IPv6 connecté à la freebox, tu ne mets rien. Si tu veux juste de l’IPv6 pour les machines connectées à la freebox, tu coches la case IPv6 et c’est tout.

Je n’ai pas de routeur, seulement la FreeBox en mode routeur.
Donc, si je comprends bien, je ne fais rien d’autre que cocher la case IPv6.
Est-ce que ça pose un problème si des sites ne “diffusent” qu’en IPv4 ?
Ou dois-je faire une manip supplémentaire ?

Aucun problème tant que les serveurs DNS répondent correctement aux requêtes AAAA (pour des adresses IPv6). La résolution DNS pour le nom du site ne renverra qu’une adresse IPv4.

Le modèle retenu est la double pile IPv4+IPv6 avec priorité à l’IPv6. Les problèmes viennent souvent de ce que la résolution DNS renvoie une adresse IPv6 injoignable. Le client essaie de s’y connecter, ce qu prend un moment, et dans le meilleur des cas finit par tenter de se connecter à l’adresse IPv4.

Merci pascal pour toutes ces précisions :023

@Ricardo : Comme dit pascal si tu as un réseau simple tu ne fait rien. Les next hop sont là pour le cas ou tu as un autre routeur avec un réseau propre et tu veut lui déléguer une partie des adresses IPv6 que la freebox a en stock.

Finalement activer IPv6 de la freebox expose toutes tes machines compatible au net sans protections du NAT. Donc ce n’est pas sans risque.

[quote=“Mimoza”]…
Finalement activer IPv6 de la freebox expose toutes tes machines compatible au net sans protections du NAT. Donc ce n’est pas sans risque.[/quote]
Pas d’autres routeurs, donc rien à faire au niveau FB, si ce n’est cocher la case ad hoc.
Quand tu dis que ce n’est pas sans risques, tu entends, je suppose, si on n’est pas protégé par un parefeu ?
Si le parefeu est bien configuré, il subsiste des riques ?

[quote=“PascalHambourg”]Aucun problème tant que les serveurs DNS répondent correctement aux requêtes AAAA (pour des adresses IPv6). La résolution DNS pour le nom du site ne renverra qu’une adresse IPv4.

Le modèle retenu est la double pile IPv4+IPv6 avec priorité à l’IPv6. Les problèmes viennent souvent de ce que la résolution DNS renvoie une adresse IPv6 injoignable. Le client essaie de s’y connecter, ce qu prend un moment, et dans le meilleur des cas finit par tenter de se connecter à l’adresse IPv4.[/quote]
Merci Pascal, l’automatisme me va bien.
Concernant le serveur de courrier distant, y-a-t-il quelque chose à faire, autre que modifier l’ip ?
Idem pour le serveur web ?

EDIT :
Je n’avais pas pensé aux webcams.
Elles sont reliées à un serveur maison directement.
Qu’en est-il ?

EDIT 2 :
Je viens de tenter le “cochage” IPv6, juste pour contrôler un minimum et le test semble bon de chez moi pour le courrier et pour les cams.

Je suis revenu en IPv4 pour passer à la protection parefeu.

L’activation de l’IPv6 ne change rien au fonctionnement de l’IPv4. La double pile c’est l’un et l’autre, pas l’un ou l’autre. Les adresses IPv4 et les noms de domaines qui pointent uniquement vers des adresses IPv4 restent accessibles de la même façon.

Un avantage de l’IPv6 (et un risque, diront certains) est que chaque machine ayant une adresse IPv6 publique propre est accessible de l’extérieur avec cette adresse sans redirection de port à configurer dans la box. On peut enfin avoir plusieurs machines qui écoutent sur le même port.

Le NAT n’a jamais été prévu pour être une protection. On peut obtenir le même niveau de protection de façon beaucoup plus propre sans trafiquer les paquets, avec un simple filtrage à état, ce qu’iptables sait très bien faire.

Bon, je vais passer à ce que je crois être la dernière étape : la configuration du parefeu.
Je commence par le script https://www.debian-fr.org/installation-parefeu-iptables-pour-les-nuls-t1901.html
Que doit-on y modifier pour l’adapter à l’IPv6 :question:

default-start chez moi : s12networking = 11 :question:
default-stop chez moi : k7networking = 8 :question:

Quoi d’autre à modifier :question:
En plus de modifier tout ce qui est iptables par ip6tables, est-ce que ça suffit comme suit :question:

[quote]#!/bin/sh

BEGIN INIT INFO

Provides: ip6tables

Required-Start:

Should-Start:

Required-Stop:

Should-Stop:

# Default-Start: 2 3 4 5 ==> 11
# Default-Stop: 0 1 6 ==> 8

Short-description: ip6tables

Description: Firewall

END INIT INFO

chargement/déchargement d’ip6tables

case “$1” in
’start’)
/sbin/ip6tables-restore < /etc/config_parefeuIP6
RETVAL=$?
;;
‘stop’)
/sbin/ip6tables-save > /etc/config_parefeuIP6
RETVAL=$?
;;
‘clean’)

clean le parefeu pendant que la machine tourne

ça peut être une faille de sécurite si on l’exécute lors de l’extinction avant l’arrêt des interfaces

pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l’extinction

/sbin/ip6tables -t filter -F
/sbin/ip6tables -t nat -F
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t nat -P PREROUTING ACCEPT
/sbin/ip6tables -t nat -P POSTROUTING ACCEPT
/sbin/ip6tables -t nat -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
RETVAL=$?
;;
‘restart’)
$0 stop && $0 start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;
esac
exit $RETVAL
[/quote]

Et pour les règles ?
Voici celles qui sont actuellement en place pour l’IPv4

[code]# Generated by iptables-save v1.4.21 on Thu Feb 11 17:43:10 2016
*filter
:INPUT DROP [96:15397]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [92249:8783831]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -s 212.27.38.253/32 -m comment --comment “TV FreeBox” -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -m comment --comment Zimbra -j ACCEPT
COMMIT

Completed on Thu Feb 11 17:43:10 2016

Generated by iptables-save v1.4.21 on Thu Feb 11 17:43:10 2016

*nat
:PREROUTING ACCEPT [39:8621]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [5827:366042]
:POSTROUTING ACCEPT [5827:366042]
COMMIT

Completed on Thu Feb 11 17:43:10 2016

Generated by iptables-save v1.4.21 on Thu Feb 11 17:43:10 2016

*mangle
:PREROUTING ACCEPT [98075]
:INPUT ACCEPT [98074]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [92249:8783831]
:POSTROUTING ACCEPT [92307:8791183]
COMMIT

Completed on Thu Feb 11 17:43:10 2016

Generated by iptables-save v1.4.21 on Thu Feb 11 17:43:10 2016

*raw
:PREROUTING ACCEPT [98075]
:OUTPUT ACCEPT [92249:8783831]
COMMIT

Completed on Thu Feb 11 17:43:10 2016[/code]

[color=#0000FF]Sachant que je suis seul sur mes machines et pratiquement isolé (vol de wifi), dois-je modifier OUTPUT d’ACCEPT à DROP au début de *filter ?
Dans ce cas, que dois-je accepter en OUTPUT ?
Autres ?

EDIT :
Quelle position dois-je adopter pour les autres tables : nat ; mangle ;raw :question:
[/color]

A ma connaissance pas plus qu’avec de l’IPv4.

@Ricardo : En effet le NAT n’est pas une protection mais elle a l’avantage de ne pas exposer les machines au réseau global.

[quote=“ricardo”]default-start chez moi : s12networking = 11
default-stop chez moi : k7networking = 8[/quote]
Comme répondu dans un autre fil, c’est insserv qui définit l’ordre d’exécution des scripts d’init en fonction des dépendances définies dans les en-têtes LSB des scripts. Quant aux niveaux d’exécution (Default-Start/Stop, à ne pas confondre avec l’ordre d’exécution Sxx ou Kxx), j’ai aussi recommandé S avec une dépendance X-Start-Before networking au lieu de 2 3 4 5 pour que les règles soit actives au plus tôt.

Attention, la table “nat” n’existe en IPv6 qu’avec les versions de noyau et iptables suffisamment récentes (Jessie oui, Wheezy pas sûr).

Il faut évidemment supprimer ou adapter les règles qui contiennent des adresses IPv4. Ce n’est pas le cas chez toi mais dans le cas général il faut aussi adapter les règles pour le protocole ICMP remplacé par ICMPv6 avec des types légèrement différents.

Pour les interfaces de type ethernet/wifi il faut aussi ajouter des règles pour accepter les paquets NDP en INPUT et OUTPUT : ICMPv6 neighbour-solicitation, neighbour-advertisement, router-advertisement (en INPUT pour un hôte non routeur), router-solicitation (en OUTPUT pour un hôte non routeur). Il peut être utile de savoir qu’avec les noyaux suffisamment récents, ces paquets ont l’état UNTRACKED alors qu’ils avaient l’état INVALID auparavant. Mais là encore, je n’ai pas sous la main la version de noyau qui a introduit ce changement.

Pour la chaîne OUTPUT, c’est comme tu veux, et logiquement tu devrais adopter la même politique qu’en IPv4.
Les tables autres que “filter” n’étant pas prévues pour le filtrage, elles devraient rester à -P ACCEPT sauf besoin particulier.

C’est moi qui ai réagi sur ce point. Ça dépend de ce que tu entends par “exposer au réseau global”, car le NAT n’empêche pas forcément une machine d’être accessible depuis l’extérieur du LAN, même sans redirection explicite. Un des nombreux problèmes du NAT, c’est sa définition :il en existe de nombreuses variantes avec des caractéristiques très différentes.

Pascal, il reste encore une zone d’ombre pour les en-têtes LBS.
Pourrais-tu corriger celui qui y est actuellement :

[quote]#!/bin/sh

BEGIN INIT INFO

Provides: ip6tables

Required-Start:

Should-Start:

Required-Stop:

Should-Stop:

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: ip6tables

Description: Firewall

END INIT INFO

[/quote]

EDIT :
J’ai fait le script “mon_parefeuIP6” et je l’ai stoppé en attente de l’activation que je ne sais pas comment formuler.
En remplacement donc de :
[mono]update-rc.d mon_parefeu start 11 S . stop 8 0 6 .[/mono]

Voici l’en-tête LSB du script de mon pare-feu (auquel je n’avais pas accès quand j’ai écrit mon message précédent) :

[code]### BEGIN INIT INFO

Provides: firewall

Required-Start: $local_fs

Should-Start:

Required-Stop: $local_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: S

Default-Stop: 0 6

Short-description: iptables-based firewall

END INIT INFO[/code]

Le niveau de démarrage S et les dépendances avec $network m’assurent que le pare-feu est démarré avant le réseau et arrêté après. On n’indique que “default” à [mono]update-rc.d[/mono] qui va calculer lui-même la position des liens symboliques dans les différents répertoires /etc/rc*.d à partir de l’en-tête LSB.

Merci Pascal.
Je vais essayer ça.

Dernière étape :confused:

[code]ricardo@jessie-ssd:~$ sudo update-rc.d "default"
update-rc.d: error: not enough arguments
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] disable|enable [S|2|3|4|5]
-n: not really
-f: force

The disable|enable API is not stable and might change in the future.
[/code]
idem avec chemin :

[code]ricardo@jessie-ssd:~$ sudo update-rc.d /etc/init.d/mon_parefeuIP6 "default"
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] disable|enable [S|2|3|4|5]
-n: not really
-f: force

The disable|enable API is not stable and might change in the future.
[/code]

EDIT :
Trouvé une erreur, retour dans 5 mn.

Fausse alerte, je n’avais pas fait d’erreur et même après reboot, toujours la même annonce et ip6tables-save retourne l’invite.

[code]ricardo@jessie-ssd:~$ sudo update-rc.d "default"
update-rc.d: error: not enough arguments
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] disable|enable [S|2|3|4|5]
-n: not really
-f: force

The disable|enable API is not stable and might change in the future.[/code]

Mon script :

[code]#!/bin/sh

BEGIN INIT INFO

Provides: firewall

Required-Start: $local_fs

Should-Start:

Required-Stop: $local_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: S

Default-Stop: 0 6

Short-description: iptables-based firewall

END INIT INFO

chargement/déchargement d’ip6tables

case “$1” in
’start’)
/sbin/ip6tables-restore < /etc/config_parefeuIP6
RETVAL=$?
;;
‘stop’)
/sbin/ip6tables-save > /etc/config_parefeuIP6
RETVAL=$?
;;
‘clean’)

clean le parefeu pendant que la machine tourne

ça peut être une faille de sécurite si on l’exécute lors de l’extinction avant l’arrêt des interfaces

pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l’extinction

/sbin/ip6tables -t filter -F
/sbin/ip6tables -t nat -F
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t nat -P PREROUTING ACCEPT
/sbin/ip6tables -t nat -P POSTROUTING ACCEPT
/sbin/ip6tables -t nat -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
RETVAL=$?
;;
‘restart’)
$0 stop && $0 start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;
esac
exit $RETVAL
[/code]

Les règles envoyées par ip6tables-save récupéré sans faire de update-rc.d “default” et sans rebooter

[code]# Generated by ip6tables-save v1.4.21 on Sat Feb 13 01:44:49 2016
*filter
:INPUT DROP [10:720]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:72]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m comment --comment SSH -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -m comment --comment CUPS -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -m comment --comment ZIMBRA -j ACCEPT
COMMIT

Completed on Sat Feb 13 01:44:49 2016[/code]

Sitôt après, le config_parefeuIP6 se vide.