Il certificato
Non ne hai bisogno per usare il telefono. Appena installato, senza configurare nulla, un giocatore inquadra il codice QR in Impostazioni › Dispositivi collegati e il suo vero smartphone diventa il telefono del suo personaggio: messaggi, mail, contatti, documento d’identità, garage, proprietà, bacheca, luoghi salvati. Tutto funziona tramite normale HTTP sulla porta che il tuo server ha già aperta.
Ciò che un certificato aggiunge è la parte che un browser si rifiuta di concedere a una pagina non sicura:
| HTTP normale | HTTPS | |
|---|---|---|
| Messaggi, mail, garage e tutto il resto | sì | sì |
| Notifiche a pagina chiusa | no | sì |
| Il microfono, per poter registrare note vocali | no | sì |
| Installazione come app su Android, con la propria icona | no | sì |
| Avviso “Non sicuro” nella barra degli indirizzi | mostrato | non mostrato |
| Il token di sessione | viaggia in chiaro | crittografato |
L’ultima riga non è un dettaglio estetico. Su HTTP normale, chiunque si trovi sulla stessa rete Wi-Fi del tuo giocatore può intercettare la sua sessione e leggere il suo telefono. Per una città roleplay può essere un compromesso accettabile, ma dovrebbe almeno essere una scelta consapevole anziché una sorpresa.
Quale di questi è il tuo caso
Sezione intitolata “Quale di questi è il tuo caso”Hai un dominio da far puntare al server — lascia che il telefono ottenga il proprio certificato
Sezione intitolata “Hai un dominio da far puntare al server — lascia che il telefono ottenga il proprio certificato”Questa è la strada più breve e non richiede nessun altro programma sulla macchina. La risorsa chiede un certificato a Let’s Encrypt, risponde da sola alla verifica, serve direttamente il protocollo TLS e rinnova il certificato in automatico per tutto il tempo in cui resta attiva.
-- shared/server_config.lua (server-only: this file is never sent to a client)ServerConfig.Web = { Url = 'https://phone.yourserver.com/', Https = { Enabled = true, Names = { 'phone.yourserver.com' }, },}Poi, una volta sola:
- Fai puntare quel nome al server. Su una VPS basta un record A. Non hai un tuo dominio?
duckdns.orgte ne regala uno in un minuto e non cambia mai. - Apri le porte 443 e 80 nel firewall. La porta 80 viene aperta solo mentre viene richiesto il certificato e richiusa non appena arriva la risposta — il log segnala entrambi i passaggi.
phonehttps mostra lo stato attuale del certificato. phonehttps check chiede al server di test di Let’s Encrypt se riesce a comunicare con questa macchina, che è la prima domanda a cui vale la pena rispondere quando non arriva nulla: separa i problemi del tuo firewall da quelli di questa risorsa.
Il rinnovo avviene da solo quando resta ancora un terzo di validità del certificato, con un controllo ogni sei ore.
Se il server è in casa, l’indirizzo IP cambia
Sezione intitolata “Se il server è in casa, l’indirizzo IP cambia”Un fornitore di rete domestica assegna un nuovo indirizzo IP quando gli pare e, nel momento in cui lo fa, il dominio punta al router di qualcun altro: i telefoni collegati non raggiungono più il server e il certificato non può rinnovarsi. Questa risorsa se ne accorge già — controlla il proprio indirizzo ogni mezz’ora per aggiornare il QR — e con un nome DuckDNS può anche correggerlo da sola:
-- shared/server_config.luaDuckDNS = { Enabled = true, Domains = { 'yourname' }, -- the part in front of .duckdns.org Token = '01d8b39f-...', -- from your duckdns.org page},Viene aggiornato quando l’indirizzo cambia, e una volta al giorno quando non cambia — il controllo giornaliero serve anche a rimettere le cose a posto dopo un’interruzione di internet, nel caso il cambio di IP sia avvenuto mentre non era possibile inviare nulla. Quando funziona, il log lo scrive e non scatta alcun allarme; quando fallisce, parte il consueto avviso che viene inviato anche al webhook Server.
Su una VPS l’indirizzo non cambia e nulla di tutto questo serve. Lascia Enabled = false.
Sei dietro il proxy di connessione di Cfx.re
Sezione intitolata “Sei dietro il proxy di connessione di Cfx.re”Non devi fare nulla. Se sv_listingHostOverride è impostato, il codice QR viene generato da solo come https://tuo.dominio/mic_phone/web/, perché quel proxy inoltra già l’intera radice al tuo server. Questo è il caso più semplice ed è già gestito in automatico.
Usi già un reverse proxy e preferisci continuare così
Sezione intitolata “Usi già un reverse proxy e preferisci continuare così”Basta una riga in shared/config/web.lua:
Url = 'https://phone.yourserver.com/mic_phone/web/',e davanti un reverse proxy che gestisca il TLS e inoltri il traffico alla porta di gioco. Con Caddy sono due righe nel Caddyfile:
phone.yourserver.com { reverse_proxy 127.0.0.1:30120}Con nginx, inoltra / a 127.0.0.1:30120 e disattiva il buffering (proxy_buffering off;), altrimenti il flusso di eventi (event stream) verrà trattenuto e il telefono smetterà di ricevere aggiornamenti in tempo reale.
Una cosa che non funziona: attivare la nuvoletta arancione di Cloudflare su un record DNS che punta alla porta 30120. Il proxy di Cloudflare accetta solo un elenco fisso di porte di origine — 80, 8080, 8880, 2052, 2082, 2086, 2095 e 443, 2053, 2083, 2087, 2096, 8443 — e la 30120 non è tra queste. Ti serve un tuo proxy davanti, come mostrato sopra.
Noleggi il server presso un servizio di hosting
Sezione intitolata “Noleggi il server presso un servizio di hosting”Non puoi installare programmi aggiuntivi su quella macchina — ma non serve: la prima opzione qui sopra non installa nulla, fa tutto questa risorsa. Ciò che ti serve dal tuo host sono due porte dedicate a te, la 443 e la 80, e un dominio che punti al server. Molti host le forniscono entrambe, mentre alcuni condividono quelle porte tra tutti i clienti sulla stessa macchina e non te ne daranno nessuna. Chiedi le porte all’assistenza prima di qualsiasi altra cosa; se la risposta è negativa, fai puntare un dominio a un tunnel Cloudflare con nome (named tunnel).
Non puoi aprire alcuna porta — non hai un dominio o il tuo operatore blocca le porte
Sezione intitolata “Non puoi aprire alcuna porta — non hai un dominio o il tuo operatore blocca le porte”Allora usa un tunnel: tools/tunnel.ps1 avvia un quick tunnel di Cloudflare, scrive l’indirizzo ottenuto nella configurazione e ti dice di riavviare la risorsa. Nessuna porta da aprire e nessun certificato da gestire.
Sappi però di cosa si tratta: un tunnel rapido (quick) è temporaneo per natura. L’indirizzo è casuale e ne viene generato uno nuovo ogni volta che il tunnel si riavvia — e poiché un browser lega l’app installata, il token salvato e l’iscrizione alle notifiche push all’indirizzo da cui provengono, ognuna di queste cose va riconfigurata da capo a ogni riavvio. È pensato per fare delle prove. Per qualsiasi soluzione che debba sopravvivere a un riavvio, fai puntare un dominio a un tunnel con nome (named), che mantiene fisso il proprio indirizzo — questo richiede un account Cloudflare e un dominio associato.
Una nota sul flusso di eventi (event stream)
Sezione intitolata “Una nota sul flusso di eventi (event stream)”Il telefono mantiene aperta una connessione prolungata per ricevere i messaggi man mano che arrivano, e la apre con una richiesta POST anziché con la consueta GET di EventSource. Ci sono due motivi, entrambi utili da sapere se stai mettendo un proxy davanti al server:
- Un token passato nella query string finisce scritto nei log di ogni singolo proxy tra il telefono e il server. Nel corpo di una richiesta POST, no.
- Un quick tunnel di Cloudflare trattiene chiuso un event-stream in GET finché il server non chiude la connessione, mentre lascia passare regolarmente una POST (cloudflared#1449). Moltissimi proxy applicano il buffering ai flussi GET per impostazione predefinita.
Il server risponde comunque anche alle richieste GET sugli stessi percorsi, per compatibilità con qualsiasi strumento che conosca solo EventSource.