Alojamos el sitio en el enrutador doméstico

Desde hace tiempo quería «tocar con mis manos» los servicios de Internet, configurando un servidor web desde cero y llevándolo a la red. En este artículo quiero compartir la experiencia adquirida al transformar un router doméstico de un dispositivo de funcionalidad limitada en un servidor prácticamente completo.

Todo comenzó cuando mi fiel router TP-Link TL-WR1043ND dejó de satisfacer las necesidades de la red doméstica; quería la banda de 5 GHz y un acceso rápido a los archivos en el almacenamiento conectado al router. Después de revisar foros especializados (4pda, ixbt), sitios de reseñas y observar la selección de tiendas locales, decidí adquirir el Keenetic Ultra.

A favor de este dispositivo jugaron las buenas reseñas de los propietarios:

  • la ausencia de problemas de sobrecalentamiento (aquí tuve que renunciar a productos de Asus);
  • fiabilidad en su funcionamiento (aquí descarté a TP-Link);
  • facilidad de configuración (tenía miedo de no poder manejarlo y descarté a Microtik).

Tuve que aceptar algunos inconvenientes:

  • no hay WiFi6, quería adquirir un equipo con capacidad para el futuro;
  • 4 puertos LAN, quería más, pero eso ya no es de categoría doméstica.

Al final, quedó algo así como un «servidor»:

Alojamos el sitio en el enrutador doméstico

  • a la izquierda el terminal óptico de Rostelecom;
  • a la derecha nuestro router experimental;
  • con un cable, el router está conectado a un SSD m.2 de 128 GB que tenía guardado, colocado en una caja USB3 de AliExpress, que ahora está fijada a la pared;
  • en primer plano un alargador con desconexión independiente de los enchufes, cuyo cable va a un UPS económico;
  • en el fondo un haz de cable de par trenzado, al reformar el apartamento, planeé desde el principio las tomas RJ45 en los lugares donde se iba a colocar el equipo, para no depender de la saturación del WiFi.

Así que tenemos el equipo, ahora hay que configurarlo:

Alojamos el sitio en el enrutador doméstico

  • la configuración inicial del router toma unos 2 minutos, especificamos los parámetros de conexión con el proveedor (mi terminal óptico está en modo puente, la conexión PPPoE la establece el router), el nombre de la red WiFi y la contraseña — básicamente todo, el router se enciende y funciona.

Alojamos el sitio en el enrutador doméstico

Establecemos la redirección de los puertos externos a los puertos del propio router en la sección «Reglas de red — Redirección»:

Alojamos el sitio en el enrutador doméstico

Alojamos el sitio en el enrutador doméstico

Ahora podemos pasar a la parte «avanzada», que es lo que quería del router:

  1. la funcionalidad de un pequeño NAS para la red doméstica;
  2. ejecutar funciones de servidor web para varias páginas personales;
  3. la funcionalidad de la nube personal para acceder a datos personales desde cualquier parte del mundo.

La primera se realiza con herramientas integradas, sin requerir esfuerzos especiales:

  • tomamos un dispositivo destinado para este propósito (una memoria USB, una tarjeta de memoria en un lector de tarjetas, un disco duro o un SSD en un chasis externo y lo formateamos en Ext4 usando MiniTool Partition Wizard Free Edition (no tengo una computadora con linux a mano, allí se puede usar herramientas integradas). Según entiendo, durante su funcionamiento, el sistema escribe en la memoria USB solo registros, por lo que, si se limitan después de la configuración del sistema, se pueden usar tarjetas de memoria; si planeas escribir mucho y a menudo en el dispositivo, es mejor usar un SSD o HDD.

Alojamos el sitio en el enrutador doméstico

Después de eso, conectamos el dispositivo al enrutador y lo vemos en la pantalla del monitor del sistema

Alojamos el sitio en el enrutador doméstico

Hacemos clic en «Discos y impresoras USB» en la sección «Aplicaciones» y configuramos el recurso compartido en la sección «Red de Windows»:

Alojamos el sitio en el enrutador doméstico

Y tenemos un recurso de red que se puede utilizar desde computadoras con Windows, conectándolo si es necesario como un disco: net use y: \192.168.1.1SSD /persistent:yes

La velocidad de este NAS improvisado es bastante suficiente para uso doméstico, por cable utiliza todo el gigabit, por WiFi la velocidad es de alrededor de 400-500 megabits.

Alojamos el sitio en el enrutador doméstico

La configuración del almacenamiento es uno de los pasos necesarios para configurar el servidor, luego necesitamos:
— adquirir un dominio y una dirección IP estática (puedes prescindir de esto utilizando Dynamic DNS, pero yo ya tenía una IP estática, por lo que resultó más fácil usar los servicios gratuitos de Yandex — delegando el dominio allí, obtenemos alojamiento DNS y correo en nuestro dominio);

Alojamos el sitio en el enrutador doméstico

— configurar los servidores DNS y añadir registros A que apunten a tu IP:

Alojamos el sitio en el enrutador doméstico

El tiempo de activación de la configuración de delegación del dominio y DNS toma varias horas, por lo que simultáneamente estamos configurando el enrutador.

Para empezar, es necesario instalar el repositorio Entware, desde el cual podremos instalar los paquetes necesarios en el enrutador. Yo utilicé esta instrucción, solo que no subí el paquete de instalación por FTP, sino que creé una carpeta directamente en el disco de red previamente conectado y copié allí el archivo de manera normal.

Al obtener acceso por SSH, cambiamos la contraseña con el comando passwd y con el comando opkg install [nombres de los paquetes] instalamos todos los paquetes necesarios:

Alojamos el sitio en el enrutador doméstico

Durante la configuración, se instalaron los siguientes paquetes en el enrutador (resultado de la ejecución del comando opkg list-installed):

Lista de paquetes
bash — 5.0-3
busybox — 1.31.1-1
ca-bundle — 20190110-2
ca-certificates — 20190110-2
coreutils — 8.31-1
coreutils-mktemp — 8.31-1
cron — 4.1-3
curl — 7.69.0-1
diffutils — 3.7-2
dropbear — 2019.78-3
entware-release — 1.0-2
findutils — 4.7.0-1
glib2 — 2.58.3-5
grep — 3.4-1
ldconfig — 2.27-9
libattr — 2.4.48-2
libblkid — 2.35.1-1
libc — 2.27-9
libcurl — 7.69.0-1
libffi — 3.2.1-4
libgcc — 8.3.0-9
libiconv-full — 1.11.1-4
libintl-full — 0.19.8.1-2
liblua — 5.1.5-7
libmbedtls — 2.16.5-1
libmount — 2.35.1-1
libncurses — 6.2-1
libncursesw — 6.2-1
libndm — 1.1.10-1a
libopenssl — 1.1.1d-2
libopenssl-conf — 1.1.1d-2
libpcap — 1.9.1-2
libpcre — 8.43-2
libpcre2 — 10.34-1
libpthread — 2.27-9
libreadline — 8.0-1a
librt — 2.27-9
libslang2 — 2.3.2-4
libssh2 — 1.9.0-2
libssp — 8.3.0-9
libstdcpp — 8.3.0-9
libuuid — 2.35.1-1
libxml2 — 2.9.10-1
locales — 2.27-9
mc — 4.8.23-2
ndmq — 1.0.2-5a
nginx — 1.17.8-1
openssl-util — 1.1.1d-2
opkg — 2019-06-14-dcbc142e-2
opt-ndmsv2 — 1.0-12
php7 — 7.4.3-1
php7-mod-openssl — 7.4.3-1
poorbox — 1.31.1-2
terminfo — 6.2-1
zlib — 1.2.11-3
zoneinfo-asia — 2019c-1
zoneinfo-europe — 2019c-1

Puede que haya algo de más aquí, pero hay mucho espacio en el almacenamiento, así que no me lo he tomado en serio.

Después de instalar los paquetes, configuramos nginx, probé con dos dominios: en el segundo está configurado https, y aún está en modo de espera. Se utilizan los puertos internos 81 y 433 en lugar de 80 y 443, ya que las interfaces de administración del router están en los puertos normales.

etc/nginx/nginx.conf

usuario nobody;
worker_processes  1;
#error_log  /opt/var/log/nginx/error.log;
#error_log  /opt/var/log/nginx/error.log  notice;
#error_log  /opt/var/log/nginx/error.log  info;
#pid        /opt/var/run/nginx.pid;

events {
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  /opt/var/log/nginx/access.log main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

server {
    listen 81;
    server_name milkov.su www.milkov.su;
    return 301 https://milkov.su$request_uri;
}

server {
        listen 433 ssl;
        server_name milkov.su;
        #Soporte SSL
        include ssl.conf;
        location / {
            root   /opt/share/nginx/html;
            index  index.html index.htm;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
            }
        }
}


ssl_certificate /opt/etc/nginx/certs/milkov.su/fullchain.pem;
ssl_certificate_key /opt/etc/nginx/certs/milkov.su/privkey.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /opt/etc/nginx/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling on;

Para que el sitio funcione por https, utilicé el conocido script dehydrated, instalándolo según esta instrucción. Este proceso no presentó dificultades, solo me detuve en el hecho de que en el texto del script para que funcione en mi enrutador hay que comentar la línea en el archivo /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

Y debo señalar que la generación de dhparams.pem con el comando «openssl dhparam -out dhparams.pem 2048» en mi enrutador tarda más de 2 horas, si no fuera por el indicador de progreso, habría perdido la paciencia y reiniciado.

Después de obtener los certificados, reiniciamos nginx con el comando " /opt/etc/init.d/S80nginx restart". En principio, la configuración está completa, pero el sitio aún no está — si colocamos un archivo index.html en el directorio /share/nginx/html, veremos una página de presentación.

index.html

<!DOCTYPE html>
<html>
<head>
<title>¡Página de prueba!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>¡Página de prueba!</h1>
<p>Esta es una página de prueba estática sencilla, absolutamente nada interesante.</p>
</body>
</html>

Para presentar la información de manera atractiva, para alguien no profesional como yo, es más fácil utilizar plantillas listas, después de una larga búsqueda entre varios catálogos encontré templatemo.com — hay una buena selección de plantillas gratuitas que no requieren atribución obligatoria (lo cual es raro en internet, la mayoría de las plantillas requieren conservar el enlace al recurso de donde se obtuvieron).

Elegimos la plantilla adecuada — hay algunas para diferentes casos, descargamos el archivo y lo descomprimimos en el directorio /share/nginx/html, esto se puede hacer ya desde tu computadora, luego editamos la plantilla (aquí se requieren conocimientos mínimos de HTML para no alterar la estructura) y reemplazamos la gráfica, como se muestra en la imagen a continuación.

Alojamos el sitio en el enrutador doméstico

Resumen: el enrutador es bastante adecuado para alojar un sitio web ligero, en principio — si no se espera una gran carga, se puede instalar PHP, y experimentar con proyectos más complejos (estoy mirando Nextcloud/Owcloud, parece que hay instalaciones exitosas en este hardware). La posibilidad de instalar paquetes aumenta su utilidad — por ejemplo, cuando necesitaba proteger el puerto RDP de la PC en la red local, instalé knockd en el enrutador — y el reenvío del puerto a la PC solo se abría después de un port knocking.

¿Por qué un enrutador y no una PC convencional? El enrutador es uno de los pocos dispositivos informáticos que funciona las 24 horas en muchos apartamentos, un enrutador doméstico suele ser completamente silencioso y un sitio ligero con menos de cien visitas al día no lo sobrecargará.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster