Redirecionar solicitação para um IP externo para o host local (emular um servidor)

12

Eu tenho um aplicativo (sem código fonte) chamando um servidor (IP codificado) e esperando uma resposta antes de iniciar (um tipo de login).

Como o servidor está inativo na metade do tempo, desejo criar um servidor fictício que simule o comportamento do servidor oficial.

Meu problema:

Como redirecionar o tráfego para minha máquina local?

Quero que toda a solicitação enviada para o IP wxyz seja roteada novamente para o localhost (onde meu servidor fictício está sendo executado)

Mais informações:

  • meu servidor fictício é uma solução apache / php.
  • Tentei editar o IP codificado no aplicativo com um editor hexadecimal, mas algumas somas de verificação falham quando inicio o aplicativo.
  • Como o IP está codificado no aplicativo, não consigo usar o arquivo hosts.
  • Estou executando o win xp.

relacionados: Como redirecionar o tráfego para um IP para outro IP no Windows Server 2008

Loda
fonte

Respostas:

8

Isso seria um hack total, mas você pode tentar atribuir o IP do servidor em questão como um IP adicional na interface local, instruções aqui

Robert Swisher
fonte
Isso parece ótimo! mas não posso tentar agora (minha internet está inoperante, estou conectando 3G). Dou alguns comentários no final da próxima semana.
Loda
1
Isso é demais! trabalhando muito bem, solução muito fácil. obrigado !
Loda
Doce, feliz em ouvir isso :)
Robert Swisher
1
Precisão: adicionar um IP 2sd à minha NIC teve um efeito colateral; todos os IPs na mesma sub-rede externa são redirecionados para minha placa de rede. ou seja: ao adicionar IP 50.51.51.51, o IP 50.51.51.52 não está mais acessível. Isso é causado pela rota 50.51.51.0 e pela rota 50.255.255.255. Solução alternativa: adicione a rota 50.51.51.52 -> gateway normal.
Loda
a ligação é interrompida
danilo
2

Bem, você pode tentar o seguinte:

Configure uma rota específica para esse endereço IP, que usará o servidor fictício como gateway, assim:

rota adicionar -host wxyz / 32 gw dummy-server-ip

Para isso, você precisará acessar o roteador principal da sua rede ou precisará fazê-lo na máquina que está enviando as solicitações. Isso efetivamente envia os pacotes TCP com o endereço IP wxyz para o endereço MAC do servidor fictício. Portanto, agora você precisa garantir que o servidor fictício saiba o que fazer com eles.

Em seguida, adicione o endereço IP do wxyz como um endereço secundário ao servidor fictício.
Por fim, atualize a configuração do apache no servidor fictício para garantir que ele também escute no endereço wxyz e verifique se o vhost no servidor fictício aceita solicitações de entrada para o endereço IP e o nome do domínio.

Observe que isso só funcionará se não houver outros roteadores entre a máquina solicitante e o servidor fictício. E se houver algum firewall envolvido, eles também precisam ser atualizados.

wolfgangsz
fonte
Obrigado pela resposta, é exatamente igual ao que eu quero fazer. mas, eu tenho problemas para implementá-lo. Prefiro não tocar no roteador, também porque a solução deve ser exclusiva para minha máquina. O comando que você me colocou como exemplo não funciona no meu win xp. Eu também tentei "route add wxyz 127.0.0.1" sem sucesso. Não tenho firewall / roteador entre o aplicativo e o servidor fictício. ambos correm na mesma máquina. (Mas, eu tenho um firewall de software: kaspersky) Eu realmente aprecio alguma ajuda sobre como definir essa rota.
Loda
1
Existe um comando de rota disponível para Windows: route ADD wxyz MASK 255.255.255.255 127.0.0.1 Isso direcionará a rota de volta para sua própria máquina. Pode ser necessário abrir o firewall para solicitações recebidas no endereço wxyz.
wolfgangsz
Eu tentei adicionar uma rota usando este comando sem sucesso. não sei porque.
Loda
"route add 62.1.1.10 mask 255.255.255.255 127.0.0.1" A mensagem de erro diz: "erro ao adicionar a rota: parâmetro incorreto" (traduzido do ES)
Loda 20/9
Hmm, talvez você precise substituir 127.0.0.1 pelo endereço IP da LAN atual dessa interface. Eu nunca tentei algo assim antes, então há um pouco de adivinhação envolvida.
wolfgangsz
1

Você provavelmente poderia bater algo junto com o iptables. Aqui está uma coisa que eu usei uma vez, mas não estou mais fazendo para ajudá-lo:

*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: Eu fiz isso há muito tempo, pode haver erros lá

A única coisa que vejo que pode ser um problema é que é específico da interface. Eu acho que o eth0 é apenas para a parte de entrada, portanto, usando um ip na interface lo (127.0.0.1) como o destino ainda pode funcionar ...

jj33
fonte
1
Seria uma ótima resposta ... mas ele está executando o Windows XP.
Jason Berg
Doh! Eu acho que vi "apache / php" e parei de ler. Mesmo depois que você apontou, eu digitalizei três vezes antes de ver. Bem, vou deixar, talvez ajude alguém em algum lugar.
Jj33
Estou pensando com o Vagrant, o busybox e o iptables para criar uma VPN seletiva. Quero poder dizer ao meu sistema que apenas alguns endereços IP conhecidos pertencem à VPN, para que o tráfego para outro lugar não passe pela VPN. Minha idéia é usar um Linux leve como busybox para conectar-se à VPN e, em seguida, usar iptables ou arquivo de hosts ou algo semelhante, redirecionar as solicitações dos endereços IP conhecidos para a VM Vagrant convidada para que ele lide com a VPN . Este iptables regras pode me dar alguma ajuda :)
de Bruno Dedo