[Redes] Utilizando NGINX para publicar un sitio web con IP fija

Hola lector(a) y/o seguidor(a). En estos días he tenido una situación a resolver. ¿Como hacer para que un sitio web de mi red interna el cual se accede con la URL http://192.168.1.35 (que no cambia) se pueda visualizar para la red externa pero con mi IP pública y que sigue generándose el código HTML con la IP fija? La solución es montar un proxy web inverso. Dale intro.

Lo que quiero es lo siguiente:

Usuario externo Firewall externa Firewall interno Servidor interno
10.25.26.2 10.28.4.250 192.168.1.1 192.168.1.35

Explicando un poco mejor. Al pedir la URL http://10.28.4.250 (IP Pública) se pasa esa petición al servidor interno, este la procesa y devuelve el código HTML correspondiente a dicha petición. La cosa aquí radica en que en todos los enlaces de referencia (valores de los campos href y src de las etiquetas de HTML) dicho valor se genera con el IP del servidor interno y cuando el navegador de usuario externo quiera por ejemplo cargar el banner del sitio la misma será http://192.168.1.35/resources.php?image=banner.img y como de seguro sabrás nunca se podrá acceder al mismo pues mi IP Pública es otra y simplemente no va a cargar correctamente. Por eso se necesita que algún programa intercepte tanto las peticiones como las respuestas y reemplace en cada momento necesario las URL y las ajuste. Básicamente es el trabajo de un proxy web inverso. Si aún no tienes una idea de que hablo, entra a un proxy web anónimo de los tantos en internet y ya podrás imaginarte de lo que estoy hablando.

Existen varios programas para hacer esta función, pero como los gurús más cercanos a mi me recomendaron NGINX pues a usarlo y googlear. Como buen Linuxero en servidores pues a  montar un Debian (puede funcionar en cualquiera de sus derivados) e instalarlo por paquetería de repositorio.

apt-get install nginx

Editamos el archivo /etc/nginx/sites-available/default y lo dejamos parecido a como propongo:

server {
listen 80;
location / {
proxy_pass http://192.168.1.35;
sub_filter_once off;
sub_filter_types *;
sub_filter "http://192.168.1.35" "http://$host";
}
}

Menos mal que no tengo que explicar las cosas que se configuraron. Guardamos todos y reiniciamos el nginx.

services nginx restart

Ahora hacemos un nateo de puertos en nuestro firewall para que las peticiones que vayan dirigidas a nuestro IP público por el puerto 80 sean redirigidas al puerto 80 de nuestro Debian que tiene el NGINX. Cada quien lo hace el entorno de firewall de su preferencia. En PFsense esto se hace en el apartado de Firewall / NAT / Port Forward

¡Y listo!

Fuente de lectura: http://nginx.org/en/docs/http/ngx_http_sub_module.html

Enlace permanente a este artículo: http://sasousuke.cubava.cu/2019/05/08/redes-utilizando-nginx-para-publicar-un-sitio-web-con-ip-fija/