Haga que el servidor Linux enrute los paquetes destinados a su IP externa al host local

Haga que el servidor Linux enrute los paquetes destinados a su IP externa al host local

Tengo un enrutador con una determinada IP estática a.b.c.dque está conectado a un servidor Linux por un lado y a Internet por el otro.

Acceder a un software instalado en el servidor Linux desde fuera utilizando la dirección IP a.b.c.d:portxxfunciona bien.

Sin embargo, si un navegador abierto por alguien desde el propio servidor intenta acceder al mismo software, a.b.c.d:portxxfalla. Intentarlo localhost:portxxde nuevo funciona bien.

Entonces mi diagnóstico es que el enrutador DSL está siendo tonto y no se da cuenta de que a.b.c.des él mismo.

¿Hay alguna forma de solucionar este problema, preferiblemente sin cambiar nada en el enrutador? Es decir, ¿ Through /etc/hostso algún otro mecanismo en el servidor a.b.c.dal que se puede redirigir algún paquete localhost?

¿Es probable que esto rompa algo más?

Respuesta1

El problema no está en el enrutador. El enrutador hace lo que se ha configurado: traduce el destino del tráfico abcd:portxx a su servidor Linux. No funciona, pero para comprenderlo hay que ver qué sucede en la red. Por ejemplo, su servidor Linux es 192.168.1.2 y su enrutador es 192.168.1.1 en su red LAN.

  • Desde el servidor envías el paquete.
  • fuente 192.168.1.2:1024 horario abcd:portxx
  • en el enrutador se realiza la traducción (de regreso al servidor)
  • fuente 192.168.1.2:1024 dst 192.168.1.2:portxx
  • El paquete llega a la aplicación del servidor, responde y envía el paquete de respuesta.
  • fuente 192.168.1.2:portxx dst 192.168.1.2:1024
  • El paquete llega (permanece) en el servidor a la aplicación del cliente, pero esta conexión no se conoce porque inicia la conexión a abcd y recibe una respuesta de 192.168.1.2 y no de (abcd): el paquete se descarta.

Entonces posible solución:

1) en el enrutador, si puede, configure SNAT desde el paquete proveniente de la red local a su IP pública con NAT. Si tienes un enrutador Linux, prueba 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

Cambió la dirección del paquete de origen para que el paquete pasara a través del enrutador desde la red interna, la aplicación del servidor respondió a 192.168.1.1 y la regla SNAT cuando recibió la respuesta, asigno correctamente el paquete a su aplicación cliente en el servidor. Esta solución funciona para todas las computadoras de la red interna, pero en el servidor verá todas las solicitudes provenientes de la dirección del enrutador 192.168.1.1.

2) En el servidor, puedes REDIRECTAR el tráfico mediante iptables

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

Redirige la conexión saliente desde su servidor al puerto local en el servidor.Creo que esta podría ser la mejor solución para su caso.

3) Agregar la dirección abcd en el servidor podría ser una solución para algunos casos, pero a veces el demonio del servidor (y es específico de la aplicación) no escucha todas las direcciones IP ni da otra respuesta para otras direcciones.

4) Si utiliza nombres de host y no direcciones IP, puede redefinir /etc/hosts en el servidor Linux; esto es más fácil y a veces ayuda (retorno DNS: linuxserver abcd), por lo que en /etc/hosts escribe la línea

192.168.1.2 linuxserver

Y la conexión desde el servidor Linux al "servidor Linux" va directamente a 192.168.1.2

información relacionada