Fichier hosts spécifique à une connexion

Bonjour à tous !

J’ai un problème de réseau avec un serveur auto hébergé:
Visiblement mon routeur ne sait pas rediriger une requête venant du réseau interne vers son ip publique vers mon serveur qui se trouve également sur le réseau interne.
serveur 192.168.0.100 ________
client A 192.168.0.10 ________| ____ 192.168.0.1 routeur W.X.Y.Z -----internet---- A.B.C.D client B

Ainsi le client B peut accéder à un site web dont la résolution dns donne W.X.Y.Z grâce au port forwarding mais pas le client A
Pour que le client A puisse y accéder il faut ajouter le nom de domaine du site web en dur dans son fichier hosts avec l’adresse 192.168.0.100. Le problème c’est que si le client A se connecte depuis un autre réseau (et se retrouve donc dans le cas client B) ça ne marche plus. Il faut donc manipuler le fichier hosts à chaque fois.
Existe-t-il un moyen d’automatiser la manip ou de configurer un fichier hosts uniquement quand client A se connecte à se routeur?

Merci !

C’est assez courant. Soit le routeur ne route pas le paquet, soit il ne fait que la moitié du travail : il change l’adresse IP destination (suffisant pour les paquets venant de l’extérieur) mais pas l’adresse IP source (nécessaire pour les paquets venant de l’intérieur, afin que le serveur renvoie les paquets de réponse au routeur et pas directement au client).

A vérifier avec une capture de trafic sur le serveur.

Dans le premier cas, la seule solution relativement “propre” est d’agir au niveau de la résolution de nom. Le fichier hosts ne fonctionne que dans le réseau local. Voir si le routeur a un serveur DNS qui peut faire cette résolution, sinon mettre en place un serveur DNS et configurer le serveur DHCP du routeur pour annoncer l’adresse IP de ce serveur DNS.

Dans le second cas, on peut bidouiller le routage au niveau du serveur cible : lorsqu’il reçoit un paquet de requête en provenance de l’adresse MAC du routeur, il renvoie les paquets de réponse au routeur même si c’est une adresse du réseau local.

Edit : L’utilisation de l’adresse MAC source pour le routage avancé nécessite la mise en place de plusieurs règles iptables. Une autre méthode ne nécessitant pas iptables consiste à attribuer une adresse IP secondaire au serveur et à faire la redirection de port du routeur vers cette adresse secondaire. Ainsi le routage avancé pourra se baser uniquement sur l’adresse IP source des paquets émis : si c’est l’adresse secondaire, le paquet doit être routé vers le routeur.

Salut,
Merci pour ta réponse !
J’ai du mal à comprendre le second cas. Pourquoi le routeur devrait-il changer l’ip source des paquets?

Parce que sinon le serveur envoie par défaut (sans routage avancé) les paquets de réponse directement au client dont l’adresse IP est dans le même sous-réseau que lui. Le client reçoit donc un paquet provenant de l’adresse privée du serveur qu’il ne reconnaît pas comme une réponse au paquet de requête qu’il a envoyé à l’adresse publique. Les paquets de réponse doivent repasser par le routeur pour que ce dernier puisse changer l’adresse source qui sera vue par le client.