Auteur Sujet: IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi  (Lu 2229 fois)

0 Membres et 1 Invité sur ce sujet

alsoares2

  • Abonné Orange Fibre
  • *
  • Messages: 645
  • Roubaix (59) Open Max Fibre 2G/800
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« le: 19 novembre 2022 à 14:45:57 »
Hello,

J'ai quelques petits services qui tournent sur ma Raspberry Pi chez moi connecté à ma Livebox.
Tout est accessible depuis l'extérieur grâce à Nginx Proxy Manager qui va mapper mes noms de domaines sur différents ports.
Mes services tournent tous sous Docker, configurés par un seul fichier docker-compose.yml.

En IPv4, pas de problème tout fonctionne, mais j'aimerais aussi pouvoir configurer IPv6, au moins pour un usage local (et mieux si extérieur aussi).

En regardant sur internet, il semble que Docker soit vraiment pénible à configurer pour IPv6.
Les tutos donnent tous des manières différentes de faire.
Je ne sais pas si j'ai besoin d'avoir la délégation de préfixe IPv6 pour pouvoir y arriver.

Quelle est la manière la plus simple de s'y prendre ?

Je sais qu'il faut activer IPv6 dans le daemon de Docker ici, mais je ne sais pas quel subnet IPv6 mettre dans 'fixed-cidr-v6':
GNU nano 5.4                                                                                /etc/docker/daemon.json *
{
        "ipv6": true,
        "fixed-cidr-v6": "2001:db8:abc1::/64"
}

Mes conteneurs ont bien une IPv6 mais ils n'ont pas accès à internet en V6 (les pings fails)
root@f0acf914ea22:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=7.07 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=6.55 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=7.10 ms
^X^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 6.549/6.906/7.102/0.253 ms
root@f0acf914ea22:/# ping6 google.fr
PING google.fr(par21s22-in-x03.1e100.net (2a00:1450:4007:819::2003)) 56 data bytes
^C
--- google.fr ping statistics ---
17 packets transmitted, 0 received, 100% packet loss, time 16361ms

root@f0acf914ea22:/#


Est-ce que quelqu'un aurait une idée ?

Merci  :)
« Modifié: 19 novembre 2022 à 15:52:42 par alsoares2 »

alsoares2

  • Abonné Orange Fibre
  • *
  • Messages: 645
  • Roubaix (59) Open Max Fibre 2G/800
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #1 le: 19 novembre 2022 à 17:21:53 »
J'ai finalement trouvé une solution:

Il fallait que le flux IPv6 soit routé en retour vers Docker.
Par défaut, ce n'est pas le cas, il faut rajouter ces lignes dans le daemon:
{
"ipv6": true,
"fixed-cidr-v6": "fd00:ffff::/80",
"ip6tables": true,
"experimental": true
}


J'ai également créé mon propre network dans le docker compose sur un autre subnet privé.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 083
  • Paris (75)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #2 le: 19 novembre 2022 à 18:06:35 »
un /80 et du NAT IPv6, double horreur.

C'est bien triste pour IPv6 d'en arriver la a cause des acteurs de l'Internet qui font le strict minimum (notamment les FAI grands public sauf Free)

Masi vu ta config tu n'a pas vraiment le choix.

Cela dit, met plutôt un /64 donc fd00:ffff::/64
et personnalise le un peu plus ca évitera une "collision" éventuelle future:

fdxx:xxxx:xxxx:xxxx::/64 tu donc 14 quadbits de personnalisation.

Idéalement il faudrait faire au hasard ou utiliser la méthode décrite ici: https://www.rfc-editor.org/rfc/rfc4193#section-3.2.2


Si tu veux vraiment faire propre, il faut virer la Livebox, mettre un routeur a la place et déléguer un /64 routable a Docker (Orange fournit un /56 donc 256 x  /64 mais la Livebox n'utilise que le 1er ... quel gâchis).

alsoares2

  • Abonné Orange Fibre
  • *
  • Messages: 645
  • Roubaix (59) Open Max Fibre 2G/800
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #3 le: 19 novembre 2022 à 20:06:32 »
Merci pour tes conseils !

Oui effectivement, c'est vraiment pas la solution la plus propre...

J'ai utilisé un petit script: https://gist.github.com/se35710/6fe9512301781dd12c42da7dc6749ed3 qui suit la méthode que tu cites pour générer un /48 que j'assigne à mon réseau dans le docker-compose.yml: https://github.com/SoaAlex/home-server/blob/master/docker-compose.yml

Pour ce qui est de remplacer la Livebox, ça sera pour plus tard mais c'est dans mes projets

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 268
  • Antibes (06) / Mercury (73)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #4 le: 21 novembre 2022 à 18:10:04 »
Ouais, moi j’ai laissé tomber chez Orange (même avec un routeur perso), pour plusieurs raisons:
  • Le préfixe fourni par Orange n’est théoriquement pas fixe, j’ai pas envie de devoir modifier la config à chaque fois qu’il change, même si c’est qu’une fois tous les 2 ans.
  • Hors de question de faire de la translation de préfixe (ce qui permettrait d’avoir un /64 ULA fixe mappé sur un /64 GUA dynamique), de toute façon mon routeur ne le supporte pas
  • La délégation de préfixe sur mon routeur est inutilisable car le routeur ne met pas à jour sa table de routage après délégation, donc il faut en rajouter une couche avec un protocoles de routage genre ospf pour que ça fonctionne.

squelettemou

  • Abonné Free fibre
  • *
  • Messages: 7
  • Paris XXe (75)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #5 le: 07 avril 2023 à 17:49:37 »
J'exhume ce fil, puisque fièrement équipé d'une Livebox v5 cette dernière prend théoriquement en charge la délégation de préfixe IPv6...

Je dis bien en théorie parce que à croire ce post de x0r sur son blog, cette fonctionnalité ne fait pas vraiment tout ce qu'elle promet...

J'ai configuré mon préfixe dans mon daemon.json, mais ni mon bridge (ni mes autres networks) n'obtiennent d'adresse en IP6. Et encore moins mes containers... (j'ai essayé avec un /64 et ça marche pas non plus)

Du coup au regard de cette nouvelle "fonctionnalité", auriez vous des idées pour rendre la config de docker compatible IPv6 ?


PS: je suis pas franchement une lumière en IPv6  8)

PPS: la livebox a pas vocation à rester, je vais bientôt la remplacer par un Routeur Mikrotik grâce aux valeureuses explorations de GnuByte sur ce sujet !

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 083
  • Paris (75)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #6 le: 07 avril 2023 à 21:25:29 »
 le point de départ c'est de voir si la livebox te donne bien une délégation.

Dans la machine ou y'a docker, essai ceci:

sudo dhclient -v -6 -P eth0(ajuster eth0 en fonction de la situation)
(dhclient => sudo apt install isc-dhcp-client si c'est pas déja installé)

si tu vois une réponse et si l'interface web de la livebox, réseau/IPv6, que tu as posté, montre une ligne de délégation avec l'adresse mac de ta machine c'est que la délégation fonctionne.

A partir de la il faut automatiser tout cela avec des scripts. il y a un exemple ici: https://github.com/wido/docker-ipv6

en gros: il faut configurer dhclient -6 -P ... en auto dans la conf réseau (plusieurs méthodes suivant l'OS).
puis mettre en place un hook script  (script que sera lancé quand on obtient un prefix par délégation) dans le dossier /etc/dhcp/dhclient-enter-hooks.d/
Le script aura pour tache de configurer et relancer le "daemon" docker avec le bon prefix IPv6. On peut faire cela via un fichier comme dans l'exemple.

Je fais bref, si tu as les compétences Linux qu'il faut tu comprendra les infos indiquées dans l'exemple sur github.
Sinon ca va être plus long ;)

ps: il faut aussi activer le routage ipv6 sur la machine (net.ipv6.conf.all.forwarding=1 et net.ipv6.conf.eth0.accept_ra=2).

squelettemou

  • Abonné Free fibre
  • *
  • Messages: 7
  • Paris XXe (75)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #7 le: 08 avril 2023 à 03:11:37 »
Merci pour le tuyau !!

Ca a marché du premier coup  8) Même pas besoin d'installer les paquets...

[user@machinserver ~]$ sudo dhclient -v -6 -P eno1
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on Socket/eno1
Sending on   Socket/eno1
PRC: Soliciting for leases (INIT).
XMT: Forming Solicit, 0 ms elapsed.
XMT:  X-- IA_PD 5b:ef:89:48
XMT:  | X-- Request renew in  +3600
XMT:  | X-- Request rebind in +5400
XMT: Solicit on eno1, interval 1070ms.
RCV: Advertise message on eno1 from fe80::6e3:1aff:fe79:cf50.
RCV:  X-- Preference 255.
RCV:  X-- IA_PD 5b:ef:89:48
RCV:  | X-- starts 1680915976
RCV:  | X-- t1 - renew  +300
RCV:  | X-- t2 - rebind +480
RCV:  | X-- [Options]
RCV:  | | X-- IAPREFIX 2a01:xxxx:xxxx:xxxx::/64
RCV:  | | | X-- Preferred lifetime 600.
RCV:  | | | X-- Max lifetime 86400.
RCV:  X-- Server ID: 00:03:00:01:04:e3:1a:79:cf:50
RCV:  Advertisement immediately selected.
PRC: Selecting best advertised lease.
PRC: Considering best lease.
PRC:  X-- Initial candidate 00:03:00:01:04:e3:1a:79:cf:50 (s: 155, p: 255).
XMT: Forming Request, 0 ms elapsed.
XMT:  X-- IA_PD 5b:ef:89:48
XMT:  | X-- Requested renew  +3600
XMT:  | X-- Requested rebind +5400
XMT:  | | X-- IAPREFIX 2a01:xxxx:xxxx:xxxx::/64
XMT:  | | | X-- Preferred lifetime +7200
XMT:  | | | X-- Max lifetime +7500
XMT:  V IA_PD appended.
XMT: Request on eno1, interval 1020ms.
RCV: Reply message on eno1 from fe80::6e3:1aff:fe79:cf50.
RCV:  X-- Preference 255.
RCV:  X-- IA_PD 5b:ef:89:48
RCV:  | X-- starts 1680915976
RCV:  | X-- t1 - renew  +300
RCV:  | X-- t2 - rebind +480
RCV:  | X-- [Options]
RCV:  | | X-- IAPREFIX 2a01:xxxx:xxxx:xxxx::/64
RCV:  | | | X-- Preferred lifetime 600.
RCV:  | | | X-- Max lifetime 86400.
RCV:  X-- Server ID: 00:03:00:01:04:e3:1a:79:cf:50
PRC: Bound to lease 00:03:00:01:04:e3:1a:79:cf:50.
Prefix BOUND6 old= new=2a01:xxxx:xxxx:xxxx::/64

Maintenant j'ai plus qu'à adapter les scrips pour mon hôte qui est sous RHEL. Mais ça devrait aller, je me débrouille un peu en Linux (Plus qu'en IPv6)  ;D


En revanche, j'ai bien la délégation sur mon hôte, avec mon préfixe configuré dans mon daemon.json, le routage v6 activé (net.ipv6.conf.all.forwarding=1 et net.ipv6.conf.eno1.accept_ra=2 dans /etc/sysctl.d/99-ipv6.conf), mais toujours pas d'iPv6 sur mes networks, ni de ping d'IPv6 vers internet depuis un container (Network is unreachable:(
« Modifié: 08 avril 2023 à 03:33:42 par squelettemou »

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 083
  • Paris (75)
IPv6 avec Docker, Nginx Proxy Manager sur Raspberry Pi
« Réponse #8 le: 10 avril 2023 à 20:22:47 »
il faut check par étapes:
- le serveur hote de docker a t'il recu la route par défaut pour IPv6 avec par exemple:
ip route get 2001:4860:4860::8888
ou
ip -6 route (->la gateway devrait etre l'ipv6 link-local de la livebox)

si ok
l'interface docker a t'elle bien une ipv6 public:
ip -br -6 a show docker0 scope globalsi ok on peut checker l'ipam du bridge par défaut:docker network inspect bridge -f {{.IPAM.Config}}qui doit afficher le /64 obtenu et l'ipv6 de l'interface docker0

si les pings ou le traffic ne passent pas c'est alors peut-etre un filtrage quelque part (ip6tables ou nft) ?
« Modifié: 10 avril 2023 à 21:16:23 par kgersen »