Acces server fara port forwarding

Localtunel
Localtunel

Daca esti in cautarea unei posibilitati de a putea accesa serverul Smart Home din exteriorul retelei insa din varii motive nu poti sau nu vrei sa faci acest lucru forwardand unul sau mai multe porturi prin routerul tau, atunci in tutorialul urmator iti voi arata cat de simplu poti face acest lucru folosind un tool foarte interesant si gratis totodata. Vom instala un server local pe RaspberryPI care va comunica criptat cu aplicatia de Smart Home, oricare ar fi aceasta, FHEM, Home Assistant sau OpenHab.

Prezentarea schematica

Iata pe scurt si schematic cum functioneaza:

Tunneling

Dar sa intelegem schema de mai sus:

  • localhost:
    • la [server local] vom avea serverul pentru controlul Smart Home, acesta comunica cu aplicatia prin protocol de tip [HTTP/S] – de la server catre client si invers. Mai departe se va adauga o veriga de legatura [localtunel client], practic aici intervenim noi instaland serverul de tunneling care va face posibila comunicarea mai departe, acesta deschizand o legatura de comunicare bidirectionala.
  • localtunel host
    • informatiile prelucrate de [localtunel client] vor fi transmise catre hostul acesteia (Cloud) prin intermediul [express server] si [TCP Server].
  • internet user
    • acesta din urma transmitand catre ultimul device din legatura, si anume browserul sau aplicatia instalata pe telefon, tableta sau laptop. Comunicarile pe verticala sunt bidirectionale. Toate legaturile sunt securizate si criptate astfel incat sistemul sa fie unul poit to poi inchis.

Dependinte:

Pentru a instala serverul de tunneling avem nevoie ca Node.JS sa fie deja instalat pe sistem. Am aratat cum se face instalarea pas cu pas in tutorialele anterioare asa ca in aceasta prezentare voi relua pasii pe scurt. Daca aveti deja instalat Node.JS, atunci putem sari peste aceasta etapa.

sudo apt-get update && sudo apt-get upgrade -y
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
sudo apt install nodejs
# dupa finalizarea instalarii verificam cu:
node --version
# raspuns sistem
v10.16.0

Instalare Localtunel

De indata ce avem istalat Node.JS putem instala Localtunel, acesta va fi veriga de legatura cu serverul de smart home si va inlesni legatura cu exteriorul retelei:

sudo npm install -g localtunnel

Creare link catre aplicatie/server

Dupa cateva minute serverul de tunneling va fi instalat si gata de utilizare. Folosind comanda:

lt --port 8123

vom deschide portul 8123 folosit de Home Assistant si vom primi un raspuns cu linkul accesibil din exterior:

Accesand linkul mentionat dupa „your url is:” , atat in interiorul retelei cat si din exteriorul acesteia vom avea o legatura stabila cu serverul smart home.

Problema este ca dupa restart sau inchiderea sesiunii cu Ctrl+C, serverul de tuneling va pierde legatura, la reinitializare vom primi alt link. Pentru a primi de fiecare data acelasi link vom adauga un subdomeniu, cu urmatoarea comanda:

sudo lt --port <1234> --subdomain <nume_subdomeniu>
# sau
sudo lt -p <1234> -s <nume_subdomeniu>

Mai concret:

sudo lt --port 8123 --subdomain hass12122test

# sau

sudo lt -p 8123 -s hass1212test

Asta inseamna ca vom comunica pe portul 8123, acelasi cu cel pe care cominica Home Assistant, de exemplu. In zona de subdomeniu puteti personaliza linkul.

Desigur daca folosim ca si server de smart home FHEM sau OpenHAB, vom folosi portul aferent acestuia, respectiv 8083 sau 8080 (OpenHab HTTP) / 8443 ( OpenHabHTTPS).

Verificam valabilitatea linkului accesandu-l in browser:

In imaginea atasata putem vedea linkul de accesare prin Localtunel a Home Assistant, insa folosind portul specific la fel putem accesa FHEM sau OpenHab, functie de portul si sistemul folosit.

Creare script pentru a lansa Localtunel

Pentru a face linkul durabil si lansabil la restart va trebui sa integram comanda de mai sus intr-un script. Editam acest script cu:

sudo nano localtunel.sh

# Locul unde vreti sa salvati scriptul poate aa fie diferit.
# de ex: sudo nano /usr/scripts/localtunel.sh

Se va deschide un fiser gol in care adaugam:

#!/bin/bash 
# Script pt lansare webServer:
lt --port 8123 --subdomain hasstest123

Salvam cu Ctrl+C.

Este nevoie sa-l facem executabil:

sudo chmod +x localtunel.sh

Pentru a lansa acest script vom folosi una dintre urmatioarele comenzi:

sh localtunel.sh

# sau

./localtunel.sh

Dupa lansare verificam in browser daca link-ul este functional. Acesta va fi de forma: https://<subdomeniu>.loca.lt/

Pentru a lansa la restart de sistem acest script vom adauga o rutina in crontab.

Lansam cu:

crontab -e

Alegem ca editor NANO, si in partea de jos acestuia vom scrie urmatoarea comanda:

@reboot  /home/user/localtunel.sh

Acum la restart de sistem acesta va lansa scriptul anterior creat, astfel incat sistemul va folosi in permanenta acelasi link de legatura intre serverul de smart home si exteriorul retelei.

Concluzie

Localtunel nu este doar simplu de instalat, insa este extrem de simplu de utilizat, legatura fiind securizata si cu ajutorului unui script simplu cu o rutina care sa il lanseze la restart de sistem, avem posibilitatea de a accesa serverul de Smart Home de oriunde am fi fara sa expunem porturi in router, sporind astfel siguranta sistemului creat.

Dezavantajul este ca nu veti putea forwarda prin acesta decat un singur port, insa de regula mai mult de atat nu vad necesar, telul fiind sa avem acces la sistem fara a ne expune sistemul in exterior utilizand DNS-uri sau alte artificii astfel incat sa cream o vulnerabilitate in securitatea sistemului.

De Iulian Susnea

Pasionat de tehnologie, gadgeturi smart home si automatizari si am pornit la drum in crearea acestui site cu tutoriale pentru cele mai importante sisteme Smart Home ale momentului din dorinta de a-i ajuta pe cei la inceput de drum.

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *