Statistiques d'accès au site en IPv6
Le mois dernier, j'ai observé que bien que mon serveur Web possédât une adresse IPv6, aucun navigateur Web ne s'y connectait via ce protocole. J'avais tout simplement oublié d'associer un enregistrement IPv6 address record au nom de mon domaine dans la zone DNS.
Un mois plus tard, la lecture des logs de mon serveur Web confirme qu'une partie des navigateurs Web s'y connectent en IPv6 et je peux mesurer dans quelle proportion.
Dites AAAA
Sur Internet, le service DNS associe les noms de domaine Internet avec leurs adresses IP.
La plupart des sites Internet déclarent des adresses IPv4 dans leur zone DNS à travers des enregistrements DNS A (A pour Adresse).
Conscients de l'épuisement des adresses IPv4, de plus en plus de sites Internet sont aussi accessibles en IPv6. Pour permettre aux navigateurs Web de résoudre leur nom de domaine en adresses IPv6, ils ajoutent des enregistrements DNS AAAA dans leur zone DNS. Les quatre "A" dénotent le fait qu'une adresse IPv6 (128 bits) est quatre fois plus longue qu'une adresse IPv4 (32 bits).
Sous Linux, l'outil dig permet d'effectuer des requêtes DNS en ligne de commande et donc de vérifier si un site Internet déclare être accessible en IPv4 et en IPv6.
Pour afficher l'adresse IPv4 associée à un nom de domaine :
$ dig +short enodev.fr A 159.69.222.76
Et pour obtenir l'adresse IPv6 éventuellement associée :
$ dig +short enodev.fr AAAA 2a01:4f8:1c1e:b2d0::1
Qui AAAAccède ?
Le fichier journal des accès du serveur HTTP Apache enregistre les requêtes qu'il a traitées.
Dans le format par défaut du fichier journal des accès, l'adresse IP du client figure au début de chaque ligne.
L'extrait de journal suivant présente une requête HTTP effectuée par un navigateur Web connecté en IPv4 suivie d'une requête formulée par un autre navigateur Web connecté en IPv6 :
24.35.90.123 - - [01/Oct/2023:00:03:20 +0200] "GET /posts/rusticity-convert-an-integer-to-an-enum.html HTTP/2.0" 200 6966 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" 2a02:8308:285:e800:9807:3eea:1a93:1234 - - [01/Oct/2023:00:03:30 +0200] "GET /posts/rusticity-convert-an-integer-to-an-enum.html HTTP/2.0" 200 6966 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43"
Analyse des accès avec Angle-grinder
Angle-grinder est un outil en ligne de commande qui permet d'interpréter des données en effectuant des opérations de tri, de sélection, de groupement, ou des calculs. Angle-grinder est notamment capable d'interpréter directement un fichier journal des accès d'Apache. Ceci va nous aider à mesurer dans quelle proportion les navigateurs Web se connectent au site en IPv6.
Voici une façon de compter le nombre d'adresse IP différentes qui se sont connectées au serveur HTTP avec Angle-grinder:
$ agrind -f apache.log "* | apache | count_distinct(ip) as unique_ipaddrs" unique_ipaddrs ---------------------- 5326
Les pipelines, séparés par le caractère |
, sont composés ainsi :
- Toutes les entrées du fichier journal sont sélectionnées avec le
caractère
*
. - Le parser pour le format du journal d'Apache interprète les champs.
- L'opérateur d'agrégation
count_distinct()
est appelé sur le champ nomméip
. La colonne de résultat est nomméeunique_ipaddrs
.
Pour dénombrer le nombre d'adresse IPv6 différentes, il suffit
d'ajouter un filtre qui sélectionne les adresses IP qui contiennent le
séparateur :
.
$ agrind -f apache.log "* | apache | contains(ip, ':') as is_ipv6 | where is_ipv6 | count_distinct(ip) as unique_ipv6addrs" unique_ipv6addrs ------------------------ 500
9,4 % des navigateurs Web se connectent donc au site en IPv6. La part des requêtes HTTP effectuées en IPv6 est assez proche – 10 % – comme on peut le constater avec la requête suivante :
$ agrind -f a.log "* | apache | contains(ip, ':') as is_ipv6 | if(is_ipv6, 1, 0) as ipv6_req | avg(ipv6_req) as ipv6_req_ratio" ipv6_req_ratio ---------------------- 0.10
Il sera intéressant de suivre la progression du ratio des accès réalisés en IPv6 dans le temps.