Alternativa a DuckDNS con SERVEO

Alternativa a DuckDNS con SERVEO

Aggiornamento: 06/11/2109 aggiunto il controllo dei dispositivi da remoto

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.

Aggiornamento/Upgrade

Un altra cosa importante da dover raggiungere da remoto sono i dispositivi, per esempio switch, ancor di più se per esempio tasmotati.
Per tale necessità ho adoperato il servizio gratuito illustrato sopra, ma a differenza di come è stato utilizzato precedentemente, puntare verso localhost (il nostro hassio) alla porta 8123, il reverse tunnel avviene verso l’indirizzo IP della rete domestica al quale risponde il dispositivo in questione.

Per riuscire in questo intento si aggiunge, al file shell_commands.yaml, un altro comando nelle stesse modalità già viste

 

startserveoswitch: 'ssh -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -R telecucina:80:192.168.1.21:80 serveo.net'

Una volta lanciato il comando “startserveoswitch”, magari da un pulsante di Telegram, potremo raggiungere il dispositivo (nel caso dell’esempio uno switch) all’indirizzo http://telecucina.serveo.net.
A differenza della home di hassio che si trova sulla porta 8123, il dispositivo si trova all’indirizzo 192.168.1.21 e risponde sulla porta 80.
Per essere sicuri che l’indirizzo sia sempre lo stesso per quel dispositivo, si possono utilizzare le funzioni del proprio router per associare un determinato IP della nostra rete domestica al MAC address del nostro dispositivo. Non essendoci un unica modalità per effettuare questa associazione tra IP della LAN e indirizzi fisici, si rimanda ad una personale ricerca su internet in base al proprio modello di router.

Passando alla programmazione del tasto di telegram, di seguito un esempio:

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

Conclusioni upgrade

Attraverso questa impostazione, possiamo raggiungere finalmente ogni dipositivo (switches, cams, gateway…) della nostra rete domestica che abbia un indirizzo IP fissato dal router per poter gestirlo a distanza.

 

 

6 risposte

  1. BlackEagle ha detto:

    Ciao ho provato a seguire le istruzioni ma quando vado su https://serveo.net/ (sia con chrome che con firefox) mi si apre una semplice pagina vuota, bianca. Forse è sbagliato l’url? O devo arrivarci differentemente?
    Ciao

  2. Enrico ha detto:

    Credo ci siano problemi al loro server, magari riprova prossimamente.

  3. Daniele ha detto:

    Io attualmente uso una vps a pagamento, è possibile implementare con serveo il protocollo ssl in modo da poterlo integrare con google home?

  4. MaGiDeL ha detto:

    Il sito serveo.net è down da settembre 2019.
    La guida è stata aggiornata con “ngrok” e verrà pubblicata quanto prima! 😉

  5. MaGiDeL ha detto:

    Solo per dirvi che serveo.net è tornato online.
    Adesso ci sono due alternative a DuckDNS!

    Buon divertimento

  6. Federico ha detto:

    Ciao, ho visto che http://serveo.net/ non porta da nessuna parte, mentre esiste https://www.serveo.nl/, è la stessa cosa?

Lascia un commento

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

Advertisment ad adsense adlogger