SCOPI DELLA GUIDA:
CONCETTI AFFRONTATI:
|
COMPONENTI SOFTWARE UTILIZZATE:
PREREQUISITI:
DISPOSITIVI FISICI UTILIZZATI: |
GUIDA DEDICATA A utenti: |
|
NOTE E DISCLAIMER
|
|
Revisione guida: 1.0 |
Abstract
Con un Sonoff iHost installato col proprio sistema operativo eWeLink CUBE è relativamente facile dotarsi di un servizio reverse proxy per la propria rete domestica.
L’adozione di un software gratuito come Caddy, per esempio, consente di realizzare tale funzionalità di rete in pochi e semplici passi; tale strumento può poi essere configurato e utilizzato per le sue tipiche funzioni di reindirizzamento delle chiamate da Internet verso servizi presenti sulla propria rete interna nonché l’ottenimento automatico degli eventuali certificati crittografici utili alla navigazione sicura verso tali servizi.
N.b. Sebbene non si tratti di scienza missilistica, l’implementazione di questa guida prevede un minimo di cultura sul networking nonché sul funzionamento del reverse proxy. Inutile e deleterio tentare di configurare su Caddy senza conoscere l’abc su questi temi. |
ATTENZIONE: Per funzionare, questa guida dev’essere letta e attuata con particolare attenzione e calma. Pena, il probabile fallimento della configurazione del servizio.
Si parte
- Assunti
- Creazione volume
- Attivare accesso FileBrowser
- Dominio
- Aggiornamento di DuckDNS
- Port forwarding
- Punto della situazione
- Istanziare Caddy su Docker
- Abbiamo finito?
Assunti
Si assume che Sonoff iHost sia già operativo, connesso alla rete LAN e, di riflesso, a Internet, e che disponga dell’ultima versione fimware disponibile.
Altresì, si assume che sia stata installata a bordo e formattata una microSD, la quale ospiterà non solo Caddy stesso, ma anche i contenuti delle applicazioni che si andranno, nel tempo, a configurare presso iHost. La presente guida è in italiano, quindi si assume di aver installato su iHost un pacchetto linguistico in lingua italiana, per esempio il nostro.
Si assume inoltre di aver implementato FileBrowser, il quale verrà riconifigurato al fine di modificare i file di configurazione di Mosquitto; infine, si assume infine che l’host che ospiterà Caddy possegga un indirizzo IP fisso assegnato automaticamente dal router domestico.
Creazione volume
Prima cosa da fare è creare un volume logico allo scopo di ospitare i file di Caddy (configurazione e altro).
Da interfaccia web di sonoff iHost (solitamente raggiungibile via LAN all’indirizzo http://ihost.local), recarsi alla voce di menu “Docker” > “Volume” e poi cliccare su “Crea volume“.
Creare un distinto volume così chiamato:
- caddy
e clicchiamo su “Conferma” per crearlo.
Attivare accesso FileBrowser
Prima di procedere oltre, è necessario far sì che FileBrowser (il quale, arrivati sin qui, dovrebbe già essere operativo) abbia accesso al volume “config” di Caddy, così da poter effettuare modifiche alla sua configurazione.
Per farlo, modificare la configurazione di FileBrowser e aggiungere il volume “caddy” alla sua configurazione.
Dominio
N.b. Se si possiede un dominio proprio o comunque una gestione DDNS diversa da DuckDNS, si può saltare direttamente alla sezione “Port forwarding“. |
Affinché sia raggiungibile dall’esterno in modo semplificato, il punto di accesso alla rete domestica (ovvero interfaccia WAN del modem) deve esser rappresentato da un nome univoco (chiamato FQDN) il quale veda l’IP ad esso associato aggiornarsi automaticamente ad ogni variazione, dato che quello assegnato al vostro modem/router cambia ciclicamente. Per fare questo interviene il servizio Dynamic DNS (o DDNS), ovvero un servizio che tenga traccia dell’ultima variazione e risponda, ai sistemi che chiedano la risoluzione (traduzione) del nome DNS, l’ultimo IP conosciuto, ovvero quello in uso.
DuckDNS è il servizio che abbiamo scelto per questa funzione di fornitura di FQDN nonché di associazione dinamica dell’IP.
N.b. Caddy può serenamente gestire anche domini propri acquistati e gestiti sulla rete dai più diversi fornitori diversi da DuckDNS. Come vedremo a seguire, la “challenge” (ovvero la procedura di ottenimento automatica dei certificati) varia da fornitore a fornitore: impossibilitati a documentare qualsiasi casistica possibile, in questa guida analizzeremo le più comuni modalità di challenge tra i servizi più comunemente usati. Ciononostante, con i debiti accorgimenti la guida di massima è valida anche per gli altri casi. |
Collegarsi quindi al servizio tramite l’indirizzo https://www.duckdns.org e, una volta registrati creare un proprio nome dominio che, univocamente, rappresenterà il vostro modem collegato ad Internet. Il suffisso è sempre lo stesso (“.duckdns.org“) mentre ciò che cambia e va scelto è il suffisso (per esempio “casamia“).
Per questa guida, daremo per assunto di aver creato il seguente FQDN:
casamia.duckdns.org
dove “duckdns.org” è la parte fissa mentre casamia è il nome di dominio da noi creato a mo’ di esempio.
All’interno della vostra sezione privata di DuckDNS troverete anche un campo importante chiamato “token“, il quale appare analogo a questo:
e3ff465f-c6d6-acb1-4416-44b2af152111
Appuntarselo da una parte, tornerà utile a breve.
Aggiornamento di DuckDNS
Prima di provvedere alla configurazione di Caddy è necessario assicurarsi che l’associazione del proprio FQDN con l’IP assegnato al modem dal nostro provider Internet sia garantita quasi in tempo reale. A fronte dell’eventuale cambiamento dell’IP Internet sull’interfaccia WAN del proprio modem/router, è necessario che tale variazione venga comunicata a DuckDNS, in modo da aggiornare la conseguente risoluzione dell’FQDN.
N.b. Questo paragrafo non va attuato se sulla propria rete c’è già qualche dispositivo che provveda a tale funzione di associazione dell’IP con il proprio FQDN, come per esempio un modem/router FRITZ!Box o altri modelli/marche in grado di effettuare da sé l’operazione. Se e quando un modem è in grado di provvedere a tale funzione, è sempre buona regola lasciare che sia lui ad aggiornare tale associazione, e non il Sonoff iHost o altri host della propria rete. |
N.b. Gli utenti che utilizzino già l’HUB Home Assistant possono alternativamente utilizzare questa guida che non prevede l’adozione di un container ad hoc, cosa invece descritta nel presente paragrafo. |
Arrivati a questo punto è possibile provvedere all’instanziamento di DuckDNS, il quale viene eseguito come container Docker tramite istanza specifica.
Recarsi dunque alla voce “Docker” > “Lista degli Add-on” e poi cliccare su “Aggiungi Add-on“.
Nella buca di ricerca inserire “duckdns“, poi cliccare sulla lente d’ingrandimento:
selezionare “Isioarmhf/duckdns“, poi cliccare su “Aggiungi …“.
Al termine si rientrerà sulla finestra principale degli Add-on inclusi su Sonoff iHost; a questo punto cliccare su “Installare” sul nuovo box dedicato a DuckDNS.
Attendere il tempo del download dell’immagine di FileBrowser dal repository ufficiale di Docker, poi procedere oltre.
Avviare il container
Al termine, sempre presso il box di FileBrowser, cliccare su “Avvia“.
Apparirà un box di configurazione, il quale va configurato come segue:
- Rete: bridge (o bridge, è uguale)
- Porta:
- nessuna indicata
- Volume:
- nessuno indicato
- Variabili d’ambiente:
- Variabile: “TZ” con valore “Europe/Rome“
- Variabile: “SUBDOMAINS” con valore NOME_DOMINIO (come spiegato a seguire)
- Variabile: “TOKEN” con valore MIO_TOKEN_DUCKDNS (come spiegato a seguire)
sostituendo nel comando le stringhe indicate come segue:
NOME_DOMINIO | sostituire utilizzando il nome dominio definito sul servizio DuckDNS (inteso come terzo livello, quindi nel caso sopra solo “casamia“) |
MIO_TOKEN_DUCKDNS | sostituire utilizzando il toker fornito da DuckDNS |
Riportiamo l’esempio:
Al termine della configurazione, cliccare su “Avvia” per avviare il container Docker di DuckDNS, il quale da qui in poi provvederà all’aggiornamento automatico dell’associazione IP WAN/FQDN, come spiegato sopra.
Port forwarding
Per far sì che Caddy possa autonomamente provvedere all’ottenimento di eventuali certificati SSL per il proprio FQDN nonché accettare le connessioni esterna da girare – in quanto reverse proxy – è necessario configurare delle regole di port forwarding sul modem/router. Il cosiddetto “aprire le porte”.
Prima di proseguire oltre – se non si ha già dimestichezza col port forwarding – si consiglia la lettura di questo articolo.
IMPORTANTE.
Le regole di port forwarding variano in base alle porte che si vogliano esporre verso Internet rispetto a quelle aperte (e da raggiungere) internamente. Questo non è oggetto della presente guida, in quanto qualsiasi guida presente su inDomus che referenzi la presente e che utilizzi Caddy come reverse proxy spiegherà questo aspetto nello specifico del servizio. Ciò che viene spiegato in questa occasione – ovvero alla prima installazione e configurazione di Caddy – è relativo alle porte (eventualmente) da aprire in caso si voglia far provvedere a Caddy all’ottenimento di eventuali certificati SSL per la securizzazione delle comunicazioni dentro-fuori. I certificati crittografici, per essere considerati validi, devono essere rilasciati da una Certification Authority riconosciuta: nel caso della presente guida utilizzeremo il servizio gratuito Let’s Encrypt. Questo processo viene automatizzato sfruttando uno specifico protocollo (chiamato ACME Protocol) il quale prevede tre modalità diverse, dette anche challenge, per appurare la propria “identità” al gestore del servizio e ottenere quindi i certificati richiesti. Tali modalità sono:
Su Caddy le prime due challenge vengono utilizzate di default, la terza invece va eventualmente abilitata in configurazione (il che disabilita le prime due).
Dunque, quali porte vanno “aperte” tramite port forwarding e girate verso l’host che ospita Caddy? La TCP 80, la 443 o nessuna? La scelta ovviamente è soggettiva e dipende da diversi fattori. Dipende in primis dal DNS provider, in base se esso consenta o meno la scrittura dei TXT record. Dipende anche dal proprio modem: non tutti permettono l’apertura delle porte 80 e 443. Dipende dalla volontà o meno di voler esporre il proprio server sulle porte 80 e 443. Per fare qualche esempio:
e altro. |
In questa guida assumeremo di utilizzare la casistica più classica, ovvero il primo esempio qui sopra spiegato, ovvero quello che utilizza port forwarding della porta TCP 443 o TCP 80 nonché – come vedremo – la corretta challenge prevista per DuckDNS (la TLS-ALPN).
La configurazione per il port forwarding sul modem da noi consigliata (molta attenzione a questo passaggio) è:
- IP destinazione: IP statico del Sonoff iHost (assegnato in precedenza);
- Porta esterna: TCP 443
- Porta interna: TCP 8443
oppure
- IP destinazione: IP statico del Sonoff iHost (assegnato in precedenza);
- Porta esterna: TCP 80
- Porta interna: TCP 81
MOLTO IMPORTANTE.
Ci si domanderà: perché non limitarsi a mappare le porte esterne 443 e 80 con le medesime interne al container, anzichè queste “strane” 8443 e 81? Semplice: perché le porte 443 e 80, su iHost, sono riservate, pertanto non possono essere usate. |
Punto della situazione
Arrivati a questo punto della guida abbiamo:
- un FQDN rappresentante il nostro punto di ingresso alla rete locale;
- un sistema di aggiornamento automatico dell’FQDN;
- un port forwarding delle porte esterne TCP 443 o 80 (o nessuno, se si usa la DNS Challenge) verso la 8443 e la 81 (o altre a scelta).
Ora non manca che installare Caddy e far sì che nella sua configurazione ci sia l’ottenimento automatico dei certificati da parte di Let’s Encrypt per il nostro FQDN.
Istanziare Caddy su Docker
Una volta dotati di un proprio FQDN è dunque il momento di installare (o meglio, “istanziarvi sopra”) Caddy. Prima di procedere, però, è necessario creare una cartella la quale conterrà la sua configurazione.
Tramite la webapp FileBrowser precedentemente riconfigurata creare nella radice del volume “caddy” un file chiamato “Caddyfile” (senza estensione e chiamato proprio come scritto) dentro il quale copiare il seguente codice:
https://casamia.duckdns.org {
respond "Saluti dal Crew inDomus.it"
file_server
}
Dove ovviamente “casamia.duckdns.org” andrà personalizzato col proprio FQDN.
Una volta completata la modifica, usciamo dall’editor salvando il file.
Istanziamo ora Caddy su Docker al quale passeremo i seguenti argomenti:
- nome del container: caddy;
- il file di configurazione “Caddyfile” da utilizzare;
- la directory “data” nella quale verranno salvati i certificati;
- la porte da esporre fuori dal container (8443 o 81 o altre scelte personalnente).
Istanziare Caddy
Arrivati a questo punto è possibile provvedere all’instanziamento di Caddy, il quale viene eseguito come container Docker tramite istanza specifica.
Recarsi dunque alla voce “Docker” > “Lista degli Add-on” e poi cliccare su “Aggiungi Add-on“.
Nella buca di ricerca inserire “caddy“, poi cliccare sulla lente d’ingrandimento:
selezionare “caddy“, poi cliccare su “Aggiungi …“.
Al termine si rientrerà sulla finestra principale degli Add-on inclusi su Sonoff iHost; a questo punto cliccare su “Installare” sul nuovo box dedicato a Caddy.
Attendere il tempo del download dell’immagine di FileBrowser dal repository ufficiale di Docker, poi procedere oltre.
Avviare il container
Al termine, sempre presso il box di FileBrowser, cliccare su “Avvia“.
Apparirà un box di configurazione, il quale va configurato come segue:
- Rete: bridge;
- Porta:
- Porta Host: 8443 come spiegato prima / Porta Add-on: 443
- Porta Host: 81 come spiegato prima / Porta Add-on: 80
- Volume:
- per “Volume dell’host”, selezionare quello precedemente creato, ovvero “caddy” e per “Volume dell’Add-on”, impostare “/config“;
- per “Volume dell’host”, selezionare quello precedemente creato, ovvero “caddy” e per “Volume dell’Add-on”, impostare “/caddy/data“.
Riportiamo l’esempio:
Al termine della configurazione, cliccare su “Avvia” per avviare il container Docker di Caddy.
Verifica
Se tutto sarà ok, lo si scoprirà collegandosi a questo indirizzo:
https://casamia.duckdns.org
avendo naturalmente cura di correggere casamia col proprio nome dominio.
Se si accederà a una schermata del seguente tipo:
congratulazioni: Caddy è ora operativo.
Abbiamo finito?
In realtà, nì.
Caddy, di per sé ora è operativo ma, in buona sostanza, non sta facendo nulla se non ottenere automaticamente gli aggiornamenti dei certificati per il nostro FQDN. Va da sé che per utilizzarlo per ciò che è concepito, ovvero la funzione di reverse proxy, sarà necessario indicare in configurazione (nel “Caddyfile” di cui sopra) quali regole implementare e riavviare coerentemente il container, oltre a implementare le relative regole di port forwarding sul modem/router.
Un esempio: Home Assistant
Ipotizziamo di voler gestire il traffico esterno per un’istanza di Home Assistant presente sulla rete interna in modo da farlo raggiungere dall’esterno su porta 9000 (e in modo sicuro con certificati SSL) per controllare la propria domotica in remoto.
Le cose da fare sono:
- modificare coerentemente il “Caddyfile“;
- configurare il port forwarding;
- riavviare il container Docker di Caddy.
MODIFICA AL CADDYFILE
Modificheremo il Caddyfile come segue:
(https_header) { header { Strict-Transport-Security "max-age=31536000; includeSubdomains" X-XSS-Protection "1; mode=block" X-Content-Type-Options "nosniff" X-Frame-Options "SAMEORIGIN" Referrer-Policy "same-origin" } } https://casamia.duckdns.org { respond "Saluti dal Crew inDomus" file_server } https://casamia.duckdns.org:9000 { import https_header reverse_proxy http://IP_DELLA_ISTANZA_HOME_ASSISTANT:8123 @ws: { header Connection "Upgrade" header Upgrade websocket } }
Come si nota, la regola indica che tutte le richieste https verso casamia.duckdns.org:9000 vengano reindirizzate verso l’indirizzo interno http://IP_DELLA_ISTANZA_HOME_ASSISTANT:8123.
CONFIGURARE IL PORT FORWARDING
Sul modem/router, definire una regola di port forwarding così modellata:
- IP destinazione: IP statico del Sonoff iHost che ospita Caddy
- Porta esterna: TCP 9000
- Porta interna: TCP 9000
RICONFIGURARE CADDY
Naturalmente bisognerà cancellare il container Docker di Caddy e ricrearlo aggiungerndo alla configurazione di base anche l’associazione di porte 9000:9000 (oltre quelle già previste, tipo la 8443 e la 81), ovvero l’associazione della nuova porta d’ingresso ora gestita, la 9000. Terminata questa configurazione, Home Assistant sarà raggiungibile dall’esterno, via https, presso il proprio FQDN alla porta 9000.
Questo ovviamente è solo un esempio illustrativo: per tutte le possibili configurazioni (non documentate da inDomus) si consiglia di far riferimento direttamente alla documentazione Caddy.
N.b. Attenzione: naturalmente se si provvede a instanziare Caddy via Docker Compose, va da sé che anche tale file debba essere modificato aggiungendo le porte da esporre al container, per esempio la 9000 come per l’esempio sopra. |
RICONFIGURARE HOME ASSISTANT
Dato che abbiamo portato l’esempio di Home Assistant, dopo la configurazione di Caddy ricordarsi anche di effettuare un’ultima modifica, ma stavolta lato Home Assistant.
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |