Il Carrier-Grade NAT (o CGNAT) è un protocollo utilizzato dagli ISP per risparmiare gli indirizzi IPv4 pubblici assegnati ai propri clienti. Infatti, questo servizio permette all’ISP di assegnare un IP “privato” agli abbonati, facendo utilizzare un solo unico IP pubblico comune a tutti.
Secondo l’RFC 6598, la classe di indirizzi IPv4 interni che l’ISP dovrebbe usare per un CGNAT è 100.64.0.0/10
Se date una controllata al vostro indirizzo IP sul router, dovreste avere, in effetti, un indirizzo del genere
Il problema che può sorgere in queste condizioni è chiaro, visto che non ho un indirizzo IPv4 dedicato. Come faccio se ho un server nella mia rete che deve essere pubblicato su internet? Si pensi ad un webserver, cloud personale, etc…
Le opzioni che potreste avere, se cercate su Google, potrebbero essere:
- Configurazione di un VPS e un port forward SSH/OpenVPN+iptables
- ngrok
Nel mio caso, non volevo spendere per avere un VPS e non volevo creare regole sul mio firewall interno. Ancor meno, avrei voluto usare ngrok per i miei motivi.
Installiamo Cloudflare Tunnel su una macchina Linux
Questo servizio, crea una connessione in uscita attraverso Cloudflare, il quale reindirizzerà il traffico interno su un tunnel protetto verso il vostro server interno. Cloudflare gestisce anche i certificati SSL per criptare la vostra connessione. Tutto questo, se non ve l’ho detto è GRATIS per tutti. Grazie Cloudflare!
https://blog.cloudflare.com/tunnel-for-everyone/
- Avere un dominio
- Sostituire i DNS del provider del dominio con quelli di Cloudflare (con questa loro semplice guida)
- Importare il dominio in Cloudflare
- Avere un server (o computer, o VM…) dove installare il servizio di Cloudflare Tunnel
- Avere un account Cloudflare (seguite la guida se avete difficoltà)
Connessione SSH al vostro server
Collegatevi al vostro server interno e scaricate ed installate Cloudflare Tunnel
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared chmod +x cloudflared sudo mv cloudflared /usr/local/bin/
Login a Cloudflare per attivare il serviziocloudflared tunnel login
Quello che dovreste ottenere sarà:
Please open the following URL and log in with your Cloudflare account: https://dash.cloudflare.com/argotunnel?callback=<ID-rimosso> Leave cloudflared running to download the cert automatically. 2022-01-11T12:16:23Z INF Waiting for login... 2022-01-11T12:16:46Z INF Waiting for login... You have successfully logged in. If you wish to copy your credentials to a server, they have been saved to: /var/home/user/.cloudflared/cert.pem
Copiate l’indirizzo https://dash.cloudflare.com/argotunnel?…. incollatelo nel browser e collegatevi al sito. Vi chiederà di fare il login e di selezionare il dominio che avete inserito nel portale.
Create un tunnel
Usate un nome a piacere. Io ho usato “argo“. Utilizzerò un solo tunnel per avere più servizi pubblicati (voi potete pubblicarne anche solo uno).
cloudflared tunnel create argo
Dovreste ottenere questo:
Tunnel credentials written to /var/home/user/.cloudflared/1234-5678-9876.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel. Created tunnel argo with id 1234-5678-9876
Avete creato un tunnel (di nome “argo”) e avete ottenuto un ID. Nessuna connessione è ancora attiva al momento.
Create un file di configurazione che ridirigerà le connessioni verso i vostri servizi interni
cd sudo nano .cloudflared/config.yml
cat .cloudflared/config.yml
tunnel: 1234-5678-9876.json # the UUID of the tunnel credentials-file: /var/home/user/.cloudflared/1234-5678-9876.json # the credentials file generated ingress: - hostname: sito.com service: http://IP-INTERNO:80 - hostname: altrosito.com service: http://ALTRO.IP-INTERNO:80 - service: http_status:404 # Catch-all rule, which responds with 404 if traffic doesn't match any of # the earlier rules
Ora che il file di configurazione è completato, impostate il routing con l’ID verso il vostro sito
cloudflared tunnel route dns 1234-5678-9876 sito.com 2022-01-11T12:36:13Z INF Added CNAME sito.com which will route to this tunnel tunnelID=1234-5678-9876
Quindi avviate la connessione
cloudflared tunnel --config ~/.cloudflared/config.yml run argo
Vedrete delle connessioni stabilirsi sui vari server europei di Cloudflare.
Collegatevi ora al vostro sito (sito.com) definito sopra e verificate che possiate accedervi da internet.
Per verificare se un tunnel è attivo:
cloudflared tunnel info
Per vedere la lista di tutti i tunnel creati:
cloudflared tunnel list
Per rimuovere un tunnel e forzare la chiusura di tutte le connessioni:
cloudflared tunnel delete -f <NOMETUNNEL>
Se volete installare Cloudflare Tunnel come servizio:
cloudflared service install systemctl enable cloudflared systemctl start cloudflared