Mes impressions sur le web, les standards et autres…


Passer en IPv6 sur free avec Debian

Je suis aussi passé en IPv6 sur ma connexion personnelle. Je n’étais pas spécialement pressé, craignant un impact sur la qualité de la connexion, notamment au niveau des résolutions DNS, mais les choses se sont apparemment améliorées sur ce plan-là, grâce à un algorithme nommé Happy Eyeballs.

Pour l’instant donc, je n’ai pas vu de quelconque dégradation de la connexion. Je vais donc détailler de manière très succinte la procédure que j’ai suivie, et qui a quand même impliqué de consulter de la documentation et des articles, pour bien comprendre où je mettais les pieds. En fait, j’ai passé la journée d’hier là-dessus (en plus du billet précédent).

D’abord, rendez-vous sur ce site très bien fait : ipv6-test.com. En principe, vous allez obtenir une note dégueulasse si vous êtes en IPV4 (autre site très bien fait et avec plus d’informations techniques).

Ensuite, connectez-vous à l’interface de la freebox puis allez dans Paramètres de la freebox - mode avancé - Configuration ipv6 et cochez la case Activer l’IPv6. Ça, c’est pour la freebox révolution. Pour la freebox v5, je sais que la procédure est un peu différente et nécessitera un redémarrage de la box pour que le changement soit pris en compte. Voyez ce site qui montre en image la procédure sus-dite, et aussi celle pour la freebox v5 : aide.ma-freebox.fr/ipv6.html.

La freebox route maintenant les paquets utilisant le protocole IPv6. Il faut s’assurer que Linux soit capable de traiter correctement ces paquets. Si comme moi, vous avez désactivé IPv6 au niveau du système, il est temps de faire l’opération inverse.

Grub
Éditez le fichier /etc/default/grub et retirez ipv6.disable=1 de la ligne de boot dans la variable GRUB_CMDLINE_LINUX. Ensuite, on lance la commande update-grub, puis on redémarre la bête.
sysctl
Retirez la ligne net.ipv6.conf.all.disable_ipv6 = 1 ou équivalent. Cela a pu être fait dans /etc/sysctl.conf ou dans un sous-fichier de configuration dans /etc/sysctl.d/, ou peut-être aussi dans /etc/rc.local, mais j’ai des doutes.
module ipv6 (pas sur debian ou le module ipv6 est compilé en dur dans le noyau)
Vérifiez que le chargement du module ipv6 n’est pas bloqué dans /etc/modprobe.conf ou dans la sous-configuration présente dans /etc/modprobe.d/. Cherchez les occurences de net-pf-10 ou ipv6

Dans le cas de sysctl, une commande sysctl -p && service network-manager restart devrait suffire au lieu d’un redémarrage complet.

Une fois que c’est fait, lancez la commande ifconfig pour vérifier que votre interface réseau dispose bien de ses adresses IPv6. Les lignes commençant par adr inet6: sont celles qui nous intéressent. Vous devez en avoir au moins deux, une adresse IPv6 locale dite dans le scope lien-local et une autre dans le scope global, celle qui est utilisée sur Internet.

Si vous n’avez toujours pas de connectivité IPv6, cela peut aussi être dù à une désactivation dans la configuration de NetworkManager donc vérifiez aussi ce point.

Si vous retournez sur ipv6-test.com, votre note devrait avoir sensiblement augmenté. Vous êtes bien connecté en utilisant le protocole IPv6 et les résolutions DNS se font correctement. Au début, j’avais IPv4 comme choix par défaut pour le navigateur, et une erreur dans le cas de figure DNS6 + IP6, mais ça c’est résolu par la suite.

Vous aurez sans doute aussi un avertissement concernant le SLAAC. Le SLAAC est la procédure dite d’auto-configuration sans état permettant à une machine de s’auto-configurer au sein d’un sous-réseau ipv6, de s’attribuer elle-même une IP, bref, de se passer de serveur DHCP. C’est une des grandes améliorations de l’IPv6 par rapport à son précédesseur.

Le problème ici est que la machine utilise l’adresse MAC de votre interface réseau pour créer cette IP, ce qui signifie que cette IP identifie du point de vue matériel la machine à laquelle elle est liée. Cela peut poser des problèmes de confidentialité.

Si vous êtes sensible à cette problématique, vous pouvez activer le mécanisme consistant à générer aléatoirement la partie locale de l’adresse IP qui sera rattachée à votre interface. Pour cela, il faut activer cette fonctionnalité dans Linux, car ce n’est pas le cas par défaut.

Créez un fichier à l’emplacement /etc/sysctl.d/10-ipv6-privacy.conf avec le contenu suivant :

net.ipv6.conf.all.use_tempaddr=2
net.ipv6.conf.default.use_tempaddr=2
net.ipv6.conf.eth0.use_tempaddr=2 # adaptez le nom de l'interface si besoin

Éditez également la configuration de votre connexion configurée dans NetworkManager. Il faut le faire manuellement car l’interface ne nous donne pas d’accès à l’option que l’on veut mettre en place. Le fichier à éditer est /etc/NetworkManager/system-connections/Votre_connexion. Votre section ipv6 doit comporter la ligne ip6-privacy=2, comme ceci :

[ipv6]
method=auto
ip6-privacy=2

Redémarrez la connexion réseau et retournez voir sur ipv6-test.com et ça devrait être un quasi 20/20. Il n’y qu'une chose qu’on ne peut pas corriger pour l’instant, c’est le reverse DNS sur votre préfixe IPv6. Free n’offre pas encore cette possibilité, donc on ne peut pas faire de résolution inverse sur notre IPv6, là où en IPv4, on obtient de base (pour les abonnés free) un nom d’hôte tel quel a0017-1-votre_ipv4.fbx.proxad.net.

Pensez également à activer le pare-feu (c’est pas déjà le cas ??). Utilisez par exemple ufw (vérifiez /etc/default/ufw et IPV6=yes) et interdisez les connexions entrantes par défaut (c'est le cas dans la config par défaut il me semble), puis autorisez tel ou tel port, au cas par cas, en utilisant les règles par défaut d’ufw si elles suffisent. En ajoutant vos propres règles s’il le faut. Dans mon cas :

nog bobe # ufw status 
Status: active

To                         Action      From
--                         ------      ----
Sopcast                    ALLOW       Anywhere
xDeluge                    ALLOW       Anywhere
49200                      ALLOW       192.168.1.0/24
xDeluge (v6)               ALLOW       Anywhere (v6)
Sopcast (v6)               ALLOW       Anywhere (v6)
49200                      ALLOW       2001:db8::/64

Vérifiez d’ailleurs que les services que vous activez (ssh, postfix, ...) sont bien ipv6-aware. Dans mon cas, j’avais ajouté AddressFamily inet dans la config du client ssh et inet_protocols ipv4 dans celle de postfix :D

Bon, maintenant, si vous voulez vous attribuer une IP fixe, éditez de nouveau le fichier de configuration de votre connexion /etc/NetworkManager/system-connections/Votre_connexion. Votre section ipv6 doit doit ressembler à ça :

[ipv6]
method=manual
address1=2001:db8::b0be/64
ip6-privacy=2

address1 doit contenir le préfixe IPv6 fourni par free suivi par les 4 blocs 16 bits composant la partie locale de votre adresse (contracté ici en ::b0be :D) puis /64 qui précise la longueur du préfixe (4 x 16 bits).

le mot de la fin : une extension firefox pour vider le cache dns du navigateur pour le site sur lequel on se trouve. Par effet de bord, cela permet de savoir si le site en question a été accédé en ipv6 ou en ipv4. DNS flusher.

IPV6 ready

Les domaines webnaute.net et phpcodeur.net sont maintenant joignables en ipv6.

Le serveur bénéficiant déjà d'une connectivité ipv6 (hébergement gandi), il m'a suffi d'ajouter les entrées AAAA dans les zones DNS. Une opération très simple donc. Du coup, je trouve dommage que gandi ne fasse pas mention de ce simple ajout à faire dans la page d'édition du fichier de zone. Cela accentuerait le nombre de sites proposant un accès en ipv6, ce qui ne peut être que positif pour la migration vers ce protocole.

Trac en français

Vu que j’ai galéré comme un con pour passer Trac 0.12 en français et que la page TracL10N du Wiki officiel est imbuvable, petit récapitulatif concis :

  • Installer d’abord Babel. Concrètement, cela se traduit par un easy_install Babel en ligne de commande, mais il y a d’autres méthodes d’installation.
  • Installer ensuite Trac avec easy_install trac ou en récupérant l’archive Tarball, la détarrer dans un répertoire puis python setup.py install en se positionnant dans le répertoire trac-* nouvellement créé (Je botte en touche si vous installez Trac avec un .deb/via apt).
  • Redémarrer Apache. Ce point est important. J’ai crisé pendant un quart d’heure devant mon écran à me demander pourquoi trac me servait tantôt les pages en français, tantôt en anglais ^^ — Apparemment, sur certaines instances d’Apache, le trac non localisé répondait à ma requête et sur d’autres, c’est le trac avec la localisation installée qui répondait.
    Cela vaut si on utilise Trac avec le mod_python ou — je suppose — avec le mod_wsgi.

Apt-Proxy et limitation d’accès

Je m’occupe d’une dizaine de serveurs, tous sur debian etch. J’ai décidé d’installer apt-proxy sur l’un d’eux pour rendre plus rapide les mises à jours (les serveurs sont dans la même baie). Ne serait-ce que par principe, ça m’évite également de surcharger inutilement les serveurs debian.

J’ai souhaité limiter l’accès au serveur proxy aux serveurs concernés, tous possédant une IP dans un sous-réseau logique. Je me suis donc tourné vers Netfilter. J’ai créé deux scripts, if-pre-up.sh et if-post-down.sh, que j’ai placés dans /etc/apt-proxy/. Voilà d’abord le script if-pre-up.sh :

#!/bin/sh -e
# Written by bobe

if [ ! "$IFACE" = "eth0" ]; then
        exit 0
fi

iptables -N aptProxy
iptables -A INPUT -i eth0 -p tcp --dport 9999 -j aptProxy
iptables -A aptProxy -s xxx.xxx.xxx.xxx/28 -j ACCEPT
iptables -A aptProxy -j DROP
exit 0

Et le script if-post-down.sh :

#!/bin/sh -e
# Written by bobe

if [ ! "$IFACE" = "eth0" ]; then
        exit 0
fi

iptables -D INPUT -i eth0 -p tcp --dport 9999 -j aptProxy
iptables -F aptProxy
iptables -X aptProxy
exit 0

Il suffit ensuite de donner les droits d’exécution et de créer les liens nécessaires dans /etc/network/ :

# chmod a+x if-pre-up.sh if-post-down.sh
# ln -s /etc/apt-proxy/if-pre-up.sh /etc/network/if-pre-up.d/apt-proxy
# ln -s /etc/apt-proxy/if-post-down.sh /etc/network/if-post-down.d/apt-proxy

Ce billet est aussi l’occasion de ranimer un peu ce blog mourant. Je vais essayer de m’en occuper plus souvent désormais ;-)