Je me suis sacrément pris le chou ce matin pour faire marcher correctement mon NAT sur mon nouveau serveur.
J'ai la situation suivante:
HV0 contient trois containers OpenVZ (VZ0, VZ1, VZ2)
VZ0 est un reverse proxy, VZ1 et VZ2 des LNMP (Linux, Nginx, MariaDB, PHP) qui hébergent respectivement site1 et site2
HV0 a donc une règle iptables qui redirige les connexion sur le port 80 vers VZ0:80
Problème:
Impossible d'atteindre site1 depuis VZ2 ou site2 depuis VZ1.
Explication:
C'est du au fait que lors d'une requête (mettons depuis VZ1), les paquets sont envoyés sur l'ip publique de HV0 qui fait la redirection de port correctement. On a donc des paquets dont la source est VZ1 et la destination VZ2.
VZ2 reçoit, traite la requête et envoie la réponse à VZ1. Les paquets de réponse ont pour source VZ2 et destination VZ1.
Mais VZ1 en voyant arriver les paquets de VZ2, n'en fait rien de particulier, il a posé une question à HV0, pas à VZ2, donc il s'attend à une réponse de HV0.
Solution:
Il faut donc qu'au moment de la redirection, HV0 modifie les paquets pour qu'ils indiquent qu'il est la source.
Ainsi, VZ2 répondra à HV0 qui transmettra à VZ1.
Les joies d'iptables ^_^ (et apprendre la nouvelle syntaxe d'nftables ça va être marrant aussi)