Ésta es la segunda parte del manual que empieza aquí. Ahí se detalla cómo configurar un dominio del router hacia afuera. En esta parte, se continuará con la configuración del router hacia adentro, esto es, el servidor personal. Cabe destacar que ambos pasos se pueden realizar en cualquier orden, por lo que estas dos partes debieran ser relativamente independientes entre sí. Más aún, muchos pasos de esta misma guía se pueden realizar en cualquier orden.

0. Instala SSH

Depende de la distribución de SO que estés utilizando. A futuro va a servir mucho poder acceder al computador que usas de servidor sin tener que estar ahí. Los siguientes pasos voy a asumir que estás usando el computador-servidor directamente, pero si tienes bien configurada la red, no hay problema.

Para instalar SSH (para poder entrar a tu computador por SSH), si no viene instalado, basta hacer (en Ubuntu):

    sudo apt install openssh-server

En Arch, el paquete es openssh, y está en el repositorio core del sistema.

Para ver mayores configuraciones de seguridad, el artículo de SSH de la wiki de Arch Linux es bueno, incluso si tienes otra distribución instalada.

1. Instalando la aplicación de servidor web

Para servir el sitio web (el conjunto de archivos HTML, CSS, JavaScript, scripts PHP si se quisiera, Servlets de Java lo que sea en que esté basado el sistema que pretendas servir), primero es necesario tomar la decisión de qué servidor HTTP(S) utilizar. Estos incluyen:

Esto es sólo para hacernos la vida más fácil. Nada nos impide montar todo un sistema con Node.js, servir todo un sitio directamente desde PHP, o, si tienes mucha confianza en ti mismo y tu corazón es puro, dejar corriendo un programa en C que sirva los documentos que quieras mediante sockets de Unix. Habiendo dicho esto, para hacerme la vida más fácil voy a seguir los ejemplos con el caso de Apache.

Para instalar Apache en (K,L,X)Ubuntu, la instrucción es

sudo apt install apache2

No olvidar hacer update de los repositorios antes de instalar. En el caso de Arch Linux, el comando sería

sudo pacman -S apache

El nombre del repositorio depende de la distribución que utilices. Si usas Windows porque no conoces Linux y te quieres hacer la vida más fácil, probablemente tu yo del futuro tendrá una vida más difícil inventando arreglos para el servidor.

2. Configura el servidor web

Una vez instalado Apache, la carpeta donde se aloja por defecto es sitio web es /var/www/html. Para ver si Apache fue bien instalado, desde una ventana del navegador (asumiendo que estas usando el mismo computador que vas a usar de servidor) puedes ir a la dirección 127.0.0.1. Si aparece un documento de Apache (con título Apache2 Ubuntu Default Page, o las palabras It works).

Si todo sale bien, ahora puedes empezar a configurar los sitios web que sirvas. En /etc/apache2/ están ubicados todos los archivos de configuración de Apache. apache2.conf es el archivo de configuración principal, el cual difícilmente necesites tocar (si sigues tutoriales muy antiguos, probablemente te digan que modifiques este archivo, siendo que en versiones más nuevas hay otros lugares donde es más ordenado ubicar estas modificaciones).

Desde un servidor puedes servir más de un dominio. Puede que tengas dominioejemplo.cl y otrodominio.cl, y puedes configurar Apache para que apunte ambos al mismo sitio (en /var/www/misitio), o que apunten a carpetas distintas. Si sólo tienes un dominio, también puedes tener más de un sitios, apuntados por distintos subdominios: se puede configurar que un sitio esté alojado en dominioejemplo.cl, y que otro esté en blog.dominioejemplo.cl; y otro que esté en dev.dominioejemplo.cl (también puedes encadenar.muchos.dominioejemplo.cl, pero eso es otro cuento).

Para este ejemplo, voy a mostrar un sitio que esté alojado en dominioejemplo.cl, que también responde si se lo busca por www.dominioejemplo.cly en alias.dominioejemplo.cl; y voy a mostrar cómo configurar otro sitio en subdominio.dominioejemplo.cl.

Primero, para ordenar el gallinero, vamos a /var/www. Ahí creamos dos carpetas: principal y subdominio. En cada la primera creamos un archivo index.html con el contenido:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Principal</title>
</head>
<body>
    <p>Estoy en el sitio principal</p>
</body>
</html>

y en la segunda copiamos el mismo archivo, cambiando “principal” por “subdominio”. Esto lo hacemos para poder diferenciar los sitios en caso de que nos vayamos a equivocar en algo.

A continuación, vamos a /var/log/apache2 y creamos las carpetas principal y subdominio. No es necesario hacer esto, pero posiblemente me lo vas a agradecer en algún momento dentro de los próximos años.

Ahora, vamos a la carpeta /etc/apache2/sites-available. Ahí, probablemente sólo se encuentre el archivo 000-default.conf. Copiamos ese mismo archivo dos veces, con nombres principal.conf y subdominio.conf. Vamos a configurar cada sitio.

En principal.conf, como queremos que sirva dominioejemplo.cl, con áliases www.dominioejemplo.cl y alias.dominioejemplo.cl, agregamos debajo (o encima, da lo mismo) de la línea ServerAdmin, la línea

    ServerName dominioejemplo.cl
    ServerAlias www.dominioejemplo.cl alias.dominioejemplo.cl

Como el sitio está en una carpeta distinta, cambiamos la línea DocumentRoot por:

    DocumentRoot /var/www/principal

Y, para que no queden mezclados los registros de cada sitio (registros de acceso, donde ves la hora, dirección IP, sitio pedido, navegador y sistema operativo de cada usuario que solicitó tu sitio web; y registros de error, donde ves las cosas que hace Apache, los errores de tus scripts de PHP y varias cosas más que salvan la vida), cambiamos las líneas de ErrorLog y CustomLog por:

    ErrorLog $(APACHE_LOG_DIR}/principal/error.log
    CustomLog $(APACHE_LOG_DIR}/principal/access.log combined

Ya está lista la configuración de este sitio. Para revisar que no hayan errores de tipeo, puedes hacer

    apachectl configtest

En caso de que muestre Syntax OK, podemos habilitarlo con a2ensite (viene de Apache2 Enable Site). Si no se le entrega ningún parámetro, a2ensite muestra una lista con los sitios disponibles para habilitar. Escribiendo el nombre del sitio principal, el sitio estará habilitado… …no sin antes hacer

    sudo service apache2 restart

Para habilitar el otro dominio, se pueden hacer los pasos análogos (reemplazando “principal” por “subdominio”). La única diferencia sería en subdominio.conf:

    ServerName subdominio.dominioejemplo.cl
    DocumentRoot /var/www/subdominio

Para habilitarlo, se pueden seguir los mismos pasos (apachectl, a2ensite, service). Para deshabilitar un sitio, el comando inverso a a2ensite es a2dissite.

3. Abrir el sitio al mundo exterior

Si ya abriste tu servidor a través de tu router, ya tienes todo listo. Si no lo has hecho, para este momento deberías tener un sitio que nadie ve. Si alguien visita tu dirección IP o tu dominioejemplo.cl, va a estar accediendo al puerto 80 de tu router, el cual no está configurado para responder de ninguna forma. Vamos a cambiar eso.

3.1 Qué hay que reunir

Primero, necesitas la dirección MAC de tu computador-servidor. Cada tarjeta de red que tenga tu servidor va a tener una dirección distinta, por lo que necesitas la MAC de la tarjeta que vayas a utilizar (si tienes un computador portátil conectado por Ethernet, no te va a servir la MAC de la tarjeta de WiFi). También puedes querer la dirección IP interna que está usando ahora tu computador-servidor.

<puedes-saltarte-esto>

Tu proveedor de internet (ISP) te asigna una dirección IP: la IP pública; esta dirección se la asigna a tu router. Todos los dispositivos conectados a tu router se identifican con la misma IP pública. Desde dentro de tu red local (LAN, o Local Area Network), todos los dispositivos conectados a tu router tienen una dirección IP que empieza con 192.168. Esta dirección IP local sirve para que los dispositivos que estén dentro de tu casa se reconozcan el uno al otro: para que todos puedan usar una impresora LAN, para ver la pantalla de tu smartphone en tu smartTV, …. Cuando desconectas un dispositivo de la red (apagas el WiFi o desconectas el cable) y lo vuelves a conectar, por más que seas el mismo dispositivo (mantengas la misma MAC), puede que tu IP local cambie. Esto dificulta un poco las cosas, por lo que vamos a asignarle a la MAC de tu computador-servidor la misma IP local siempre que se conecte.

</puedes-saltarte-esto>

Para ver la MAC de tu computador-servidor, puedes usar el comando ifconfig o ip addr. Si tu computador está conectado por Ethernet, probablemente el dispositivo esté listado con prefijo eth o en. Si está conectado por WiFi, puede que empiece con wl. No le hagas caso a lo. La IP local de tu servidor es lo que está después de la palabra inet. La MAC es lo que aparece después de HW o ether.

3.2 Configurar el router

Ahora llega el configurar el router propiamente tal. En este momento estoy conectado a una red con un router Arris, así que tomé las capturas desde ahí. Como siempre, puede que en tu router las cosas no tengan el mismo nombre, ni estén en los mismos menús; en dicho caso, revisa todos los menús que haya. Sólo si tu router es muy antiguo puede que no te deje configurarlo.

Una vez entrado en el router (una dirección que comienza con 192.168, y que suele terminar con los términos 0, 1, 10 o 100; si no te sabes la dirección prueba todas las combinaciones -hay un truco viendo la máscara de subred y tu IP, o usando nmap, pero suena innecesario-), en el caso del router Arris, hay que ir a LAN Setup, y de ahí a Client List. Ahí deberías ver una lista con todos los dispositivos conectados a tu router. También te da la opción de Reservar la IP a algún cliente. router-1

Haciendo clic en Add, ponemos los datos conseguidos en 3.2 (la verdad, puedes poner la IP que quieras, siempre que siga la máscara; intenta variar sólo el último número) router-2

Ahora, yendo a Firewall > Virtual Servers, podemos redirigir peticiones hechas a nuestra IP pública (a nuestro router) a dispositivos internos.

router-3

La configuración que hicimos en Apache es para HTTP, y como dejamos los valores por defecto, Apache va a escuchar las peticiones en el puerto 80. Como queremos redirigir las peticiones al puerto 80 de nuestra IP pública hacia el puerto 80 de nuestra IP local, estaríamos agregando el siguiente servidor virtual:

router-4

Hasta este punto, si seguiste la guía desde la primera parte, ya deberías tener la conexión completa desde tu servidor hacia el mundo, y en cualquier país democráctico podrías ver el contenido de tus sitios en dominioejemplo.cl y subdominio.dominioejemplo.cl.

Aprovechando que estás en la configuración de Virtual Servers, podrías aprovechar de hacer lo mismo para el puerto 443, en caso de que vayas a querer usar HTTPS. También podrías querer abrir el puerto 22: ten cuidado con esto; de momento, sólo te puedes conectar por SSH a tu servidor desde tu red local. Si abres el puerto 22, vas a poder conectarte a tu servidor desde cualquier parte del mundo, simplemente haciendo

ssh tunombredeusuario@dominioejemplo.cl

Pero, si no tienes bien seguro tu sistema, puede que cualquier otra persona en el mundo con mucha confianza en sí misma logre entrar a tu servidor, pudiendo borrar todo su contenido, o agregando malware que puede atacar a todos tus visitantes sin que te des cuenta. Antes de abrir el puerto 22, te recomiendo que leas lo que la wiki de Arch tiene que decir al respecto.

Llegado hasta acá, eso es todo; puedes instalar lo que quieras en los sitios que ya tienes, puedes correr un blog en Jekyll, puedes activar el módulo de PHP y SSL para Apache… Bueno, la verdad no es todo. Si estás siguiendo las instrucciones desde la primera parte sin hacer nada más, probablemente funcione todo bien hasta que te lleves una sorpresa cuando tu dominio deje de apuntar a tu IP: tu ISP te entregó una nueva dirección IP.

Los servicios de DDNS generalmente ofrecen demonios, servicios o APIs para notificarle al DNS cuál es tu dirección IP cada cierto tiempo, o cada vez que cambie. Mientras no escriba un manual sobre cómo hacerlo en Dynu, revisa por ahí hasta que encuentres algo :P.