Alojamos el sitio en un enrutador doméstico

Hace tiempo que quería "tocar" los servicios de Internet configurando un servidor web desde cero y lanzándolo en Internet. En este artículo, quiero compartir mi experiencia de transformar un enrutador doméstico de un dispositivo funcionalmente limitado a un servidor casi completo.



Todo comenzó con el hecho de que el enrutador TP-Link TL-WR1043ND, que sirvió fielmente, dejó de satisfacer las necesidades de la red doméstica, quería una banda de 5 GHz y acceso rápido a los archivos en una unidad conectada al enrutador. Después de mirar a través de los foros especializados (w3bsit3-dns.com, ixbt), sitios con reseñas y mirar la variedad de tiendas locales, decidí comprar Keenetic Ultra.



A favor de este dispositivo en particular, las buenas crĂ­ticas de los propietarios funcionaron:



  • sin problemas con el sobrecalentamiento (aquĂ­ tuvimos que abandonar los productos Asus);
  • fiabilidad en el trabajo (aquĂ­ tachĂ© TP-Link);
  • facilidad de configuraciĂłn (tenĂ­a miedo de no hacer frente y tachĂ© a MikroTik).


Tuve que aceptar los contras:



  • sin WiFi6, querĂ­a llevar equipos con un margen para el futuro;
  • 4 puertos LAN, querĂ­a más, pero esto ya no es una categorĂ­a domĂ©stica.


Como resultado, tenemos este "servidor":







  • a la izquierda está el terminal Ăłptico de Rostelecom;
  • a la derecha está nuestro enrutador experimental;
  • un cable al enrutador está conectado a la SSD m.2 alrededor de 128 GB, colocada en una caja USB3 de aliexpress, ahora está perfectamente fijada en la pared;
  • en primer plano hay un cable de extensiĂłn con desconexiĂłn independiente de los enchufes, el cable va a un UPS econĂłmico;
  • en el fondo hay un paquete de par trenzado: en la etapa de renovaciĂłn del apartamento, inmediatamente planeĂ© los enchufes RJ45 en los lugares donde se suponĂ­a que se ubicarĂ­a el equipo, para no depender del desorden WiFi.


Entonces, tenemos el equipo, necesitamos configurarlo:







  • la configuraciĂłn inicial del enrutador dura aproximadamente 2 minutos, especificamos los parámetros para conectarme al proveedor (mi terminal Ăłptico se cambia al modo puente, el enrutador levanta la conexiĂłn PPPoE), el nombre de la red WiFi y la contraseña; en principio, todo, el enrutador se inicia y funciona.






Colocamos el reenvĂ­o de puertos externos a los puertos del enrutador en la secciĂłn "Reglas de red - ReenvĂ­o":











ahora puede ir a la parte "avanzada", que es lo que querĂ­a del enrutador:



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


El primero se implementa en herramientas integradas, que requieren poco esfuerzo:









Después de eso, conectamos la unidad al enrutador y la observamos en la pantalla del monitor del sistema.







Haga clic en "Discos e impresoras USB" en la secciĂłn "Aplicaciones" y configuremos







un recurso compartido en la secciĂłn "Red de Windows": Y tenemos un recurso de red que puede usarse con computadoras bajo Windows, conectando si es necesario como un disco: uso neto y: \\ 192.168.1.1 \ SSD / persistente: sĂ­



La velocidad de un NAS tan improvisado es suficiente para uso doméstico, usa todos los gigabits a través del cable, a través de WiFi la velocidad es de aproximadamente 400-500 megabits







Configurar el almacenamiento es uno de los pasos necesarios para configurar el servidor, luego debemos:

- comprar un dominioy una dirección IP estática (puede prescindir de esto utilizando DNS dinámico, pero ya tenía una IP estática, por lo que resultó ser más fácil usar servicios Yandex gratuitos : al delegar un dominio allí , obtenemos alojamiento y correo DNS en nuestro dominio);







- configure los servidores DNS y agregue registros A que apunten a su IP:







el dominio y la configuración de delegación de DNS tardan varias horas, por lo que estamos configurando simultáneamente el enrutador.



Primero, debe instalar el repositorio de Entware, desde el cual podemos instalar los paquetes necesarios en el enrutador. Seguí estas instrucciones, solo no cargó el paquete de instalación a través de FTP, sino que creó una carpeta directamente en la unidad de red conectada anteriormente y copió el archivo allí de la manera habitual.



Después de obtener acceso a través de SSH, cambiamos la contraseña con el comando passwd e instalamos todos los paquetes necesarios con el comando opkg install [nombres de paquete]:







durante la configuraciĂłn, se instalaron los siguientes paquetes en el enrutador (la salida del comando opkg list-installe):



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



Quizás haya algo superfluo aquí, pero hay mucho espacio en el disco, así que no lo descubrí.



Después de instalar los paquetes, configuramos nginx, probé con dos dominios: el segundo está configurado con https y mientras el código auxiliar se cuelga. Se utilizan 81 y 433 puertos internos en lugar de 80 y 443, ya que los paneles de administración del enrutador cuelgan de los puertos normales.



etc / nginx / nginx.conf
user  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;
        #SSL support
        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;
            }
        }
}




etc / nginx / ssl.conf
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 en https, utilicé el conocido script deshidratado, instalándolo de acuerdo con estas instrucciones . Este proceso no causó ninguna dificultad, me topé solo con el hecho de que en el texto del script para trabajar en mi enrutador, debe comentar la línea en el archivo /opt/etc/ssl/openssl.cnf:



[openssl_conf]
#engines=engines


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



Después de recibir los certificados, reinicie nginx con el comando "/opt/etc/init.d/S80nginx restart". En principio, esto completa la configuración, pero el sitio aún no existe; si colocamos el archivo index.html en el directorio / share / nginx / html, veremos un trozo.



<!DOCTYPE html>
<html>
<head>
<title> !</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1> !</h1>
<p>    ,   .</p>
</body>
</html>




Para colocar la información maravillosamente, es más fácil para un no profesional como yo usar plantillas ya preparadas, después de una larga búsqueda en varios directorios encontré templatemo.com : hay una buena selección de plantillas gratuitas que no requieren una atribución obligatoria (lo cual es raro en Internet, la mayoría de las plantillas en la licencia requieren que mantenga un enlace al recurso de donde se obtuvieron).



Seleccionamos la plantilla adecuada: existe para una variedad de casos, descargamos el archivo y lo desempaquetamos en el directorio / share / nginx / html, puede hacerlo desde su computadora, luego edite la plantilla (aquí necesita un conocimiento mínimo de HTML para no romper la estructura) y reemplace los gráficos como se muestra en la imagen a continuación.







Resumen: el enrutador es bastante adecuado para alojar un sitio ligero en él, en principio; si no se espera una carga pesada, puede instalar php y experimentar con proyectos más complejos (miro nextcloud / owncloud, parece que hay instalaciones exitosas en dicho hardware). La capacidad de instalar paquetes aumenta su utilidad, por ejemplo, cuando era necesario proteger el puerto RDP de la PC en la red local, poner el knockd en el enrutador, y el reenvío de puertos a la PC se abrió solo después de la interrupción del puerto.



¿Por qué un enrutador y no una PC normal? Un enrutador es uno de los pocos equipos informáticos que funciona las 24 horas en muchos apartamentos, un enrutador doméstico suele ser absolutamente silencioso y un sitio iluminado con menos de cien visitas por día no lo estresará en absoluto.



All Articles