La plupart des services de streaming et des plateformes sensibles à la conformité échouent à appliquer correctement les restrictions géographiques sur 60 à 80 % des IP résidentielles, selon des audits internes menés chez trois grands CDN. La cause profonde n'est pas une mauvaise base de données IP — c'est un processus de test qui n'exerce jamais les cas limites qui brisent réellement le géorepérage. Les ingénieurs qui traitent le blocage géographique comme une simple correspondance IP-pays construisent un tamis, pas une barrière.
Pourquoi les recherches IP naïves échouent à grande échelle
L'approche standard — interroger MaxMind ou une base de données GeoIP similaire pour country_code — fonctionne pour les IP de datacenter et les grands blocs FAI. Elle échoue de manière catastrophique pour les IP d'opérateurs mobiles qui transitent par une passerelle centrale dans un autre pays, pour les FAI satellite avec des stations au sol dans plusieurs juridictions, et pour toute IP allouée avant le tracé des frontières géopolitiques actuelles. La RFC 8805 définit un format de flux de géolocalisation, mais la plupart des fournisseurs servent encore des données obsolètes ou agrégées. Une étude de 2023 a révélé que 34 % des IP de la base de données RIPE NCC avaient un code pays ne correspondant pas à l'adresse enregistrée du titulaire. Tester avec une seule base de données n'est pas du test — c'est un vœu pieux.
Détection des VPN et proxys : la contournement que vous ne testez pas
Les services de streaming investissent massivement dans les listes noires de VPN, mais ces listes ne valent que ce que vaut le banc d'essai qui les valide. L'erreur courante est de tester depuis un point de terminaison VPN connu (par exemple, le nœud de sortie d'un fournisseur commercial) et de considérer le test comme terminé. Les véritables attaquants changent d'IP toutes les 60 secondes, utilisent des réseaux de proxys résidentiels ou tunnelisent via une IP de sortie d'un fournisseur cloud non encore signalée. Un processus de vérification approprié doit inclure un script qui récupère une liste de proxys ouverts connus, de nœuds de sortie VPN et de relais Tor à partir de flux publics (par exemple, https://check.torproject.org/exit-addresses), puis envoie une requête au point de terminaison géo-restreint de votre service et vérifie le code de réponse. Voici une boucle de test minimale utilisant curl et jq :
#!/bin/bash
# Test geo-restricted endpoint against a list of suspicious IPs
ENDPOINT="https://api.example.com/geo/check"
while IFS= read -r ip; do
result=$(curl -s -o /dev/null -w "%{http_code}" --resolve "api.example.com:443:$ip" "$ENDPOINT")
if [[ "$result" != "403" ]]; then
echo "FAIL: $ip returned $result (expected 403)"
fi
done < /tmp/suspicious_ips.txt
Ce script utilise --resolve pour forcer la connexion via une IP spécifique tout en conservant l'en-tête Host d'origine — une technique qui contourne la plupart des vérifications géo au niveau du CDN. Si votre service renvoie un code 200 ou 302 pour l'une de ces IP, votre géorepérage est cassé.
Lacunes de la géolocalisation IPv6 et IP mobiles qui traversent les frontières
La précision de la géolocalisation IPv6 est inférieure à 50 % dans de nombreuses régions, en particulier en Europe et en Asie où les opérateurs utilisent un seul préfixe /32 pour plusieurs pays. Un téléphone mobile à Strasbourg, en France, peut sembler provenir du réseau central d'un opérateur allemand si celui-ci utilise un point d'ancrage unique. L'en-tête X-Forwarded-For contient souvent l'adresse IPv4 de la passerelle NAT de l'opérateur, et non l'adresse IPv6 de l'utilisateur. Pour tester cela, envoyez des requêtes depuis un appareil de test connecté à un réseau mobile dans une région frontalière (par exemple, Bâle, Suisse ; El Paso, Texas) et comparez le résultat de géolocalisation de votre service avec les coordonnées GPS réelles de l'appareil. Si l'écart dépasse 100 km, votre équipe de conformité a un problème — le RGPD exige que le traitement des données soit lié à la localisation réelle de l'utilisateur, et non à celle de l'opérateur.
Tests de conformité réglementaire au-delà de la vérification IP
Le RGPD et le COPPA ne se soucient pas de votre fournisseur de base de données IP. Ils se soucient de savoir si un utilisateur dans l'UE reçoit un contenu conforme à l'UE et si un utilisateur de moins de 13 ans aux États-Unis est empêché de collecter des données personnelles. Tester les restrictions géographiques pour la conformité signifie que vous devez vérifier que la réponse de votre service — pas seulement le code de statut HTTP — change correctement en fonction de la localisation détectée. Par exemple, un service de streaming qui propose des catalogues différents selon les pays doit s'assurer qu'un utilisateur au Royaume-Uni voit le catalogue britannique, qu'un utilisateur en France voit le catalogue français, et qu'un utilisateur dans un territoire non licencié voit une page « non disponible ». Le test doit inclure la vérification du corps de la réponse pour des chaînes, des cookies et des cibles de redirection spécifiques à la région. Un simple curl avec --header "CF-IPCountry: GB" (si vous utilisez Cloudflare) est un test rapide, mais il ne teste que la couche CDN, pas votre logique applicative. Construisez une suite de tests qui falsifie l'en-tête X-Forwarded-For avec des IP de chaque pays cible, puis analysez la réponse pour un identifiant unique connu (par exemple, un champ JSON "catalog": "uk").
Construire un pipeline QA reproductible
Arrêtez d'exécuter manuellement les tests de restrictions géographiques. Intégrez la vérification dans votre pipeline CI/CD à l'aide d'un outil comme geoiplookup du paquet geoip-bin, combiné à une liste d'IP connues pour être mal localisées dans votre base de données principale. Exécutez le test à chaque déploiement d'une nouvelle règle de géorepérage. Utilisez une approche multi-sources : interrogez MaxMind, IP2Location et une API RIPE NCC gratuite pour chaque IP de test, et faites échouer la build si la majorité des sources sont en désaccord avec la réponse de votre service. La commande ci-dessous compare la décision de votre service avec trois bases de données :
#!/bin/bash
IP="1.2.3.4"
RESPONSE=$(curl -s "https://api.example.com/geo/check?ip=$IP" | jq -r '.country')
MAXMIND=$(geoiplookup "$IP" | awk '{print $4}')
IP2LOC=$(curl -s "https://api.ip2location.com/?ip=$IP&key=test" | jq -r '.country_code')
if [[ "$RESPONSE" != "$MAXMIND" && "$RESPONSE" != "$IP2LOC" ]]; then
echo "WARNING: Geo response differs from majority of databases"
fi
Aucune base de données unique n'est faisant autorité. La seule façon de détecter le taux d'échec de 60 à 80 % est de tester avec des cas limites réels : IP d'opérateurs mobiles, préfixes IPv6 et proxys résidentiels. Tout le reste est un incident de conformité qui n'attend que de se produire.