Hospedando o site em um roteador doméstico

Há muito tempo eu queria "sentir na pele" os serviços de internet, configurando um servidor web do zero e o lançando na internet. Neste artigo, quero compartilhar a experiência adquirida ao transformar um roteador doméstico de um dispositivo de funcionalidade limitada em um servidor praticamente completo.

Tudo começou quando o confiável roteador TP-Link TL-WR1043ND deixou de atender às necessidades da rede doméstica, eu queria a faixa de 5 GHz e acesso rápido aos arquivos em um armazenamento conectado ao roteador. Após navegar por fóruns especializados (4pda, ixbt), sites de avaliações e olhar a variedade nas lojas locais, decidi adquirir o Keenetic Ultra.

O que pesou a favor deste dispositivo foram as boas avaliações dos proprietários:

  • ausência de problemas de superaquecimento (aqui tive que abrir mão da linha de produtos Asus);
  • confiabilidade no funcionamento (aqui risquei o TP-Link);
  • simplicidade na configuração (tive receio de não conseguir e risquei a Microtik).

Tive que me reconciliar com as desvantagens:

  • não tem WiFi6, gostaria de ter equipamentos com uma margem para o futuro;
  • 4 portas LAN, gostaria de mais, mas isso já não é categoria doméstica.

No final, o resultado foi este "servidor":

Hospedando o site em um roteador doméstico

  • à esquerda, o terminal óptico da Rostelecom;
  • à direita, nosso roteador em teste;
  • um SSD m.2 de 128 GB, colocado em uma caixa USB3 da AliExpress, está conectado ao roteador por cabo, agora está firmemente fixo na parede;
  • em primeiro plano, uma régua de tomadas com desconexão independente, o cabo vai para um UPS barato;
  • no fundo, um emaranhado de cabos de par trançado — durante a reforma do apartamento, planejei RJ45 tomadas nos locais onde a tecnologia seria colocada, para não depender da poluição do WiFi.

Então, temos o equipamento, precisamos configurá-lo:

Hospedando o site em um roteador doméstico

  • a configuração inicial do roteador leva cerca de 2 minutos, informamos os parâmetros de conexão ao provedor (meu terminal óptico está em modo bridge, a conexão PPPoE é iniciada pelo roteador), o nome da rede WiFi e a senha — basicamente, é tudo, o roteador inicia e funciona.

Hospedando o site em um roteador doméstico

Configuramos o redirecionamento de portas externas para as portas do próprio roteador na seção "Regras de Rede — Redirecionamento":

Hospedando o site em um roteador doméstico

Hospedando o site em um roteador doméstico

Agora podemos passar para a parte "avançada", o que eu queria do roteador:

  1. funcionalidade de um pequeno NAS para a rede doméstica;
  2. execução das funções de servidor web para algumas páginas pessoais;
  3. Funcionalidade de nuvem pessoal para acessar dados pessoais de qualquer lugar do mundo.

A primeira é realizada com recursos integrados, sem exigir esforços especiais:

  • pegamos o dispositivo destinado a essa função (um pen drive, um cartão de memória em um leitor de cartões, um disco rígido ou um SSD em um case externo e formatamos em Ext4 com ajuda do MiniTool Partition Wizard Free Edition (não tenho um computador com Linux à mão, lá pode-se usar os recursos integrados). Pelo que entendo, ao operar o sistema grava apenas logs no pen drive, por isso, se limitá-los após a configuração do sistema — pode-se usar também cartões de memória, se planeja gravar muitas e frequentemente no dispositivo — é melhor utilizar SSD ou HDD.

Hospedando o site em um roteador doméstico

Depois disso, conectamos o dispositivo ao roteador e o visualizamos na tela do monitor do sistema.

Hospedando o site em um roteador doméstico

Clicamos em "Discos USB e Impressoras" na seção "Aplicativos" e configuramos o recurso compartilhado na seção "Rede Windows":

Hospedando o site em um roteador doméstico

E temos um recurso de rede que pode ser utilizado a partir de computadores Windows, conectando-o se necessário como disco: net use y: \\192.168.1.1SSD /persistent:yes

A velocidade desse NAS improvisado é bastante suficiente para uso doméstico, ele utiliza toda a largura de banda de um giga por cabo, e a velocidade pelo Wi-Fi é de cerca de 400-500 megabits.

Hospedando o site em um roteador doméstico

A configuração do armazenamento é um dos passos necessários para a configuração do servidor, e a seguir precisamos:
— adquirir um domínio e um endereço IP estático (pode-se fazer isso sem, utilizando DNS dinâmico, mas o IP estático eu já tinha, então foi mais fácil usar serviços gratuitos do Yandex — delegando o domínio para lá,obtemos hospedagem DNS e e-mail no nosso domínio);

Hospedando o site em um roteador doméstico

— configurar os servidores DNS e adicionar registros A que apontem para seu IP:

Hospedando o site em um roteador doméstico

A entrada em vigor das configurações de delegação de domínio e DNS leva algumas horas, então, enquanto isso, configuramos o roteador.

Para começar, é necessário instalar o repositório Entware, a partir do qual poderemos instalar os pacotes necessários no roteador. Eu usei este guia,só que não subi o pacote de instalação via FTP, mas criei uma pasta diretamente na unidade de rede conectada anteriormente e copiei o arquivo dessa forma.

Obtendo acesso via SSH, mudamos a senha com o comando passwd e instalamos, com o comando opkg install [nomes dos pacotes], todos os pacotes necessários:

Hospedando o site em um roteador doméstico

Durante a configuração, os seguintes pacotes estavam instalados no roteador (resultado da execução do comando opkg list-installed):

Lista de pacotes
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

Pode haver algo a mais aqui, mas há muito espaço no armazenamento, então não me preocupei em investigar.

Após a instalação dos pacotes, configuramos o nginx, eu testei com dois domínios — no segundo, https está configurado, e enquanto isso, a página de espera está no ar. As portas internas 81 e 433 estão sendo utilizadas em vez de 80 e 443, pois as interfaces administrativas do roteador estão ocupando as portas normais.

etc/nginx/nginx.conf

usuario ninguém;
processos_de_trabalho  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  principal  '$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 principal;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

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

servidor {
        escutar 433 ssl;
        server_name milkov.su;
        #Suporte 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 o site funcione em https, utilizei o conhecido script dehydrated, instalando-o de acordo com esta instrução. Esse processo não trouxe dificuldades, apenas me atrapalhei na parte em que no texto do script para funcionar no meu roteador é necessário comentar a linha no arquivo /opt/etc/ssl/openssl.cnf:

[openssl_conf]
#engines=engines

E quero destacar que a geração de dhparams.pem com o comando "openssl dhparam -out dhparams.pem 2048" no meu roteador leva mais de 2 horas; se não fosse pelo indicador de progresso, eu teria perdido a paciência e reiniciado.

Após receber os certificados, reiniciamos o nginx com o comando "\/opt\/etc\/init.d\/S80nginx restart". Em princípio, a configuração está concluída, mas o site ainda não existe — se colocarmos no diretório \/share\/nginx\/html o arquivo index.html, veremos a página de aviso.

index.html

<!DOCTYPE html>
<html>
<head>
<title>Página de teste!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Página de teste!</h1>
<p>Esta é uma página de teste estática simples, absolutamente nada interessante.</p>
</body>
</html>

Para apresentar as informações de forma agradável, para um não profissional como eu é mais fácil usar modelos prontos; após uma longa busca em vários diretórios, encontrei templatemo.com — lá tem uma boa seleção de templates gratuitos que não exigem a atribuição obrigatória de autoria (o que é raro na internet, já que a maioria dos templates sob licença exige que se mantenha o link para o recurso de onde foram obtidos).

Escolhemos o template adequado — há opções para diversas situações, fazemos o download do arquivo e o descompactamos no diretório /share/nginx/html, isso pode ser feito diretamente do seu computador, depois editamos o template (aqui são necessários conhecimentos básicos de HTML, para não prejudicar a estrutura) e trocamos a gráfica, como mostrado na imagem abaixo.

Hospedando o site em um roteador doméstico

Resumo: o roteador é totalmente adequado para hospedar um site leve, na verdade — se não houver grande carga, pode-se instalar php, e experimentar projetos mais complexos (estou considerando o nextcloud/owncloud, parece haver instalações bem-sucedidas em tal hardware). A capacidade de instalar pacotes aumenta sua utilidade — por exemplo, quando precisei proteger a porta RDP do PC na rede local, instalei o knockd no roteador — e a transferência da porta para o PC só se abria após o port knocking.

Por que um roteador e não um PC comum? O roteador é um dos poucos dispositivos de computação que operam 24 horas por dia em muitos lares, o roteador doméstico geralmente é absolutamente silencioso e um site leve com menos de cem visitas por dia não o sobrecarregará.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster