Categorías
Blog Informática Server

NAT loopback DNS y Failover

DNS_Tree

Que es nat loopback dns y failover

Hoy voy a hablar de un problema común a la hora de configurar un servidor web, el nat loopback dns y failover, como todos sabeis un servidor web se trata de un ordenador, que generalmente lleva un programa (apache, nginx, microsoft, lighhttpd …), que sirve páginas web a los clientes.

Bien, aquí voy a suponer que el servidor web ya está configurado y que funciona correctamente, o almenos funciona desde dentro la LAN, es decir, desde la red interna.

Para que el servidor sea accesible desde el exterior, es muy probable que le haya que decir al router donde se encuentra el servidor. ¿Y eso porque? Pues vamos a detallar los pasos que siguen los clientes y como funciona el proceso:

Primero, los usuarios escriben en el buscador algun tipo de información, por ejemplo «problemas rotación galaxy s6 edge».

Segundo, el buscador da unos resultados con varias entradas y cada una de ellas apunta a una web que está alojada en un servidor, ya sea de pago, gratis o en casa de alguien.

Tercero, los usuarios pulsan sobre el enlace, por ejemplo http://crashbit.homelinux.com.

Cuatro, en este momento los servidores DNS transfoman la URL (nombre de la web) a una dirección IP, por ejemplo 213.148.199.23

Quinto, si esta web está en tu casa, llega la petición al router.

Parémonos un momento en el router. Este aparato conocido por todos, pero que nadie sabe como funciona, hace muchas cosas, pero la mas importante quizas, es que dirige los paquetes de información hacia donde deben ir, pero no siempre sabe como hacerlo, como por ejemplo en el caso de tener servidores.
El router lo podemos dividir en dos partes, la parte que apunta hacia internet, con la dirección IP (Pública) que hemos dicho antes, 213.148.199.23 y una parte interna, con dirección IP por ejemplo 192.168.1.1.

Aquí hay mucho que decir, pero para resumir de forma muy matusera, diremos que la parte interna, se puede conectar con los equipos que están en la parte interna, por ejemplo el PC con IP 192.168.1.30 y el smartphone con IP 192.168.1.31, pero para que puedan pasar del interior al exterior o del exterior al interior, es necesario un router. Es decir, el router enlaza dos redes diferentes, una interna con direcciones IP por ejemplo 192.168.1.X y otra externa con miles de direcciones diferentes.
Así pues cuando llega un paquete que va a nuestro PC, se le tiene que decir al router cuál es la IP del PC, ya que si no, no sabría donde enviarlo, si al PC o al smartphone, teniendo que perder tiempo preguntando a cada uno.

Sexto, ahora volvamos a nuestro paquete que llega al router, ahi le hemos configurado el NAT, que lo que hace es decir a que IP interna tiene que dirigirse el paquete que pregunta por un servidor. Como NAT le hemos dicho que todo lo que sea tráfico HTTP, es decir tráfico que usa el puerto 80, se enrute hacia la IP 192.168.1.30, así que como en esta IP está el servidor WEB apache, pues este responde a la petición y muestra nuestra página web, que podemos ver desde internet.

Bien, ya sabemos como funciona NAT, pero que es eso de NAT loopback? Pues bien, ahora imaginemos que estamos en casa y hacemos los mismos pasos que hemos explicado anteriormente.
Vayamos al paso cuarto y miremos que hace el router, nuestro navegador dice que quiere acceder a la dirección IP 213.148.199.23, así que pedimos al router esta dirección, el router la busca a los resulta que es su propia dirección, así que no llega a salir al exterior, y claro ahí el NAT no actua, así que el router lo interpreta como una petición de acceder al mismo router desde el interior, y muestra la web de configuración del router, es decir, no la redirige al PC 192.168.1.30 con el apache. Y ahí es donde vemos que algo no funciona … pero recordad, no funciona desde el interior de la LAN, pero si que funciona desde el exterior.

SOLUCIONES:

1) Usar nombres de host
Esta es una solución, en lugar de usar crashbit.homelinux.com, usamos el nombre de host interno que le hemos dado al servidor, por ejemplo earth, así ponemos por ejemplo en el navegador http://earth, y si en /etc/hosts existe el nombre earth, y este apunta a la IP interna del servidor (192.168.1.30) se nos mostrará la web.
PD: Tambien se puede usar directamente la IP interna en el navegador http://192.168.1.30.

Problemas: Pues básicamente nos puede dar problemas con gestores de contenido tipo wordpress, drupal o demás, ya que en la base de datos seguramente existan referencias a crashbit.homelinux.com y estás no podrán ser resueltas y además quizas no cargue nuestro CSS, entre otras cosas.

2) Crear un mini servidor DNS con dnsmasq
És una buena opción, se trata de crear un pequeño servidor dns muy simple pero efectivo, para que cuando estemos dentro de nuestra LAN (es decir en nuestra casa conectados via wifi), la dirección crashbit.homelinux.com no apunte a 213.148.199.23, si no que apunte a 192.168.1.30.

Uf! Direis que esto de montar un servidor DNS en nuestra casa es mucho curro, pero con dnsmasq hacemos que sea muy simple.

2.1) Instalamos dnsmasq si no lo está

[email protected]:~$ sudo apt-get install dnsmasq

2.2) Modificamos el fichero /etc/dnsmasq.conf para que quede algo parecido a esto:

server=8.8.8.8
server=8.8.4.4
listen-address=127.0.0.1,192.168.1.30
bind-interfaces
address=/crashbit.homelinux.com/192.168.1.30
  1. Server=8.8.8.8 y server 8.8.4.4 le decimos que si no encuentra en la caché DNS lo busque a las DNS de Google.
  2. listen-address=127.0.0.1,192.168.1.30 y bind-interfaces, le decimos que responda a peticiones DNS desde el mismo PC y desde la LAN.
  3. address=/crashbit.homelinux.com/192.168.1.30, con esto le decimos que no resuelva el nombre crashbit.homelinux.com en las DNS exteriores, si no que lo resuelva directamente como 192.168.1.30.

2.3) Falta un paso importantísimo, decirle al router que use como servidor DNS nuestro equipo, ya que si no, cuando nuestro cliente pregunte por crashbit.homelinux.com desde la LAN, el router usará los DNS externos y no resolverá a la IP interna, si no la externa. Este paso depende de cada router, pero es muy simple, basta con entrar en la configuración y poner como DNS primario la IP del PC que tiene el servidor dnsmasq, en nuestro ejemplo 192.168.1.30.

Resultados: Aquí veremos a los resultados de nuestro servidor dnsmasq

[[email protected] ~]$ dig crashbit.homelinux.com

; <<>> DiG 9.9.2-P2 <<>> crashbit.homelinux.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59195
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;crashbit.homelinux.com.		IN	A

;; ANSWER SECTION:
crashbit.homelinux.com.	    0	     IN	    A	      192.168.1.30

;; Query time: 1 msec
;; SERVER: 192.168.1.30#53(192.168.1.30)
;; WHEN: Sat Jun  6 17:24:40 2015
;; MSG SIZE  rcvd: 56

Podemos ver que resuelve a nuestra IP interna, así pues va a funcionar siempre. Y aunque nuestro gestor de contenidos busque en crashbit.homelinux.com en lugar de 192.168.1.30 no tendremos problemas.

Problemas:
Existen algunos problemas, como por ejemplo que no tendremos mucho mas control sobre los dominios y que los hosts no se definen de igual forma. Y lo mas importante, que si tenemos equipos con cache DNS activada, podríamos tener problemas, ya que la propagación no siempre es instantanea y podría provocar que algunos intentos no se resuelvan desde la LAN. Para ver si tenemos este problema podemos lanzar un ping a la dirección crashbit.homelinux.com y y quizas veremos como las primeras peticiones no se resuelven, pero al rato, se resuelven todas.

UPDATE: Algunas veces desde un laptop con Ubuntu parece que ignora la configuración del router, que le dice que use como servidor DNS el 192.168.1.30. Esto es debido a que NetworkManager hace uso de dnsmasq en el mismo Ubuntu, y algunas veces puede ignorar nuestros DNS. Para solucionar esto debemos editar el siguiente fichero:

/etc/NetworkManager/NetworkManager.conf y dejarlo así

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

[ifupdown]
managed=false

Añadiendo un #, es decir, comentando, la línea donde pone dns=dnsmasq, luego reiniciamos el servicio con

sudo service network-manager restart

3) Instalamos un servidor DNS completo:
{Pendiente}

FAILOVER DNS:

De acuerdo, ya tenemos nuestro servidor corriendo perfectamente, pero que pasa cuando se estropea el Servidor o bien cuendo se cae la linea? Pues la respuesta es clara, que el cliente obtiene un precioso error de tiempo de conexión esgotado, es decir, que nuestra web no funciona y los clientes quizas ya no vuelvan a entrar a ella nunca mas, y además, por si fuera poco, los buscadores (google) nos bajan el pagerank, lo que provoca que nuestra web pierda puestos a la hora de ser mostrada en los resultados de búsqueda.

Así pues, vamos a dar valor al título de esta entrada NAT loopback DNS y failover, pero además añadiremos backup a la entrada, con lo que haremos un sistema de copia de seguridad y resistencia a fallos.

Para crear este sistema partimos de este esquema:

( Continuará … )

[jetpack_top_posts_widget]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.