Demande #4437
closedL'interface Web de mumble n'est pas accessible en IPV6
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.
Updated by Laurent POUJOULAT over 4 years ago
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.
Updated by Christian P. Momon over 4 years ago
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 :-)
Updated by Laurent POUJOULAT over 4 years ago
- Status changed from Nouveau to Confirmé
Updated by Christian P. Momon over 4 years ago
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…
Updated by Christian P. Momon over 4 years ago
- 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.
Updated by Christian P. Momon over 4 years ago
- Status changed from Confirmé to 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.
Updated by Didier Clermonté about 3 years ago
- Status changed from En cours de traitement to Rejeté
- Assignee changed from Christian P. Momon to Didier Clermonté
A réétudier plus tard
Updated by François Poulain almost 3 years ago
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