[technique] Logs des requêtes http en IPv6 avec Docker

manu chez Z emmanuel.courcelle at zaclys.net
Dim 23 Oct 14:36:40 CEST 2022


Le 23/10/2022 à 13:56, Albert ARIBAUD a écrit :
> Bonjour,
>
> Le dimanche 23 octobre 2022 à 12:37 +0200, manu chez Z via technique a
> écrit :
>> Bonjour
>> Nous (le pic) utilisons une architecture à base de conteneurs docker,
>> avec un reverse-proxy connecté aux ports 80 et 443, qui renvoie les
>> requêtes sur divers conteneurs en fonction du virtual host demandé.
>> Il y a un gros problème avec cette architecture, car les logs du
>> proxy (et donc aussi les logs des conteneurs qui sont derrière)
>> contiennent l'adresse IP source lorsqu'il s'agit d'une requête IPv4,
>> mais l'adresse IPv4 du gateway lorsqu'il s'agit de requêtes IPv6 !
>> Donc nous n'avons pas connaissance de l'adresse IPv6 utilisée. Un
>> exemple avec le cloud du pic, qui repose sur le travail d'oxytanet
>> (mais c'est la même chose avec nos autres services):
>> web_1 | 2022-10-23T10:21:06.535228752Z 172.18.0.2 - -
>> [23/Oct/2022:10:21:06 +0000] "GET /s/xxxxxxxxxxxx HTTP/1.1" 200 7447
>> "-" "curl/7.74.0" "172.18.0.1"
>> C'est très ennuyeux, ne serait-ce que pour des raisons légales. Et
>> c'est de plus en plus ennuyeux, car il y a de plus en plus de
>> requêtes IPv6.
>> J'ai cherché tous les tutos du monde qui parlent de ça, mais je n'ai
>> pas réussi à m'en sortir, même sur une machine de tests rebootable à
>> l'envie. Est-ce que quelqu'un a déjà fait ça ?
>> Merci de votre aide !
> J'ai eu le problème avec NGINX en reverse proxy d'une autre machine,
> mais je pense que c'est la même chose qu'avec des containers.
>
> Ma solution s'est appuyée sur les options
>
>      proxy_pass <URI du serveur>;
>      proxy_set_header Host $host;
>      proxy_set_header X-Forwarded-For $remote_addr;
>
> où "proxy_pass <URI du serveur>" est la directive qui réalise le
> reverse proxy, et les deux "proxy_set_header" sont ce qui permet au
> serveur final de savoir quelle était l'adresse du vrai client.
>
> Comme tu ne précises pas de détails sur ton reverse proxy, ce qui
> précède ne s'applique peut-être pas à ton cas, mais tu dois trouver
> l'équivalent chez Apache et autres.
>
Bonjour

Merci de ta réponse, mais il ne s'agit pas d'un problème de 
configuration du proxy: on voit dans les logs les adresses IPv4, pas les 
adresses IPv6. Si c'était un problème de proxy il se produirait de la 
même manière pour les deux stacks.  Et par ailleurs nous avons le même 
problème sur une machine qui héberge des sites web, où le reverse proxy 
est un nginx (https://hub.docker.com/r/jwilder/nginx-proxy) et sur la 
machine qui héberge le cloud, là il s'agit de l'infra oxytanet à base de 
traefik (cf. https://framagit.org/oxyta.net/docker-atelier).

Il y a les directives dont tu parles dans la conf du proxy nginx mais le 
problème est en amont du proxy: Docker transforme les requêtes IPv6 en 
IPv4, et au passage on perd l'information de l'adresse IPv6. J'ai 
évidemment essayé de jouer avec les options de configuration d'IPv6 dans 
Docker, mais c'est là que je me suis perdu....

Amicalement,

Emmanuel

>> Emmanuel
>> _______________________________________________
>> technique mailing list
>> technique at lists.tetaneutral.net
>> http://lists.tetaneutral.net/listinfo/technique
> Amicalement,
> Albert.
>



Plus d'informations sur la liste de diffusion technique