Alternativa a DuckDNS con SERVO

HassioHelp

Alternativa a DuckDNS con SERVO

Grazie al nostro utente Telegram https://t.me/@MaGiDeL per aver realizzato e testato questa guida.

Introduzione

Parlando di domotica, oggi giorno, non sorprende sentire che alcune persone accostano questo termine alla possibilità di gestire con un semplice comando dallo smartphone o da un comando vocale o addirittura da remoto, i propri dispositivi di casa quali illuminazione, gestione di carichi e automatismi in generale.
Tutto lecito, sia ben chiaro, e anche molto “cool”, ma personalmente preferisco pensare alla domotica come ad un sistema “chiuso”, non dipendente da server sparsi chissà dove e al quale, anche da remoto, posso accedere senza troppe difficoltà.
Circa quest’ultimo aspetto, ci sono svariati modi per accedere da remoto al nostro hub preferito (Home Assistant / Hassio), tutti validi e più o meno semplici.
Il più usato, DuckDNS (qui la guida Configurazione DuckDNS) prevede l’apertura di una porta sul router per creare il redirect sulla porta del nostro sistema, la creazione di certificati per validare la comunicazione e il servizio di DuckDNS al quale viene aggiornato il proprio indirizzo IP pubblico.

Vorrei mostrarvi, invece, con questo articolo, una diversa modalità di connessione da remoto.
Di necessità virtù, diceva un detto, ed infatti questo metodo è stato messo in piedi per necessità, dato che l’attuale connessione ad internet in casa non si basa su ADSL/Fibra/RetiRadio…ma su una semplice SIM in 4G.

Non entrerò nel merito della connessione internet e come questa viene distribuita in tutta casa, non è il fine di questo articolo.
Si sappia, soltanto, che come per le “normali” connessioni, non si avrà un indirizzo pubblico statico, ma si andrà in internet sotto NAT.

Il setup e lo scopo

Di seguito la configurazione di partenza:

  • Presenza di connessione 4G attraverso operatore telefonico, quindi router/chiavetta/modem con SIM dell’operatore.
  • Raspberry + SSD
  • Raspbian + Docker + hassio

Lo scopo è quello di poter creare “on the fly” una connessione sicura da remoto verso il proprio raspberry utilizzando un reverse tunnel in SSH (https://en.wikipedia.org/wiki/Reverse_connection).
Questo canale permetterebbe di accedere da remoto alla schermata di Hassio e gestire l’intera domotica, compreso il codice, come fossimo in locale!
Una volta conclusa la sessione, poter chiudere la connessione con la stessa facilità con la quale l’abbiamo aperta, per evitare ogni problema di sicurezza.

Procedura

La diffusione di Hassio ha avuto un buon successo anche grazie ai suoi addons, che permettono, con semplici operazioni, di installare tutte le funzionalità di cui necessita l’utente finale.
Tra questi addons, uno tra i più fondamentali è SSH Server.
Impostato l’addon, passiamo al servizio internet al quale ci appoggiamo per creare il reverse tunnel.
E’ un servizio gratuito e lo troviamo all’indirizzo https://serveo.net/.
Questo servizio ci permette di mettere in piedi un reverse tunnel ssh così da esporre un server locale, hassio nel nostro caso, su internet, senza aprire porte sul router, senza certificati e senza nessuna impostazione sulla configurazione.                               

Comando di attivazione

Nello specifico il comando da lanciare per attivare il canale sarà il seguente:

ssh -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -R XXX:80:localhost:8123 -R YYY:80:localhost:8321 serveo.net

Entriamo nel dettaglio:
ssh, attivo con l’addon.

ServerAliveInterval” e “StrictHostKeyChecking“, sono opzioni per tenere in piedi la connessione e per aggiungere la chiave host in automatico

-R, è il reverse tunnel

XXX:80:localhost:8123, XXX è il sottodominio da utilizzare e richiamare per accedere alla schermata home di hassio sulla porta 8123.

YYY:80:localhost:8321, come sopra, ma si accede alla schermata dell’addon IDE, per gestire il codice!

serveo.net è il servizio on line che permette il reverse tunneling.

Per maggiore sicurezza si può utilizzare un proprio server VPS (https://en.wikipedia.org/wiki/Virtual_private_server).
La scelta è ricaduta su questo servizio gratuito per la semplicità nel creare un reverse tunneling “on the fly”!
Nel caso dell’esempio, quindi, si raggiungerà la home di hassio utilizzando l’indirizzo nel browser: https://XXX.serveo.net.
Sempre dal browser, all’indirizzo https://YYY.serveo.net, si raggiungerà invece, la schermata dell’addon IDE per modificare il codice.

Comando di disattivazione

Il comando per interrompere/disattivare il canale, invece, è:

pkill -f 'ssh.*-R'

Shell_command

Riportiamo così i due comandi in shell_command dandogli un nome:

startserveo: 'ssh -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -R XXX:80:localhost:8123 -R YYY:80:localhost:8321 serveo.net'

stopserveo: 'pkill -f ''ssh.*-R'''

Telegram

Creati i due shell_command, passiamo a Telegram, progamma che ci permette di creare “on the fly” questo reverse tunnel.
Grazie alla programmazione delle richieste da bot telegram (Bot Telegram) si ha l’opportunità di attivare e disattivare la creazione di questo canale ssh.
Seguendo la guida si possono creare tre automazioni.

La prima risponde ad un callback centrale alla quale si arriva da una home:

  - alias: Telegram Bot Serveo
hide_entity: true
initial_state: 'on'
trigger:
- platform: event
event_type: telegram_callback
event_data:
data: /serveo
action:
- service: notify.telegram
data_template:
title: '*Serveo Service:*'
message: "Choose your commands"
data:
inline_keyboard:
- '{{ "\u274c\ufe0f" }} ServeoOFF:/serveooff, {{ "\u2705\ufe0f" }} ServeoON:/serveoon'
- '{{ "\u21a9\ufe0f" }} Home:/home'

La seconda automazione risponde al tastino “ServeoOFF” che richiama come servizio il shell_command sopra definito:

  - alias: Telegram Serveo OFF
hide_entity: true
initial_state: 'on'
trigger:
- platform: event
event_type: telegram_callback
event_data:
data: /serveooff
action:
- service: shell_command.stopserveo
- delay: '00:00:03'
- service: notify.telegram
data_template:
title: '*STOP Serveo.net*'
message: "Off at {{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
data:
inline_keyboard:
- '{{ "\u2b06\ufe0f" }} UpLevel:/serveo, {{ "\u21a9\ufe0f" }} Home:/home'

La terza automazione risponde al tastino “ServeoOn” e come per la seconda automazione, richiama come servizio il shell_command sopra definito:

  - alias: Telegram Serveo ON
hide_entity: true
initial_state: 'on'
trigger:
- platform: event
event_type: telegram_callback
event_data:
data: /serveoon
action:
- service: shell_command.startserveo
- delay: '00:00:03'
- service: notify.telegram
data_template:
title: '*START Serveo.net*'
message: "On at {{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
data:
inline_keyboard:
- '{{ "\u2b06\ufe0f" }} UpLevel:/serveo, {{ "\u21a9\ufe0f" }} Home:/home'

Conclusioni

In questo modo si attiva e disattiva un reverse tunnel così da accedere da remoto, visualizzare la propria home, modificare codice e una volta finito, chiudere il canale, il tutto attraverso telegram.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *