Demande #4437
ferméL'interface Web de mumble n'est pas accessible en IPV6
Ajouté par Laurent POUJOULAT il y a plus de 4 ans. Mis à jour il y a presque 3 ans.
0%
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.
Mis à jour par Laurent POUJOULAT il y a plus de 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.
Mis à jour par Christian P. Momon il y a plus de 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 :-)
Mis à jour par Laurent POUJOULAT il y a plus de 4 ans
- Statut changé de Nouveau à Confirmé
Mis à jour par Christian P. Momon il y a plus de 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…
Mis à jour par Christian P. Momon il y a plus de 4 ans
- 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.
Mis à jour par Christian P. Momon il y a plus de 4 ans
- Statut changé de Confirmé à En cours de traitement
- 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.
Mis à jour par Didier Clermonté il y a presque 3 ans
- Statut changé de En cours de traitement à Rejeté
- Assigné à changé de Christian P. Momon à Didier Clermonté
A réétudier plus tard
Mis à jour par François Poulain il y a presque 3 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