Reenviar diferentes nombres de host a diferentes IP internas a través del enrutador NAT

Reenviar diferentes nombres de host a diferentes IP internas a través del enrutador NAT

Tengo una dirección IP pública, un enrutador y varios servidores detrás del enrutador.

Me gustaría reenviar diferentes dominios (todos usando HTTP) a través del enrutador a diferentes servidores.

Por ejemplo:

example1.com      =>  192.168.0.110
example2.com      =>  192.168.0.120
foo.example2.com  =>  192.168.0.130
bar.example2.com  =>  192.168.0.140

Entiendo que esto podría lograrse mediante el reenvío de puertos, pero necesito que todos los hosts se ejecuten en el puerto 80.

Encontré información sobre IP Masquerading, pero me resultó difícil de entender y no estoy seguro de si es lo que busco.

Otra solución que encontré es dirigir todo el tráfico al servidor proxy inverso, que reenvía las solicitudes al servidor apropiado. ¿Qué pasa con iptables?

Estoy usando un enrutador VNPX Billion 7404. ¿Hay alguna característica que tenga este enrutador que pueda lograr esto?

¿Son estas mis únicas opciones? ¿Me he perdido algo por completo? ¿Se recomienda uno sobre los demás?

He buscado por ahí pero no creo encontrar las palabras clave correctas.

Respuesta1

La mejor solución sería utilizar un proxy inverso HTTP. Para esto puedes usar:

Estamos usando apache con mod_proxy, pero estoy pensando en usar libra.

Como dispositivo de hardware, puede utilizar un conmutador de servicio de contenido de Cisco. Ver:http://www.cisco.com/en/US/products/hw/contnetw/ps792/index.html

Respuesta2

He tenido una idea y me gustaría saber si alguien tiene algún comentario al respecto.

Si utilizo la idea del proxy inverso, creo que puedo resolver el problema de forma muy sencilla. Ya estoy usando Nginx en los otros servidores, por lo que este es mi servidor preferido para un proxy inverso.

En el enrutador, reenviaré todas las conexiones entrantes en el puerto 80 a mi servidor de proxy inverso. Tendré Nginx ejecutándose en este servidor con el siguiente archivo de configuración:

server {
    listen *:80;
    location / {
        proxy_pass    http://$host;
    }
}

Lo que esto parece hacer es enviar la solicitud al mismo host. Pero aquí está el truco: en mi archivo /etc/hosts asignaré todos los dominios a sus IP internas.

182.168.0.110 example1.com
182.168.0.120 example2.com
182.168.0.130 foo.example2.com
182.168.0.140 bar.example2.com

Entonces el servidor proxy inverso enrutará el host solicitado al mismo host, pero en este puntodeberíabusque el archivo de hosts locales y asígnelo a la dirección IP interna. También significa que puedo "configurar y olvidar" el archivo de configuración de Nginx.

Un problema potencial es que si no se ha configurado un nombre de host local, el proxy inverso enviará la solicitud nuevamente a Internet. Sin embargo, creo que NAT evitará que esto se quede atrapado en un bucle infinito.

Esta solución parece funcionar en mi cabeza y en el papel, pero no podré configurarla por un tiempo.

¿Alguien puede ver alguna razón por la que esto no funcione?

Gracias.

información relacionada