détourner une adresse IP

A mon travail, pour des raisons légitimes, j'ai eut besoin de détourer une IP d'un host "public" vers un serveur interne.

Mes utilisateurs doivent utiliser une resource interne qui est aussi accessible via un gateway externe, mais pas sur la même adresse IP, en effet un poste LAN n'a pas accès directement a Internet (il n'est même pas NATé).

La source de ce besoin est un problème de firewall, je ne veux pas que, pour utiliser un serveur particulier "toto.domain.com", le traffic de mes utilisateurs traverse mon firewall pour sortir vers le serveur en question, y génère une charge élevée, et re-rentre dans le système via une sorte de loop-back.

Mon domain.com n'est pas géré en interne, mais chez un prestataire externe; donc difficile pour moi d'en avoir une copie toujours à jour, et de maintenir un "faux" domaine en interne, de plus je n'ai en fait aucune envie de maintenir "deux" domain.com.

Description

Mes utilisateurs doivent accéder à une resource local "toto.domain.local" depuis le réseau interne; mais aussi depuis le réseau externe "toto.domain.com".

Evidement, il arrive souvent qu'un utilisateur se trompe de coté (essaye toto.domain.com sur son PC corporate et qu'il reçoit un Time out) où l'inverse; le résultat est le même, l'utilisateur ne sait pas se connecter, il est frusté, il s'énerve et ne comprends pas pourquoi ca ne marche pas, et surtout il ne pense pas plus loin, j'ai bien essayé des les éduquer... Sans succès, cela leurs demande bien trop d'effort de réfléchir.

Je ne suis pas pour le nivellement par le bas, mais là, j'abandonne à la facilité, je vais trouver une solution facile et élégante, ne pouvant pas "mirrorer presque tout le domain.com sur un DNS "local" (et ne voulant pas gérer les deux domaines avec le risque de confondre les domaines interne et externe, il me fallait ruser.

Solution 1

Ma première idée, a été d'autoriser les utilisateurs "LAN" a sortir pour re-renter ensuite... (Mais j'ai changé d'avis très vite).

D'abord c'est horrible comme construction, ensuite, c'est une faille de sécurité non négligeable, puisque les utilsateurs pourront sortir (et envidement rentrer) pour cette adresse (ce qui veut dire aussi que, potentiellement, un hacker pourrait spoofer mes IPs et tromper le Firewall en entrée).

Pour ajouter au désinteret de cette idée, cela induit une charge CPU sur les firewalls et les routers qui n'est pas négligeable. Tout cela parceque les utilisateurs sont "idiots"...

Idéalement il faudrait que le PC prenne l'IP "toto.domain.local" quand on tape "toto.domain.com"; dans mon cas c'est assez facile sur un PC de changer le fichier hosts du PC LAN, mais je vois plusieurs inconveniant a cela:

  • A l'exterieur du LAN, un portable continuera a chercher l'IP "toto.domain.local" en lieu et place du "toto.domain.com"
  • Quand on n'a que un ou  deux PC c'est pas un problème, mais 200-500 ou plus ca devient l'enfer à déployer
  • En cas de modification de l'IP du serveur, il faut TOUT refaire sur tout les PC

En fait, s'il est relativement facile de faire cela chez soi via le fichier hosts sur quelques PC avec des gens "compréhensifs" comme peut l'être la famille; c'est quasi impossible sur un réseau complexe et/ou avec des DNS Windows 2008R2.

J'ai donc rejeté cette Solution

Solution 2

J'ai donc imaginé de mettre en place ce fameux fichier hosts sur mes DNS serveurs, sauf que les DNS serveur de Windows 2008 se foutent pas mal du fichier hosts pour faire leur boulot, il se basent sur les zones définies et, à défaut, sur les forwarder.

J'ai essayé de faire une zone secondaire pour mon domain.com, mais là c'est devenu l'enfer pour d'autres IP/serveurs... car les A/CNAME/MX records de domaine n'existent pas dans mon "faux" domain.com... ce qui produit un effet "server not found" très dégueulasse...

J'ai tenté la zone "stub" sans succès... puis le trait de génie:

Créer une zone primary toto.domain.com, avec un record A sans nom qui pointe vers mon serveur toto.domain.local.

Cerise sur le gateau, je peux créer des zones secondaires sur tous les DNS serveurs internes qui se répliquent sur ce serveur maître.

Et là, O miracle, les PC dans le LAN résolvent via leurs serveurs normaux (fournis par DHCP) la bonne adresse INLAN; et hors LAN, ils resolvent bien via les serveurs de leurs providers l'adresse publique:

Bien sur cela fonctionne aussi pour détourner, dans votre LAN, n'importe quelle adresse IP (et donc url tapée dans un browser) vers l'un de vos serveurs, je me suis beaucoup amusé à détourner facebook.com vers un serveur apache qui affichait ce texte:

 

LA CIA écoute ce que vous écrivez sur ce site.

Après analyse des statisques de connections, la CIA vous informe que votre quota Facebook est dépassé.

 

La tête et la réaction des utilisateurs visés fut un grand moment de rigolade en somme.

I fallait que je me défoule sur les responsables de mon calvaire.Cool