• Docker
  • Iptables maison et container docker : récupérer l'IP distante réelle

Bonsoir,

Voilà quelques jours que je cherche à résoudre un problème, mais sans résultat pour le moment. J'utilise Docker et UFW (pas top niveau compatibilité). Ce qui implique de désactiver la gestion iptables native à Docker (--iptables=false) et faire un peu de bidouille pour faire fonctionner le tout.

Actuellement il m'est possible d'ouvrir/fermer mes ports d'entrée avec UFW et ainsi donner ou non l'accès à mes containers. Malheureusement, tout n'est pas parfait, de base mon container nginx reverse voit cette IP lorsqu'on accède à un site : 172.18.0.1 (réseau 172.18.0.0/16 pour les containers)

Dans mon UFW j'ai ceci :

# Don't delete these required lines, otherwise there will be errors
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE # useless
-A POSTROUTING ! -o docker0 -s 172.18.0.0/16 -j MASQUERADE

COMMIT

Si je rajoute ces règles :

-A PREROUTING ! -i docker0 -p tcp --dport 80 -j DNAT --to-destination 172.18.0.2:80
-A PREROUTING ! -i docker0 -p tcp --dport 443 -j DNAT --to-destination 172.18.0.2:443

Mon container nginx reverse (ip = 172.18.0.2) voit les IP distantes, c'est super, c'est ce que je veux... mais... il m'est désormais impossible de faire un reverse sur un autre container sur le port 80 ou 443, raison 504 gateway timeout. Si je comprends bien le paquet boucle sur la machine à cause de ces règles. Bien sûr si je fais un reverse proxy sur un container qui a un serveur web sur le port 3000 ou autre, ça fonctionne nickel.

Est-ce que quelqu'un à une idée, de comment adapter ces règles pour éviter ce bouclage ? Sinon, la seule solution que je vois est de refaire les containers pour qu'ils utilisent un autre port que 80/443... ce qui n'est pas une bonne pratique à mon goüt.

Cordialement,
Aeryax

Bon, après plusieurs soirées perdues, j'ai enfin trouvé ! Je n'ai pas eu le temps de testé entièrement, mais ça m'a l'air bon, ou du moins mieux que ce que j'avais. Bizarrement c'est juste après avoir renoncé et fait mon post ! tsss

Voici ce que pourrais être la solution pour d'éventuels intéressés (à adapter) :

Répondre…