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

CGNAT_IP_RFC6598

Se date una controllata al vostro indirizzo IP sul router, dovreste avere, in effetti, un indirizzo del genere

CGNat_IP

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:

  1. Configurazione di un VPS e un port forward SSH/OpenVPN+iptables
  2. 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/

cloudflare_tunnel_architecture
Image courtesy of Cloudflare – Cloudflare Tunnel Architecture

La configurazione è molto semplice ma dovrete avere a disposizione i seguenti requisiti:

  • 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.

Auth_Tunnel_dominio

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 IDNessuna 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

Lascia un commento

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