Vediamo come esporre un’app come Home Assistant all’esterno senza aprire porte nel proprio modem/router o qualsiasi sistema abbiate, questo sistema è sopratutto per chi non ha un IP pubblico.
Il sistema che andremo ad utilizzare è CloudFlare che da a disposizione gratuitamente un tunnel per esporre i propri siti o app.
Cos’è CloudFlare?
Cos’è CloudFlare Tunnel?
Cosa Bisogna avere?
- Dominio
- Account CloudFlare
- Macchina Linux(consiglio Ubuntu)/Windows/Mac OS sempre nella rete
- Modem/Router con la possibilità di cambiare DNS
Potete usare direttamente CloudFlare per compre il dominio o io consiglio Google Domains e se come me avete un register esterno dovete cambiare i DNS.
A questo punto iscrivetevi al sito di CloudFlare se non siete iscritti e aggiungete il vostro dominio che verrà analizzato e la piattaforma rilascerà i DNS da cambiare nel proprio register, seguite la guida del vostro register per cambiarlo, ma se avete Google Domains, potete andare nel vostro dominio qui (come da foto) e premere su Gestisci server dei nomi
Entrando in CloudFlare nella sezione del dominio aggiunto entrare in Traffic –> CloudFlare Tunnel e premere Launch Zero Trust Dashboard, qui seguite
Adesso bisogna installare CloudFlared che è il programma che permette di creare il tunnel e avviarlo.
Link Download, copiate il file cloudflared.exe in una nuova cartella C:\Cloudflared\bin e per installare aprire la PowerShell e con il comando:
cd C:\Cloudflared\bin
Poi per installare dare il comando di installazione:
.\cloudflared.exe –version
Su Mac OS potete installarlo con brew:
brew install cloudflare/cloudflare/cloudflared
.deb install:
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && dpkg -i cloudflared-linux-amd64.deb
.rpm install:
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
Arch Linux:
pacman -Syu cloudflared
Dopo aver installato CloudFlared effettuiamo il login con questo comando sul Terminale/Powershell del sistema utilizzato:
cloudflared tunnel login
Creiamo il Tunnel:
cloudflared tunnel create <NAME>
Adesso per sapere tutte le info dei tunnel usiamo questo comando:
cloudflared tunnel list
Adesso dobbiamo creare il file (config.yml) di configurazione nella cartella .cloudflare (mia esperienza su ubuntu si trova nella cartella home del proprio utente) con un editor di testo:
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
warp-routing:
enabled: true
protocol: http2
ingress:
– hostname: subdom.dominio.ext
service: http://192.168.x.xx:8123
– service: http_status:404
Il file .json che inseriamo nella configurazione dovrebbe essere il file credenziali del tunnel che si è creato nella cartella .cloudflared nel momento in cui abbiamo creato il tunnel.
Ingress è la parte dove esponi l’indirizzo della tua app al dominio, infatti subdom.dominio.ext è l’url esterno e http://192.168.x.xx:8123 è l’url interna alla tua rete con la porta (se l’app ad esempio Home Assistant sono esposti su porta 80 o 443 non serve specificarla)
Adesso con questo con questo comando potete aggiungere il route dns del proprio dominio:
cloudflared tunnel route dns <UUID or NAME Tunnel> <hostname>
Aggiungiamo l’ip della rete da leggere così da poter esporre le app/siti dentro la tua rete (IP/CIDR esempio: 192.168.1.0/25):
cloudflared tunnel route ip add <IP/CIDR> <UUID or NAME Tunnel>
L’ultima cosa che rimane è avviare il Tunnel e se non avviato non espone:
cloudflared tunnel run <UUID or NAME>
Adesso bisogna creare il servizio di CloudFlared per l’avvio del tunnel automatico:
- Aprire CMD ed entrare nella cartella creata con il comando: cd c:\Cloudflared\bin
- Installare il servizio di Cloudflared con questo comando: cloudflared.exe service install
- Creiamo una cartella con il seguente comando: mkdir C:\Windows\System32\config\systemprofile\.cloudflared
- Copiamo il file cert.pem nella giusta cartella per rendere cloudflared un servizio con il seguente comando: copy C:\Users\%USERNAME%\.cloudflared\cert.pem C:\Windows\System32\config\systemprofile\.cloudflared\cert.pem
- Copiamo anche il file <Tunnel-ID>.json come prima: copy C:\Users\%USERNAME%\.cloudflared\<Tunnel-ID>.json C:\Windows\System32\config\systemprofile\.cloudflared\<Tunnel-ID>.json
- Nel registro di sistema modificare ImagePath qui così da puntare al file cloudflared.exe e config.yml: Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cloudflared
- Potete usare i seguenti comandi per avviare il servizio e stopparlo:
sc stop cloudflared
sc start cloudflared
Per Mac OS basta questo comando: sudo cloudflared service install
Per avviare il servizio serve questo comando: sudo launchctl start com.cloudflare.cloudflared
Se aggiungete IP o modificate configurazione dovete per forza riavviare:
sudo launchctl stop com.cloudflare.cloudflared
sudo launchctl start com.cloudflare.cloudflared
Per Linux basta questo comando: cloudflared service install
Per avviare il servizio serve questo comando: systemctl start cloudflared
Per vedere lo stato del servizio questo: systemctl status cloudflared
Se aggiungete IP o modificate configurazione dovete per forza riavviare: systemctl restart cloudflared
Adesso avete tutto funzionante e se il tunnel non funziona potete vedere il suo stato sulla dashboard online e poi agire tramite shell.
In questo articolo abbiamo visto come esporre e più avanti vedremo come avere più protezione e migliorare la configurazione di Cloudflare.
Appena avrò trovato il modo più sicuro e facile per entrare nella propria rete dall’esterno con VPN o altro farò una guida.
Qui: https://developers.cloudflare.com/cloudflare-one/ trovate tutta la documentazione di Cloudflare
P.S.: le protezioni aggiuntive che da Cloudflare le ho testate, ma mi danno problemi con alcuni servizi che ho integrato in Home Assistant (esempio: gli assistenti vocali) e devo trovare un modo per farglielo digerire.