Projet

Général

Profil

Demande #4437

L'interface Web de mumble n'est pas accessible en IPV6

Ajouté par Laurent POUJOULAT il y a presque 4 ans. Mis à jour il y a environ 2 ans.

Statut:
Rejeté
Priorité:
Faible
Assigné à:
Version cible:
Début:
24/04/2020
Echéance:
% réalisé:

0%

Temps estimé:

Description

L'interface Web de mumble n'est pas accessible en IPV6. Toutes les requêtes arrivent en IPV4. Il y a probablement un problème de routage quelque part.
A noter que cela n'affecte que mumble.chapril.org et pas visio.chapril.org.

Cela n'affecte pas le fonctionnement du service.

Historique

#1

Mis à jour par Laurent POUJOULAT il y a presque 4 ans

J'ai investigué un peu sur le sujet et il y a deux raisons empilées (au moins):

La première, c'est simplement que le NGinx de Allo n'écoute pas en IPV6 (!). Pour écouter in V4 et V6, il faut ajouter à la configuration:

listen [::]:80;

à la place de:
listen 80;

Il faut absolument mettre toutes les conf (visio et mumble) dans ce mode, sinon il se passe des choses étranges (mumble renvoie sur visio)

Mais ça ne suffit pas. Bastion transmet l'IP réelle via le proxy protocol. Pour récupérer l'IP réelle en IPV6, il faut donc aussi ajouter aussi:

set_real_ip_from 2a01:4f8:10b:c41::93;

Après ça, on voit bien les connexions en IPV6.

Mais ça ne suffit pas encore. Les logs montrent que l'IP transise par Bastion dans le header X-Real-IP via IPV6 est encore l'IP V4 du client !? La il y a encore un mystère, mais côté Bastion et/ou DNS.

J'ai laissé dans /root/tmp les fichiers de configuration NGinx de mes essais.

#2

Mis à jour par Christian P. Momon il y a presque 4 ans

La première, c'est simplement que le NGinx de Allo n'écoute pas en IPV6 (!).

Ha bah oui, bien vu ! :D

Pour écouter in V4 et V6, il faut ajouter à la configuration:
listen [::]:80;
à la place de:
listen 80;

Alors, pas vraiment « à la place de » mais en même temps :

    listen 80;
    listen [::]:80;

Là, ça devrait être bon :-)

#3

Mis à jour par Laurent POUJOULAT il y a presque 4 ans

  • Statut changé de Nouveau à Confirmé
#4

Mis à jour par Christian P. Momon il y a presque 4 ans

Après analyse, la configuration DNS associait le domaine mumble.chapril.org à l'ipv6 de la vm allo :

=(^-^)=root@dns:/etc/bind# grep -R mumble
zones/masters/chapril.org:mumble          A       88.99.233.240
zones/masters/chapril.org-int:mumble            CNAME   allo.cluster

Donc c'était bien pour le flux 64738 mais pas pour les flux 80 et 443…

#5

Mis à jour par Christian P. Momon il y a presque 4 ans

Un problème connexe à cette configuration bancale d'ipv6 :
  • puisque le domaine avait une ipv6 définie dans le dns alors Letsencrypt cherchait à l'utiliser pour renouveler le certificat ;
  • comme le site web n'était pas accessible alors le renouvellement du certificat HTTPS échouait…

Pour stabiliser la plateforme, j'ai tout remis en ipv4 seulement.

#6

Mis à jour par Christian P. Momon il y a presque 4 ans

  • Statut changé de Confirmé à En cours de traitement
Pour activer ipv6, deux possibilités :
  • nat ipv6 par port :
    • mumble.chapril.org --nat----80--> vm bastion --proxy--> vm allo…,
    • mumble.chapril.org --nat---443--> vm bastion --proxy--> vm allo…,
    • mumble.chapril.org --nat-64738--> vm allo…
    • revient à donner des ipv6 privées aux vm donc un gros changement dans l'infra,
  • utiliser 2 noms de domaines différents (solution suggérer par QGuLL) :
    • mumbleweb.chapril.org -----80--> vm bastion --proxy--> vm allo…,
    • mumbleweb.chapril.org ----443--> vm bastion --proxy--> vm allo…,
    • mumble.chapril.org -----80--> vm allo --302--> mumbleweb.chapril.org --proxy--> vm allo…,
    • mumble.chapril.org ----443--> vm allo --302--> mumbleweb.chapril.org --proxy--> vm allo…,
    • mumble.chapril.org --64738--> vm allo.

Une préférence ? Une autre idée ?

À noter que rester en ipv4 n'est pas nominal car implique que le domaine mumble.chapril.org ne soit pas CNAME de la fip.

#7

Mis à jour par Didier Clermonté il y a plus de 2 ans

  • Statut changé de En cours de traitement à Rejeté
  • Assigné à changé de Christian P. Momon à Didier Clermonté

A réétudier plus tard

#8

Mis à jour par François Poulain il y a environ 2 ans

Une discussion avec quelqu'un qui fait de l'ip v6 m'indique qu'on pourrait avancer sur la question, pour les protocoles non proxyfiés, avec un nat pour changer l'ip de destination.
Ça permettrait d'être congruent entre la logique v6 et la logique v4.

Règle nftables pour réécrire l'IPv6 de destination :

nft add rule ip6 raw prerouting ip6 nexthdr tcp ip6 daddr set fe00::1
tcp dport set 10 notrack

nft add : ajoute une règle
ip6 : domaine IPv6
raw : table raw
prerouting chain prerouting
ip6 nexthdr tcp : protocole TCP
ip6 daddr set fe00::1 : écrase l'IPv6 de destination
dport set 10 : écrase le port de destination
notrack : désactive le suivi de connexion

Source : https://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_%28NAT%29

Formats disponibles : Atom PDF