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»:

- 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:

- 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.

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


Ahora podemos pasar a la parte «avanzada», que es lo que quería del router:
- la funcionalidad de un pequeño NAS para la red doméstica;
- ejecutar funciones de servidor web para varias páginas personales;
- 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 (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.

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

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

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.

La configuración del almacenamiento es uno de los pasos necesarios para configurar el servidor, luego necesitamos:
— 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 — , obtenemos alojamiento DNS y correo en nuestro dominio);

— y añadir registros A que apunten a tu IP:

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é , 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:

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 . Este proceso no presentó dificultades, solo me detuve en el hecho de que en el texto del script para que funcione en mi enrutador /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesY 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é — 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.

Resumen: el enrutador es bastante adecuado para alojar un sitio web ligero, en principio — si no se espera una gran carga, se puede , 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
