Comment configurer les outils pour utiliser IPv6 sur un VPS Linux

De Get Docs
Aller à :navigation, rechercher

Introduction

IPv6 est la version la plus récente du protocole IP sur laquelle tout Internet s'appuie pour se connecter à d'autres emplacements (le protocole IP est un peu redondant car IP signifie protocole Internet, mais nous l'utiliserons car il est facile). Alors que l'IPv4 est toujours utilisé dans de nombreuses régions du monde, l'espace d'adressage IPv4 est consommé à un rythme rapide et il n'est pas assez grand pour soutenir le déploiement rapide d'appareils prêts pour Internet.

IPv6 cherche à résoudre ces problèmes. En plus d'apporter des améliorations générales au protocole, l'avantage le plus évident de l'utilisation des adresses IPv6 est qu'il dispose d'un espace d'adressage beaucoup plus grand. Alors qu'IPv4 autorisait 2^32 adresses (dont certaines étaient réservées à des fins particulières), l'espace d'adressage IPv6 autorise 2^128 adresses, ce qui représente une augmentation incroyable.

Bien qu'IPv6 ouvre de nombreuses opportunités et résolve de nombreux problèmes de longue date, il nécessite un léger ajustement de certaines de vos configurations réseau de routine si vous avez l'habitude d'utiliser IPv4 exclusivement. Dans ce guide, nous parlerons de certains des homologues IPv6 de certains outils et utilitaires IPv4 populaires et expliquerons comment configurer certains services populaires pour utiliser IPv6.

Diagnostics triviaux du réseau avec IPv6

Certains des utilitaires les plus simples utilisés pour diagnostiquer les problèmes de réseau ont été créés avec IPv4 à l'esprit. Pour résoudre ce problème, nous pouvons utiliser leurs cousins IPv6 lorsque nous souhaitons gérer le trafic IPv6.

Tout d'abord, pour voir vos adresses IPv6 actuellement configurées pour votre serveur, vous pouvez utiliser les outils iproute2 pour vous montrer les adresses actuellement configurées :

ip -6 addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2400:6180:0:d0::41f/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::601:15ff:fe43:b201/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::601:15ff:fe43:b202/64 scope link 
       valid_lft forever preferred_lft forever

Pour imprimer la table de routage IPv6, vous pouvez utiliser netstat en tapant quelque chose comme ceci :

netstat -A inet6 -rn

Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2400:6180:0:d0::/64            ::                         U    256 0     1 eth0
fe80::/64                      ::                         U    256 0     0 eth1
fe80::/64                      ::                         U    256 0     0 eth0
::/0                           2400:6180:0:d0::1          UG   1024 0     0 eth0
::/0                           ::                         !n   -1  1    90 lo
::1/128                        ::                         Un   0   1    20 lo
2400:6180:0:d0::41f/128        ::                         Un   0   1    86 lo
fe80::601:15ff:fe43:b201/128   ::                         Un   0   1    75 lo
fe80::601:15ff:fe43:b202/128   ::                         Un   0   1     0 lo
ff00::/8                       ::                         U    256 0     0 eth1
ff00::/8                       ::                         U    256 0     0 eth0
::/0                           ::                         !n   -1  1    90 lo

Si vous préférez les outils iproute2, vous pouvez obtenir des informations similaires en tapant :

ip -6 route show

2400:6180:0:d0::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2400:6180:0:d0::1 dev eth0  metric 1024 

Maintenant que vous savez comment obtenir certaines de vos propres informations IPv6, apprenons un peu comment utiliser certains outils qui fonctionnent avec IPv6.

La commande omniprésente ping est en fait spécifique à IPv4. La version IPv6 de la commande, qui fonctionne exactement de la même manière mais pour les adresses IPv6, est nommée sans surprise ping6. Cela cinglera l'interface de bouclage locale :

ping6 -c 3 ::1

PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.022 ms

--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.021/0.023/0.028/0.006 ms

Comme vous pouvez le voir, cela fonctionne exactement comme prévu, la seule différence étant la version du protocole utilisée pour l'adressage.

traceroute est un autre outil sur lequel vous pouvez compter. Il existe également un équivalent IPv6 disponible :

traceroute6 google.com

traceroute to google.com (2404:6800:4003:803::1006) from 2400:6180:0:d0::41f, 30 hops max, 24 byte packets
 1  2400:6180:0:d0:ffff:ffff:ffff:fff1 (2400:6180:0:d0:ffff:ffff:ffff:fff1)  0.993 ms  1.034 ms  0.791 ms
 2  2400:6180::501 (2400:6180::501)  0.613 ms  0.636 ms  0.557 ms
 3  2400:6180::302 (2400:6180::302)  0.604 ms  0.506 ms  0.561 ms
 4  10gigabitethernet1-1.core1.sin1.he.net (2001:de8:4::6939:1)  6.21 ms  10.869 ms  1.249 ms
 5  15169.sgw.equinix.com (2001:de8:4::1:5169:1)  1.522 ms  1.205 ms  1.165 ms
 6  2001:4860::1:0:337f (2001:4860::1:0:337f)  2.131 ms  2.164 ms  2.109 ms
 7  2001:4860:0:1::523 (2001:4860:0:1::523)  2.266 ms  2.18 ms  2.02 ms
 8  2404:6800:8000:1c::8 (2404:6800:8000:1c::8)  1.741 ms  1.846 ms  1.895 ms

Vous connaissez peut-être la commande tracepath. Cela suit l'exemple des autres commandes pour la version IPv6 :

tracepath6 ::1

 1?: [LOCALHOST]                        0.045ms pmtu 65536
 1:  ip6-localhost                                         0.189ms reached
 1:  ip6-localhost                                         0.110ms reached
     Resume: pmtu 65536 hops 1 back 64

Si vous avez besoin de surveiller le trafic entrant dans votre machine, le programme tcpdump est souvent utilisé. Nous pouvons faire en sorte que cet utilitaire affiche uniquement notre trafic IPv6 en le filtrant avec l'expression ip6 or proto ipv6 après nos options.

Par exemple, nous pouvons facilement mesurer le trafic IPv6 à flux rapide en demandant à l'outil de ne capturer que les informations qui nous intéressent. Nous pouvons utiliser cette commande telle qu'elle est extraite de ici pour ne rassembler qu'un résumé des informations afin d'éviter de retarder la sortie :

tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6

Vérification des informations DNS IPv6

Vous pouvez facilement vérifier les informations DNS de vos domaines en utilisant les outils typiques. La principale différence est que vous demanderez probablement des enregistrements AAAA, qui sont utilisés pour les adresses IPv6 au lieu des enregistrements A, qui ne sont utilisés que pour le mappage IPv4.

Pour récupérer un enregistrement d'adresse IPv6 pour un domaine, vous pouvez simplement demander l'enregistrement AAAA. Avec la commande host, vous pouvez le faire comme ceci :

host -t AAAA google.com

google.com has IPv6 address 2404:6800:4003:803::1004

Si vous préférez utiliser dig, vous pouvez obtenir des résultats similaires en utilisant cette syntaxe :

dig google.com AAAA

; <<>> DiG 9.8.1-P1 <<>> google.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14826
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.            IN  AAAA

;; ANSWER SECTION:
google.com.     299 IN  AAAA    2404:6800:4003:803::1006

;; Query time: 5 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Tue Apr  1 13:59:23 2014
;; MSG SIZE  rcvd: 56

Comme vous pouvez le voir, vérifier que votre DNS se résout correctement pour vos domaines est tout aussi simple lorsque vous travaillez avec des adresses IPv6.

Services réseau avec IPv6

La plupart de vos services réseau courants doivent pouvoir gérer le trafic IPv6. Parfois, ils nécessitent des drapeaux ou une syntaxe spéciaux, et d'autres fois, ils fournissent une implémentation alternative spécifiquement pour IPv6.

Configuration SSH

Pour SSH, le démon peut être configuré pour écouter une adresse IPv6. Ceci est contrôlé dans le fichier de configuration que vous pouvez ouvrir avec :

sudo nano /etc/ssh/sshd_config

Le ListenAddress spécifie à quelle adresse le démon SSH se liera. Pour les adresses IPv4, cela ressemble à ceci :

ListenAddress 111.111.111.111:22

Cela écoute l'adresse IPv4 111.111.111.111 sur le port 22. Pour une adresse IPv6, vous pouvez faire de même en plaçant l'adresse entre crochets :

ListenAddress [1341:8954:a389:33:ba33::1]:22

Cela indique au démon SSH d'écouter l'adresse 1341:8954:a389:33:ba33::1 sur le port 22. Vous pouvez lui dire d'écouter toutes les adresses IPv6 disponibles en tapant :

ListenAddress ::

N'oubliez pas de recharger le démon après avoir apporté des modifications :

sudo service ssh restart

Côté client, si le démon auquel vous vous connectez est configuré pour écouter en utilisant IPv4 et IPv6, vous pouvez forcer le client à utiliser IPv6 uniquement en utilisant l'indicateur -6, comme ceci :

ssh -6 [email protected]

Configuration du serveur Web

Comme pour le démon SSH, les serveurs Web doivent également être configurés pour écouter les adresses IPv6.

Dans Apache, vous pouvez configurer le serveur pour répondre aux requêtes sur une certaine adresse IPv6 en utilisant cette syntaxe :

Listen [1341:8954:a389:33:ba33::1]:80

Cela indique au serveur d'écouter cette adresse spécifique sur le port 80. Nous pouvons combiner cela avec une adresse IPv4 pour permettre plus de flexibilité comme ceci :

Listen 111.111.111.111:80
Listen [1341:8954:a389:33:ba33::1]:80

En pratique, si vous souhaitez écouter les connexions sur toutes les interfaces dans tous les protocoles sur le port 80, vous pouvez simplement utiliser :

Listen 80

Au niveau de l'hôte virtuel, vous pouvez également spécifier une adresse IPv6. Ici, vous pouvez voir qu'il est possible de configurer un hôte virtuel pour qu'il corresponde à la fois à une adresse IPv4 et à une adresse IPv6 :

<VirtualHost 111.111.111.111:80, [1341:8954:a389:33:ba33::1]:80>
    . . .
</VirtualHost>

N'oubliez pas de redémarrer le service pour effectuer les modifications :

sudo service apache2 restart

Si vous préférez utiliser Nginx comme serveur Web, nous pouvons implémenter des configurations similaires. Pour la directive listen, nous pouvons l'utiliser pour le trafic IPv6 :

listen [1341:8954:a389:33:ba33::1]:80;

Sous Linux, cela active également le trafic IPv4 sur le port 80 car il mappe automatiquement les requêtes IPv4 à l'adresse IPv6. Cela vous empêche en fait de spécifier une adresse IPv6 et une adresse IPv4 séparément comme ceci :

listen [1341:8954:a389:33:ba33::1]:80;
listen 111.111.111.111:80;

Cela entraînera une erreur indiquant que le port est déjà lié à un autre service. Si vous souhaitez utiliser des directives séparées comme celle-ci, vous devez désactiver cette fonctionnalité en utilisant sysctl comme ceci :

sysctl -w net.ipv6.bindv6only=1

Vous pouvez vous assurer que cela est automatiquement appliqué au démarrage en l'ajoutant à /etc/sysctl.conf :

sudo nano /etc/sysctl.conf

. . .
net.ipv6.bindv6only=1

Ensuite, vous pouvez utiliser une configuration similaire à celle qui échouait auparavant en ajoutant le drapeau ipv6only=on à la directive d'écoute IPv6 :

listen [1341:8954:a389:33:ba33::1]:80 ipv6only=on;
listen 111.111.111.111:80;

Encore une fois, redémarrez Nginx pour apporter les modifications :

sudo service nginx restart

Configuration du pare-feu

Si vous avez l'habitude de configurer vos règles de pare-feu à l'aide d'interfaces de configuration de netfilter comme iptables, vous serez heureux de savoir qu'il existe un outil équivalent appelé ip6tables.

Nous avons un guide ici sur comment configurer iptables pour Ubuntu ici.

Pour la variante IPv6, vous pouvez simplement remplacer la commande par ip6tables pour gérer les règles de filtrage de paquets IPv6. Par exemple, pour lister les règles IPv6, vous pouvez taper :

sudo ip6tables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Si vous utilisez l'outil ufw, alors félicitations, vous avez déjà terminé ! L'outil ufw configure les deux piles en même temps, sauf indication contraire. Vous devrez peut-être ajouter des règles pour vos adresses IPv6 spécifiques, mais vous n'aurez pas à utiliser un autre outil.

Vous pouvez en savoir plus sur comment utiliser ufw ici.

Configuration des wrappers TCP

Si vous utilisez des wrappers TCP pour contrôler l'accès à votre serveur via les fichiers /etc/hosts.allow et /etc/hosts.deny, vous pouvez simplement utiliser la syntaxe IPv6 pour faire correspondre certaines règles source.

Par exemple, vous pouvez autoriser uniquement une adresse IPv4 et une adresse IPv6 à se connecter via SSH en tapant éditant le fichier /etc/hosts.allow et en ajoutant ceci :

sudo nano /etc/hosts.allow

. . .
sshd: 111.111.0.0/255.255.254.0, [1341:8954:a389:33::]/64

Comme vous pouvez le voir, il est très facile d'adapter vos règles de wrapper TCP actuelles pour les appliquer aux adresses IPv6. Vous pouvez en savoir plus sur comment formater les adresses IP et les sous-réseaux ici.

Conclusion

J'espère que vous réalisez maintenant que la transition vers IPv6 ou l'utilisation d'IPv6 en plus d'IPv4 est un processus assez simple.

Vous devrez étudier spécifiquement tous les services réseau que vous utilisez pour savoir s'il y a des modifications de configuration supplémentaires qui sont nécessaires pour utiliser correctement vos ressources IPv6. Cependant, vous devriez maintenant vous sentir plus à l'aise avec IPv6 avec vos utilitaires et services les plus élémentaires.

Par Justin Ellingwood