Rediriger la demande vers une adresse IP externe vers localhost (émuler un serveur)

12

J'ai reçu une application (pas de code source) appelant un serveur (IP codé en dur) et attendant une réponse avant de commencer (une sorte de login).

Parce que le serveur est en panne la moitié du temps, je veux créer un serveur factice qui émulera le comportement du serveur officiel.

Mon problème:

Comment puis-je rediriger le trafic vers ma machine locale?

Je veux que toute la demande envoyée à IP wxyz soit redirigée vers localhost (où mon serveur factice fonctionne)

Plus d'informations:

  • mon serveur factice est une solution apache / php.
  • J'ai essayé de modifier l'IP codée en dur dans l'application avec un éditeur hexadécimal, mais certaines sommes de contrôle échouent lorsque je démarre l'application.
  • car l'IP est codée en dur dans l'application, je ne peux pas utiliser le fichier hosts.
  • J'utilise win xp.

connexes: Comment rediriger le trafic vers une IP vers une autre IP sur Windows Server 2008

Loda
la source

Réponses:

8

Ce serait un hack total, mais vous pouvez essayer d'attribuer l'IP du serveur en question comme IP supplémentaire sur votre interface locale, instructions ici

Robert Swisher
la source
Cela a l'air génial! mais je ne peux pas l'essayer maintenant, (mon internet est en panne, je suis connecté à la 3G ..). Je vous donne quelques commentaires à la fin de la semaine prochaine.
Loda
1
C'est vraiment génial! travailler très bien, solution très facile. Merci !
Loda
Doux, content de l'entendre :)
Robert Swisher
1
Précision: l'ajout d'une adresse IP 2sd à ma carte réseau a eu un effet secondaire; toutes les adresses IP du même sous-réseau externe sont redirigées vers ma carte réseau. c'est-à-dire: lors de l'ajout de l'IP 50.51.51.51, l'IP 50.51.51.52 n'est plus accessible. Cela est dû à la route 50.51.51.0 et à la route 50.255.255.255. Solution: ajoutez la route 50.51.51.52 -> passerelle normale.
Loda
le lien est rompu
danilo
2

Eh bien, vous pouvez essayer ce qui suit:

Configurez un itinéraire spécifique pour cette adresse IP, qui utilisera le serveur factice comme passerelle, comme ceci:

route add -host wxyz / 32 gw dummy-server-ip

Pour cela, vous aurez besoin soit d'un accès au routeur principal de votre réseau, soit de le faire sur la machine qui envoie les requêtes. Cela envoie efficacement les paquets TCP avec l'adresse IP wxyz à l'adresse MAC du serveur factice. Alors maintenant, vous devez vous assurer que le serveur factice sait quoi faire avec eux.

Ajoutez ensuite l'adresse IP wxyz comme adresse secondaire au serveur factice.
Enfin, mettez à jour la configuration apache sur le serveur factice pour vous assurer qu'elle écoute également sur l'adresse wxyz et assurez-vous que le vhost sur le serveur factice accepte les demandes entrantes pour l'adresse IP et le nom de domaine.

Veuillez noter que cela ne fonctionnera que s'il n'y a pas d'autres routeurs entre la machine demandeuse et le serveur factice. Et si des pare-feu sont impliqués, ils doivent également être mis à jour.

Wolfgangsz
la source
Merci pour la réponse, ça ressemble exactement à ce que je veux faire. mais j'ai eu du mal à l'implémenter. Je préférerai ne pas toucher le routeur, car la solution doit être exclusive pour ma machine. La commande que vous m'avez mise en exemple ne fonctionne pas sur mon win xp. J'ai également essayé "route add wxyz 127.0.0.1" sans succès. Je n'ai pas de pare-feu / routeur entre l'application et le serveur factice. ils fonctionnent tous les deux sur la même machine. (Mais, j'ai un pare-feu logiciel: kaspersky) J'apprécierai vraiment de l'aide sur la façon de définir cette route.
Loda
1
Il existe une commande de route disponible pour Windows: route ADD wxyz MASK 255.255.255.255 127.0.0.1 Cela redirigera la route vers votre propre machine. Vous devrez peut-être ouvrir le pare-feu pour les demandes entrantes sur l'adresse wxyz.
wolfgangsz
J'ai essayé d'ajouter une route en utilisant cette commande sans succès. je ne sais pas pourquoi.
Loda
"route add 62.1.1.10 mask 255.255.255.255 127.0.0.1" Le message d'erreur indique: "erreur lors de l'ajout de la route: paramètre incorrect" (traduit d'ES)
Loda
Hmm, vous devrez peut-être remplacer 127.0.0.1 par l'adresse IP LAN réelle de cette interface. Je n'ai jamais rien essayé de tel auparavant, il y a donc un peu de conjectures.
wolfgangsz
1

Vous pourriez probablement frapper quelque chose avec iptables. Voici quelque chose que j'ai déjà utilisé mais que je ne fais plus pour vous donner un pied:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 172.16.25.202 -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to 172.16.27.59:8025
-A POSTROUTING -o eth0 -j MASQUERADE 
COMMIT

NB: je l'ai fait il y a longtemps, il peut y avoir des erreurs

La seule chose que je vois qui pourrait être un problème est qu'elle est spécifique à l'interface. Je pense que le eth0 est uniquement pour la partie entrante, donc utiliser une ip sur l'interface lo (127.0.0.1) comme cible pourrait encore fonctionner ...

jj33
la source
1
Ce serait une excellente réponse ... mais il exécute Windows XP.
Jason Berg
Ah! Je pense avoir vu "apache / php" et arrêté de lire. Même après l'avoir signalé, j'ai scanné trois fois avant de le voir. Eh bien, je vais le laisser, peut-être que cela aidera quelqu'un quelque part quelque part.
jj33
Je pense avec Vagrant, busybox et iptables pour créer un VPN sélectif. Je veux pouvoir dire à mon système que seules quelques adresses IP connues appartiennent au VPN afin que le trafic vers un autre endroit ne passe pas par le VPN. Mon idée est d'utiliser un Linux très léger comme busybox pour se connecter au VPN, puis en utilisant iptables, ou un fichier hosts, ou quelque chose de similaire, rediriger les demandes des adresses IP connues vers la VM Vagrant invitée afin qu'elle gère le VPN . Ces règles iptables pourraient m'aider :)
Bruno Finger