Tornar os pacotes de rotas do servidor Linux destinados ao seu ip externo para localhost

2

Eu tenho um roteador com um certo ip estático a.b.c.d que está conectado a um servidor Linux de um lado e à internet do outro.

Acessando um software instalado no servidor Linux externo usando o endereço IP a.b.c.d:portxx funciona bem.

No entanto, se um navegador aberto por alguém do próprio servidor tentar acessar o mesmo software que a.b.c.d:portxx , ele falhará. Tentando localhost:portxx novamente funciona bem.

Então meu diagnóstico é que o roteador DSL está sendo burro e não percebendo que a.b.c.d é ele mesmo.

Existe uma maneira de corrigir isso, prefrably sem alterar nada no roteador? ou seja, Through /etc/hosts ou algum outro mecanismo no servidor, qualquer pacote que vai para a.b.c.d pode ser reencaminhado para localhost ?

É provável que isso quebre alguma outra coisa?

    
por curious_cat 07.10.2015 / 07:09

1 resposta

1

O problema não está no roteador. O roteador faz o que foi configurado para - ele traduz o destino de tráfego a.b.c.d: portxx para o seu servidor linux. Não funciona, mas para entender, você tem que ver o que acontece na rede. Por exemplo, seu servidor linux é 192.168.1.2 e seu roteador é 192.168.1.1 em sua rede LAN

  • Do servidor você envia um pacote
  • src 192.168.1.2:1024 dst a.b.c.d: portxx
  • no roteador é feita a tradução (de volta ao servidor)
  • src 192.168.1.2:1024 dst 192.168.1.2:portxx
  • pacote chega ao aplicativo do servidor, ele responde - e envia o pacote de resposta
  • src 192.168.1.2:portxx dst 192.168.1.2:1024
  • o pacote vem (permanece) no servidor para a aplicação cliente, mas esta conexão não é conhecida, porque você inicia a conexão com a.b.c.d e tem uma resposta de 192.168.1.2 e não de (a.b.c.d) - o pacote é descartado.

Então possível solução:

1) no roteador, se você puder, configure o SNAT do pacote que vem da rede local para o seu ip público NAT. Se você tem um roteador linux, tente algo

iptables -t nat -I PREROUTING -s 192.168.0.0/24 -d a.b.c.d -j SNAT --to-source 192.168.1.1

Você alterou o endereço do pacote de origem para o pacote passando pelo roteador da rede interna, a resposta do aplicativo do servidor de volta para 192.168.1.1 e a regra SNAT ao receber a resposta, mapeou corretamente o pacote para o aplicativo cliente no servidor. Esta solução funciona para todos os computadores da rede interna, mas no servidor você vê todos os pedidos vindos do endereço do roteador 192.168.1.1.

2) No servidor, você pode fazer o tráfego REDIRECT pelo iptables

 iptables -t nat -I OUTPUT -d a.b.c.d -p tcp --dport portxx -j REDIRECT --to-ports portxx

Ele redireciona a conexão de saída do seu servidor para a porta local no servidor. Acho que essa pode ser a melhor solução para o seu caso

3) Adicionar o endereço a.b.c.d no servidor pode ser uma solução para alguns casos, mas às vezes o daemon do servidor (e é específico do aplicativo) não escuta em todos os endereços IP ou dá outra resposta para outro endereço.

4) Se você estiver usando nomes de host e não endereço IP, você pode redefinir / etc / hosts no servidor linux - isso é mais fácil e às vezes ajuda (retorno DNS: linuxserver abcd) assim em / etc / hosts você escreve linha

192.168.1.2 linuxserver

E a conexão do servidor linux para o "linuxserver" vai diretamente para 192.168.1.2

    
por 24.10.2015 / 19:32