Jeg har lÊnge Þnsket at 'rÞre ved' internettjenester ved at opsÊtte en webserver fra bunden og offentliggÞre den pÄ internettet. I denne artikel vil jeg dele min erfaring med at forvandle en hjemme-router fra en enhed med begrÊnsede funktioner til en nÊsten fuldgyldig server.
Det hele begyndte med, at min trofaste TP-Link TL-WR1043ND-router ikke lÊngere kunne tilfredsstille behovene i hjemmenetvÊrket; jeg Þnskede 5 GHz-bÄndet og hurtig adgang til filer pÄ en enhed tilsluttet routeren. Efter at have gennemsÞgt relevante forum (4pda, ixbt), anmeldelsessider og kigget pÄ udbuddet i lokale butikker, besluttede jeg at kÞbe en Keenetic Ultra.
Der var flere grunde til at vĂŠlge netop denne enhed:
- ingen problemer med overophedning (her mÄtte jeg opgive Asus-produkter);
- pÄlidelighed i driften (her udelukkede jeg TP-Link);
- simplicity in setup (jeg var bange for ikke at klare det og udelukkede Microtik).
Jeg mÄtte acceptere nogle ulemper:
- ingen WiFi6, jeg Ăžnskede at kĂžbe udstyr med en fremtidig kant;
- 4 LAN-porte, jeg Ăžnskede flere, men det er ikke lĂŠngere i hjemme-kategorien.
Resultatet blev sÄdan en 'server':

- til venstre er optisk terminal fra Rostelecom;
- til hĂžjre vores prĂžve-router;
- en m.2 SSD pÄ 128 GB, som lÄ rundt, er tilsluttet routeren via et USB3-kabinet fra AliExpress, og nu er det forsvarligt fastgjort pÄ vÊggen;
- i forgrunden en stikdÄse med uafhÊngig afbrydelse af stikkene, et kabel fra den gÄr til en billig UPS;
- i baggrunden en bunke twisted pair â under renoveringen af lejligheden planlagde jeg straks RJ45-stik pĂ„ de steder, hvor teknologien forventedes placeret, for ikke at vĂŠre afhĂŠngig af WiFi-overbelastning.
SĂ„ vi har udstyret, nu skal det opsĂŠttes:

- den indledende opsĂŠtning af routeren tager omkring 2 minutter, vi angiver forbindelsesparametrene til udbyderen (jeg har den optiske terminal skiftet til bridge-mode, PPPoE-forbindelsen oprettes af routeren), WiFi-netvĂŠrkets navn og adgangskode â i princippet er alt, routeren starter og fungerer.

Vi opretter port forwarding til routerens egne porte i afsnittet 'NetvĂŠrksregler â Omdirigering':


Nu kan vi gÄ videre til den 'avanserede' del, som jeg Þnskede fra routeren:
- funktionalitet som et lille NAS til hjemmenetvĂŠrket;
- udfĂžrelse af webserverfunktioner til flere private sider;
- funktionaliteten ved en personlig cloud til adgang til personlige data fra enhver del af verden.
Det fĂžrste udfĂžres med indbyggede vĂŠrktĂžjer og krĂŠver ikke sĂŠrlige anstrengelser:
- vi tager det medie, der er beregnet til denne rolle (USB-disk, hukommelseskort i kortlĂŠser, harddisk eller SSD i en ekstern boks) og formaterer det til Ext4 ved hjĂŠlp af (jeg har ikke en computer med linux ved hĂ„nden, her kan man bruge indbyggede vĂŠrktĂžjer). Som jeg forstĂ„r det, skriver systemet kun logs til USB-disken, sĂ„ hvis man begrĂŠnser dem efter systemopsĂŠtning â kan man ogsĂ„ bruge hukommelseskort, men hvis man planlĂŠgger at skrive meget og ofte til mediet â er det bedre med SSD eller HDD.

Derefter tilslutter vi mediet til routeren og observerer det pÄ skÊrmen for systemmonitoren.

Vi gÄr videre ved at klikke pÄ 'USB-disk og printere' i afsnittet 'Applikationer' og opsÊtter den delte ressource i afsnittet 'Windows-netvÊrk':

Og vi har en netvĂŠrksressource, som kan bruges med Windows-computere, tilsluttet efter behov som en disk: net use y: \192.168.1.1SSD /persistent:yes
Hastigheden pÄ denne improviserede NAS er helt tilstrÊkkelig til hjemmebrug, den bruger hele gigabit via kabel, mens hastigheden via WiFi er omkring 400-500 megabit.

OpsĂŠtningen af lageret er et af de nĂždvendige trin til konfiguration af serveren, herefter skal vi:
â og en statisk IP-adresse (man kan klare sig uden dette ved at bruge Dynamic DNS, men jeg havde allerede en statisk IP, sĂ„ det var lettere at bruge â fĂ„r vi DNS-hosting og e-mail pĂ„ vores domĂŠne);

â og tilfĂžje A-poster, der peger pĂ„ din IP:

Det tager et par timer for Êndringerne i domÊnedelegationen og DNS at trÊde i kraft, sÄ vi beskÊftiger os samtidig med opsÊtningen af routeren.
For at starte skal vi installere Entware-repositoriet, fra hvilket vi kan installere de nÞdvendige pakker til routeren. Jeg brugte men uplodede ikke installationspakken via FTP, men oprettede en mappe direkte pÄ det tidligere tilsluttede netvÊrksdrev og kopierede filen derhen med almindelige metoder.
NÄr vi har fÄet adgang via SSH, Êndrer vi adgangskoden med kommandoen passwd og installerer med kommandoen opkg install [pakkenavne] alle de nÞdvendige pakker:

Under opsÊtningen pÄ routeren var fÞlgende pakker installeret (resultatet af kommandoen opkg list-installed):
SÄrbarheder i Linux-kernen, der pÄvirker ksmbd, ktls, uio og netvÊrksstakken
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
Der kan muligvis vÊre noget overflÞdigt her, men der er masser af plads pÄ lageret, sÄ jeg gad ikke at finde ud af det.
Efter installationen af pakkerne konfigurerer vi nginx, jeg forsÞgte med to domÊner - pÄ det andet er https konfigureret, og det hÊnger stadig i en placeholder. Interne porte 81 og 433 bruges i stedet for 80 og 443, da routerens admin-omrÄder kÞrer pÄ de normale porte.
etc/nginx/nginx.conf
bruger 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;
}
}
}
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;For at fÄ hjemmesiden til at fungere via https, brugte jeg et velkendt script dehydrated, som jeg installerede ifÞlge . Dette proces gav ikke problemer, jeg stÞdte kun pÄ det, at i teksten i scriptet til at fungere pÄ min router /opt/etc/ssl/openssl.cnf:
[openssl_conf]
#engines=enginesOg jeg vil bemÊrke, at genereringen af dhparams.pem med kommandoen «openssl dhparam -out dhparams.pem 2048» pÄ min router tager mere end 2 timer; hvis det ikke var for progressindikatoren, ville jeg have mistet tÄlmodigheden og genstartet.
Efter at have modtaget certifikaterne genstarter vi nginx med kommandoen "\/opt\/etc\/init.d\/S80nginx restart". I princippet er konfigurationen afsluttet, men hjemmesiden er endnu ikke der â hvis vi lĂŠgger en index.html fil i kataloget \/share\/nginx\/html, vil vi se en placeholder.
index.html
<!DOCTYPE html>
<html>
<head>
<title>Testside!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Testside!</h1>
<p>Dette er en simpel statisk testside, absolut intet interessant.</p>
</body>
</html>For at prĂŠsentere informationen pĂŠnt, er det nemmere for en ikke-professionel som mig at bruge fĂŠrdige skabeloner, efter at have gennemgĂ„et forskellige kataloger fandt jeg â der er et godt udvalg af gratis skabeloner, der ikke krĂŠver, at man angiver ophavsret (hvilket er sjĂŠldent pĂ„ internettet, da de fleste skabeloner i licens krĂŠver, at man bevarer et link til den kilde, de er hentet fra).
Vi vĂŠlger en passende skabelon â der er noget for alle mulige situationer, downloader arkivet, og udpakker det i kataloget /share/nginx/html, det kan gĂžres direkte fra din egen computer, derefter redigerer vi skabelonen (her krĂŠves minimale HTML-kundskaber for ikke at forstyrre strukturen) og udskifter grafikken, som vist pĂ„ billedet nedenfor.

Resume: routeren er helt egnet til at hoste en let hjemmeside, i princippet â hvis der ikke forventes stor belastning, kan man , og eksperimentere med mere komplekse projekter (jeg ser pĂ„ nextcloud/owncloud, der ser ud til at vĂŠre succesfulde installationer pĂ„ sĂ„dan hardware). Muligheden for at installere pakker Ăžger dens nytte â for eksempel, da jeg skulle beskytte RDP-porten pĂ„ en computer i det lokale netvĂŠrk, installerede jeg knockd pĂ„ routeren â og port-forwarding til computeren blev kun Ă„bnet efter port knocking.
Hvorfor netop en router, og ikke en almindelig PC? Routeren er en af de fÄ computerhardware, der kÞrer dÞgnet rundt i mange lejligheder, hjemmerouteren er normalt helt lydlÞs, og en let hjemmeside med fÊrre end hundrede besÞgende om dagen vil slet ikke belaste den.
Kilde: habr.com
