Chocoblog

Chocoblog

Billets sur l'informatique, les logiciels libres et retours d'utilisation sont au programme avec la possibilité de publier des billets de copains.

IPV6 sur une dedibox d'Online.net en Debian Jessie

Voici un petit guide sur la façon d'ajouter la compatibilité IPV6 sur sa Dedibox d'online.net à l'aide de dhclient. Cet article reprend les grandes lignes du wiki.

Pour rappel, l'ajout d'une IPV6 en plus de l'IPV4 de votre serveur permet aux utilisateurs compatibles (c'est à dire disposant eux aussi d'une adresse IPV6) de vous contacter directement à l'aide de ce protocole. L'utilité principale étant de participer à la migration d'internet sur IPV6. Oui je sais c'est relativement maigre comme récompense surtout quand on voit les efforts qu'il faut déployer.
Comme vous allez le constater ce n'est pas quelque chose de très trivial et on se rend vite compte pourquoi IPV6 traîne autant la patte.

Attention cependant, le pare-feu d'IPV6 se contrôle via la commande ip6tables. Il faut donc le configurer comme vous le feriez avec iptables sinon vous risquez de vous retrouver cul nu dans la jungle.

Découpage de votre bloc

Online.net vous fournit un bloc /48. Vous pouvez ensuite le découper en autant de sous réseaux /56 que vous avez de serveurs. Si vous n'en avez qu'un vous ne pourrez donc créer qu'un seul sous-réseau /56. Dans mon exemple j'ai choisi de créer un sous réseau en /64 mais vous faites bien comme vous voulez. L'important est de découper quoi qu'il arrive votre bloc 48 car vous n'en aurez qu'un, et ce même si vous louez une deuxième machine.

preview 1

Comme vous pouvez le voir, chaque sous-réseau possède un identifiant unique (DUID) qui vous servira pour vous attribuer votre préfixe au DHCP d'Online.

Attribution du préfixe IPV6 avec dhclient

On va se servir de dhclient afin de s'attribuer le préfixe de notre range d'IPV6. Comme expliqué ci-dessus on se sert donc du DUID.

Il nous faut créer le fichier de configuration pour dhclient : /etc/dhcp/dhclient6.conf en remplançant votre_duid par... votre DUID.

interface "eth0" {
    send dhcp6.client-id votre_duid;
    request;
}

Vérifiez bien d'avoir ouvert le port 546 en entrée/547 en sortie en UDP via ip6tables car c'est par ces derniers que dhclient va passer :

# /sbin/ip6tables -A INPUT -i eth0 -p udp --dport 546 -j ACCEPT
# /sbin/ip6tables -A OUTPUT -o eth0 -p udp --dport 547 -j ACCEPT

Configuration automatique de l'interface

Il va maintenant falloir modifier le fichier /etc/network/interfaces afin de configurer automatiquement notre interface pour qu'elle s'ajoute statiquement l'adresse IPV6 qu'on souhaite lui attribuer.

Pour cela, ajouter simplement :

iface eth0 inet6 static
    address ip_que_vous_voulez
    netmask le_masque_de_votre_sous_reseau
    accept_ra 1
    pre-up dhclient -cf /etc/dhcp/dhclient6.conf -pf /run/dhclient6.eth0.pid -6 -P eth0
    pre-down dhclient -x -pf /run/dhclient6.eth0.pid

Pour l'adresse il vous suffit de choisir une adresse ip de votre sous réseau, par exemple la première (votresousreseau::1).
En ce qui concerne le netmask il correspond simplement au masque de votre sous-réseau (48, 56 ou 64 selon le découpage que vous avez fait).
La accept_ra nous permet d'avoir la gateway fournie par le routeur d'Online.
Enfin les pre-up/pre-down lancent/stoppent le client DHCP pour IPV6 lorsqu'on démarre/arrête l'interface.

Comme je l'ai dis c'est le routeur qui nous file la gateway via le réseau. Il faut donc faire en sorte qu'ip6tables laisse passer ces paquets spéciaux :

# /sbin/ip6tables -A INPUT -p icmpv6 -j ACCEPT
# /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
# /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
# /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
# /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
# /sbin/ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT

Vous devriez pouvoir tester votre configuration en redémarrant votre interface :

# ifdown eth0 && ifup eth0

Puis un coup de ifconfig pour vérifier qu'elle est bien mappé à l'IPV6 que vous voulez.

Et enfin un

$ ping6 ipv6.google.fr

pour vérifier que tout fonctionne comme il faut (ou pas).

Si ça ne fonctionne pas, vous pouvez vérifier que :

  • votre dhclient arrive bien à récupérer le préfixe via
# dhclient -cf /etc/dhcp/dhclient6.conf -6 -P -v eth0
  • votre interface est bien mappé à votre IPV6 :
# ifconfig
  • le routeur d'online vous a bien filé la gateway (ligne commençant par default) :
# ip -6 route show

Configurer le DNS

Une fois que vous êtes sûr que vous êtes bien joignable en IPV6, et que vous faites bien écouter les services qui vous intéressent (serveur web, serveur mail etc) sur votre adresse IPV6 en plus de celle en IPV4 alors vous pouvez ajouter un champ AAAA dans votre DNS faisant la correspondance entre votre nom de domaine et votre IPV6.

Faites bien attention, car une fois le DNS configuré tous vos utilisateurs compatibles IPV6 vous contacteront uniquement via ce protocole. Donc si vous avez loupé quelque chose (genre pare-feu qui laisse pas passer certains paquets ou service non configuré pour écouter en IPV6) il se peut que vous rendiez votre serveur injoignable pour une partie de vos utilisateurs !

Reverse DNS

Vous croyiez qu'on en avait fini ? Hé... ben non :(
Hé oui, ce serait trop facile sinon. Si vous faites tourner un serveur mail sur votre serveur (Postfix...) il doit vous arriver d'envoyer des mails sur un adresse GMail. Or Google est compatible IPV6 et communiquera avec vous (et vice-versa) directement avec ce protocole si vous avez configuré votre nom de domaine avec un champ AAAA.
Il faut savoir que Google rejette automatiquement les mails provenant d'une adresse IP qui n'a pas de reverse DNS (c'est à dire un champ DNS permettant de localiser un nom de de domaine à partir d'une IP). Il faut donc le configurer.
Avec Online.net et votre IPV4, c'est plutôt facile : vous avez un champ pour spécifier le reverse de votre adresse dans l'interface d'administration et le tour est joué.

Pour l'IPV6 c'est un peu plus compliqué. On vous donne seulement la possibilité de spécifier les DNS qui s'occuperont de filer le reverse de votre IPV6. A vous de vous débrouiller ensuite.

preview 2

Vous vouliez éviter de monter un serveur DNS ? Ben c'est loupé :) Le bon côté des choses c'est qu'on va en choisir un relativement simple qui va pas nous prendre trop de temps à configurer : Dnsmasq.

# apt-get install dnsmasq

Une fois installé sur votre serveur, on crée le fichier /etc/dnsmasq.d/reverse_ipv6 qui contiendra l'enregistrement de notre reverse :

interface=eth0
no-dhcp-interface=eth0
no-resolv
no-hosts
dns-forward-max=0
log-facility=/var/log/dnsmasq.log
log-queries
ptr-record=1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.2.1.0.5.5.7.4.8.5.4.0.1.0.0.1.ip6.arpa,cpy.re

On spécifie sur quelle interface le serveur doit répondre, qu'on ne veut pas du DHCP (juste le DNS), qu'on ne résout que les requêtes DNS configuré dans ce fichier, le fichier de logs, qu'il doit logger les requêtes (facultatif bien sûr) et enfin notre ptr-record. Comme vous pouvez le constater il faut écrire votre IPV6 à l'envers, chaque chiffre séparé par un point. Juste pour information l'adresse que j'ai spécifié est bidon, c'est juste pour l'exemple.

Il va aussi vous falloir ajouter DNSMASQ_EXCEPT=lo à /etc/default/dnsmasq. Cela l'empêchera de devenir votre resolver local (ce qui serait embêtant vu qu'il ne sait résoudre que le reverse de l'IP que vous avez spécifié).

Il ne nous reste plus qu'à spécifier sur l'interface d'Online notre serveur DNS (via la roue crantée).

Attendez un petit peu et vous devriez (enfin) être capable de vérifier le bon fonctionnement de votre serveur en IPV6 :

  • http://ipv6-test.com/validate.php pour votre serveur web
  • En envoyant un mail à une adresse Gmail sans se faire rejeter et en vérifiant dans les logs que vos deux serveurs respectifs correspondent bien via IPV6