Servidor local

De HackLab
Saltar a: navegación, buscar


El servidor local es una computadora configurada para proveer servicios a otras computadoras y personas, pero en lugar de estar ubicado en la nube, está en nuestras casas, usando la conexión a Internet.

La idea es romper con el concepto de terminal desempoderada, alojando servicios localmente en la medida de lo posible.


Problemas

El ancho de banda es asimétrico

"Asimétrico" quiere decir que tu proveedor de Internet te está dando menos velocidad de subida que de bajada, convirtiéndote en consumidor de información en lugar de productor. Para proveer servicios, lo importante es el ancho de banda de subida. Una solución a esto son las redes P2P, que unen los anchos de banda de subida de muchas terminales en un super ancho de banda.

Sin embargo para nuestros servicios hogareños el ancho de banda no va a molestar tanto, ¡salvo que queramos hacer streaming!

También se pueden contratar servicios de Internet "simétrico" es decir con la misma capacidad de subida que de bajada (y no son tanto más caros tampoco).

Los puertos están bloqueados

Las conexiones entre computadoras se realizan a través de puertos. Los puertos son números que van desde el 0 al 65335 (es decir que hay de sobra). Los servicios más comunes tienen puertos predeterminados, por ejemplo, cuando entramos a una página web, nos estamos conectando al puerto 80 de ese servidor. Lo que vemos como es una conexión a wiki.hackcoop.com.ar en el puerto 80 usando el protocolo HTTP.

En general este es un problema sólo con el mail. Los proveedores de Internet suelen bloquear los puertos de SMTP (25, 587) tanto para enviar como para recibir y muy probablemente se nieguen a abrirlo para recibir, que es lo que nos permitiría tener un servidor de correo en casa.

Pero para este problema ya tenemos una solución :)

Para el resto de puertos no suele haber bloqueos a nivel de conexión, aunque algunos proveedores revisan si estás usando puertos asociados con P2P. Lo que sí puede pasar es que el router "por seguridad" bloquee todas las conexiones entrantes. Esto se resuelve poniendo el servidor local en la zona "desmilitarizada" del router o redirigiéndole los puertos. Más adelante en la guía se ve esto.


La dirección pública es dinámica

La dirección IP pública es la dirección a la que otras computadoras desde Internet pueden llegar a nuestro servidor (y a la que nos conectamos cuando las visitamos).

En los servidores de "la nube", estas direcciones son asignadas estáticamente, esto quiere decir que una máquina tiene una o más direcciones IP asignadas y dificilmente cambien.

En cambio en las conexiones hogareñas, los ISP tienen por costumbre "rotar" las direcciones, por lo que si perdemos la conexión, al recuperarla seguramente tengamos otra (a veces no cambia por dos o tres semanas, si no apagás el router).

Esta es una IP dinámica y es de lo que más rompe las pelotas porque tenemos que avisarle a nuestros clientes y pares que la IP cambió.

Para este problema ya hay varias soluciones y proveedores de soluciones. La idea es registrar un dominio (por ejemplo ponape.com.ar, cuando los .com.ar eran gratis) y una cuenta en un proveedor de DNS dinámico. Con esto se puede mantener actualizada la relación IP<->DNS y minimizar el problema de las IPs dinámicas.

Abriendo el servidor al mundo

Abrir los puertos

Si el proveedor de Internet nos está dando un router, quiere decir que tenemos una red local (privada) con una única salida a Internet a través del router. En el estado actual de la red, esto significa que cada una de las computadoras conectadas al router va a tener una IP privada (similares a 192.168.0.0/24 o 10.0.0.0/8) y que va a acceder a Internet a través de la única IP pública que es asignada al router.

La tarea del router va a ser la de intermediar las conexiones entre las múltiples direcciones privadas de la red local y la única dirección pública que accede a Internet. Esta intermediación se llama NAT y es una solución horrible a la carencia de IPs públicas que hay en el mundo (quedan pocas!).

Esta intermediación impone ciertas restricciones. Al haber una única IP pública y muchas privadas, el router es capaz de convertir las conexiones desde una IP privada a una IP pública en Internet (conexiones salientes), como las que se establecen cuando visitamos un sitio por web, como este, por ejemplo. Pero el router, sin configuraciónes adicionales, no es capáz de intermediar conexiónes desde la red pública hacia la red privada (conexiones entrantes).

Para poder intermediar conexiones entrantes, el router tiene que saber a qué máquina dentro de la red enviarlas. Esto se logra o bien redirigiendo puertos a diferentes máquinas, o bien configurando un único servidor local como 'zona libre' de la red local, lo que equivale a redireccionar todos los puertos a esta máquina. La zona libre es oficialmente conocida como DMZ o zona desmilitarizada, pero es más lindo decir zona libre.

¡Todo esto significa que, intermediando con NAT, no es posible tener dos servidores dentro de la red local con el mismo puerto abierto hacia Internet!

Configuración del router

Para saber dónde está la configuración del router, primero tenemos que saber su dirección dentro de la red local.

ip route

  default via 10.4.23.225 dev enp0s18  metric 202 
  10.4.23.224/27 dev enp0s18  proto kernel  scope link  src 10.4.23.246 metric 202 
  10.4.23.246 via 127.0.0.1 dev lo  metric 202 
  192.168.9.0/24 dev lvpn  proto kernel  scope link  src 192.168.9.3 

Vamos a ver varias líneas. Cada una es una ruta, es decir cuál camino va a tomar una conexión y sus datos. La ruta por defecto ("default via 10.4.23.225") suele ser la dirección IP del router, en este caso 10.4.23.225.

Casi todos los routers tienen una interfaz de configuración por web, entonces visitamos la de este router: http://10.4.23.225.

Dialog-warning-yellow.svg Tanto la dirección IP del router como su usuario y contraseña de administración pueden variar. Como siempre no copies y pegues, leé todos los comentarios que para algo los escribimos :)

Según el modelo y el proveedor de Internet estos datos se pueden encontrar usando un buscador o la Categoría:Configuración de routers.



Redirección de puertos

La redirección de puertos es una configuración que le dice al router a qué dirección privada y puerto se debe enviar una conexión entrante, por ejemplo, para recibir todas las conexiones al servidor web, la conversión sería la siguiente:

(otra máquina/red/etc.) ---> ponape.com.ar:80 ---> router ---> 10.4.23.246:80

Esto quiere decir que una conexión hecha por una computadora desde Internet a ponape.com.ar en el puerto 80, es redirigida por el router a la IP privada 10.4.23.246 en su puerto 80.

En la configuración del router se suele llamar "Port Forwarding".

Zona libre

La zona libre o DMZ le dice al router que reenvíe todas las conexiones entrantes que no sabe manejar a una dirección IP privada. En este caso va a ser la de nuestro servidor local.

Esto es más simple de hacer que la redirección de puertos, porque se configura una sola vez. El único problema puede ser si el router decide cambiar la dirección privada del servidor local.

Para saber la IP del servidor local primero identificamos el nombre de la interfaz de red que está conectada al router:

ip route

  default via 10.4.23.225 dev enp0s18  metric 202 
  [...]

En este caso es lo que viene después de "dev": enp0s18, aunque por lo general se llaman eth0 las conexiones por cable y wlan0 las inalámbricas.

Entonces para ver la dirección IP:

ip address show enp0s18

  2: enp0s18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 00:17:31:0c:a9:97 brd ff:ff:ff:ff:ff:ff
      inet 10.4.23.246/27 brd 10.4.23.255 scope global enp0s18
      inet6 fe80::217:31ff:fe0c:a997/64 scope link 
         valid_lft forever preferred_lft forever

Acá el campo que importa es "inet". 10.4.23.246 es la IP del servidor local. Con esto, vamos al panel de configuración del router y en la opción de DMZ colocamos esta IP.


DNS dinámico

Una vez que tu servidor local está disponible al mundo, necesitás una forma más o menos humana de decir que existe. Esto se llama DNS y es la segunda infraestructura más importante de Internet. Es lo que convierte por ejemplo wiki.hackcoop.com.ar en 190.111.232.20 y le permite a las computadoras conectarse entre sí.

Para saber cuál es la información DNS de un servidor, se puede usar la herramienta dig (o también drill) de la siguiente forma:

dig wiki.hackcoop.com.ar

Como decíamos más arriba la dirección IP de una conexión hogareña puede cambiar en cualquier momento. Para resolver esto necesitamos un proveedor de DNS dinámico (por ejemplo https://freedns.afraid.org https://cdmon.net https://dns.he.net e incluso nuestro propio Owns).

Cuando tenemos DNS dinámico, lo que hacemos es tener un dominio propio (que se puede alquilar anualmente por unos dólares o sacar uno gratis) configurado para apuntar a estos proveedores de DNS dinámico.

Luego, un programa en nuestra máquina se encarga de chequear periódicamente si nuestra dirección cambió e informarle al proveedor, de forma que actualice la información del dominio.

Dialog-warning-yellow.svg Para configurar o contribuir con la configuración de un proveedor específico, podés ver la Categoría:DNS dinámico