Questa guida alla configurazione del server Xray VLESS Reality ti illustra come implementare un proxy moderno sul tuo VPS. VLESS con il livello di sicurezza di trasporto Reality è attualmente la configurazione proxy self-hosted più richiesta : a differenza di una VPN classica, non produce un handshake distintivo o una firma di pacchetto fissa. Reality clona l'handshake TLS 1.3 di un sito web reale e popolare (il target), quindi per un sistema DPI che monitora la rete, una connessione al tuo server appare identica a quella di qualcuno che visita quel sito web: non c'è un certificato falso o autofirmato da identificare, perché il tuo server inoltra brevemente il certificato effettivo del sito target durante l'handshake.
Lo stack di protocolli è composto da: VLESS (un protocollo proxy leggero e senza stato che gestisce l'autenticazione) in esecuzione su XTLS Vision (una modalità di controllo del flusso che velocizza la connessione copiando i record TLS già crittografati a livello di socket raw) protetto da Reality (il livello di camuffamento descritto in precedenza). Tutti e tre provengono dallo stesso progetto, Xray-core, il successore attivamente mantenuto del progetto originale V2Ray/V2Fly.
Questa guida configura un server Xray manualmente, interamente da riga di comando, senza pannello web e senza Docker: il minimo ingombro possibile sul VPS. Non è necessario alcun nome di dominio né l'acquisto di un certificato TLS: Reality utilizza il certificato del sito di destinazione per l'handshake e non ne presenta mai uno proprio. Successivamente, dove compare la dicitura your_IP, dovrai inserire il tuo indirizzo IP assegnato.
Cosa ti servirà: un VPS con Ubuntu 22.04/24.04 o Debian 11/12, accesso root, l'indirizzo IP del tuo VPS e la porta TCP 443 libera (nessun server web, pannello di controllo o altro proxy già in ascolto su di essa).
Non hai ancora un server? Consulta la pagina Come ordinare un server e pagarlo.
Prima di procedere, vuoi confrontare questa soluzione con altre opzioni di self-hosting. Consulta la Guida alla distribuzione del server AmneziaWG per un'alternativa basata su WireGuard, oppure la configurazione di Hysteria2 e TUIC per altri due protocolli moderni e resistenti alla censura.
Connessione al server
Windows (PuTTY)
Apri PuTTY, inserisci l'indirizzo IP del tuo VPS nel campo Nome host, imposta la porta su 22 ed effettua l'accesso come root utilizzando la password che il tuo provider VPS ti ha inviato via email.
Indirizzo IP del server: il tuo indirizzo IP
Accedi come: root
Password: la tua password
- Apri PuTTY e inserisci l'indirizzo IP del tuo VPS nel campo Nome host.
- Imposta la porta su 22.
- Accedi come root.
- Utilizza la password che ti ha inviato via email il tuo provider VPS. Dovresti quindi accedere al prompt della shell del server.
Per una guida dettagliata su come connettersi tramite PuTTY/SSH, consultare la pagina Come connettersi a un server Linux tramite SSH.
Linux / macOS (terminale)
ssh root@your_IP
Tutti i comandi seguenti vengono eseguiti sul server, nella stessa sessione SSH: ciò copre le Sezioni da 2 a 6, oltre ai controlli lato server nella Sezione 10. Le Sezioni da 7 a 9 (installazione e configurazione del client VPN) vengono invece eseguite sul tuo dispositivo Windows/Android/iOS, poiché è su questo dispositivo che deve essere eseguito il proxy; ciascuna di queste sezioni specifica esplicitamente quali passaggi, se presenti, coinvolgono ancora il server.
Preparazione del server
Aggiorna il sistema
Prima di installare qualsiasi cosa, aggiorna l'elenco dei pacchetti e aggiorna i pacchetti già installati:
apt update -y && apt upgrade -y
Se la sessione viene interrotta dopo l'aggiornamento con apt, è normale (dbus/polkit riavviati): basta riconnettersi tramite SSH.
Se questo aggiorna il kernel, è consigliabile riavviare il sistema prima di continuare. (Per un ripasso su apt e sul funzionamento dei gestori di pacchetti Linux, vedere Gestori di pacchetti Linux .) Verificare con:
cat /var/run/reboot-required
Se il file esiste, riavvia prima con 'reboot', attendi circa 30 secondi, quindi riconnettiti.
Installa gli strumenti utilizzati in questa guida
apt install -y curl wget unzip openssl ufw qrencode
Curl e unzip sono necessari per l'installazione stessa di Xray; openssl genera l'ID breve nella Sezione 4; ufw è il firewall configurato di seguito; qrencode trasforma il link client finale in un codice QR scansionabile nella Sezione 7.
Controlla l'orologio di sistema
La procedura di handshake della realtà include un controllo del timestamp (il campo maxTimeDiff, disabilitato per impostazione predefinita ma utile da conoscere), e un orologio che ha subito una deriva evidente può anche causare malfunzionamenti nella normale convalida del certificato TLS in altre parti del server. Verificare che l'orologio sia sincronizzato:
timedatectl status
Se "Sincronizzazione orologio di sistema" mostra "no", abilitala con:
timedatectl set-ntp true
Configurare il firewall (UFW)
Per ulteriori informazioni sulle regole UFW, consultare la sezione "Configurazione del firewall su Linux".
Apri le due porte necessarie: la 22/tcp per SSH (saltando questa regola rischi di perdere l'accesso al server) e la 443/tcp, la porta su cui Xray sarà in ascolto e la stessa porta utilizzata dal normale traffico HTTPS, motivo per cui è la scelta giusta per Reality.
ufw allow 22/tcp
ufw allow 443/tcp
ufw --force enable
ufw status
Entrambe le regole dovrebbero risultare come CONSENTITE nell'output di stato di ufw.
Installazione di Xray-core per VLESS Reality Server
Il progetto Xray-core (XTLS) pubblica uno script ufficiale di installazione e aggiornamento che installa il binario come servizio systemd. Prima di utilizzare script di terze parti, è fondamentale esaminarli attentamente; questo script proviene direttamente dal repository ufficiale del progetto.
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
Verifica che il file binario sia presente nella posizione corretta e controlla la versione installata:
/usr/local/bin/xray version
Se l'output del comando è impaginato e sembra bloccarsi, premere Q per uscire. Il binario Xray è installato su /usr/local/bin/xraye i suoi file di configurazione sono memorizzati in /usr/local/etc/xray/.
È possibile utilizzare lo stesso script di installazione anche per aggiornare un'installazione esistente. Per un elenco completo delle opzioni (inclusi rimozione, aggiornamenti solo dei dati geografici e rotazione dei log), eseguire:
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" --help
Generazione delle chiavi e delle credenziali
L'autenticazione della realtà si basa su quattro dati. Generali tutti ora; li incollerai nella configurazione del server nella Sezione 5.
Genera un UUID per il client
/usr/local/bin/xray uuid
Questo è l'ID utente VLESS: trattalo come una credenziale, poiché è ciò che autentica un client al server. Esegui nuovamente il comando per ogni dispositivo o persona aggiuntiva a cui desideri concedere l'accesso.
Genera la coppia di chiavi Reality X25519
/usr/local/bin/xray x25519
Vengono stampate tre righe: PrivateKey , Password e Hash32 . PrivateKey viene inserita solo nella configurazione del server e non deve mai essere condivisa. Password è la chiave pubblica corrispondente: nonostante il nome, questo è il valore inserito da ogni client; Xray ha rinominato il campo da PublicKey a Password proprio per scoraggiare la pubblicazione incauta. Hash32 viene utilizzato solo per la funzionalità di crittografia VLESS separata e non è necessario per una configurazione Reality.
Genera un ID breve
openssl rand -hex 8
Questo genera una stringa esadecimale di 16 caratteri utilizzata per distinguere client o gruppi di client diversi. Sia il server che il client devono utilizzare lo stesso valore.
Scegli e testa un obiettivo di realtà
Il target è il sito web reale di cui il tuo server emula l'handshake TLS. Dovrebbe supportare TLS 1.3 e HTTP/2, non deve trovarsi dietro una CDN come Cloudflare (Xray inoltra qualsiasi traffico che non superi l'autenticazione Reality direttamente al target, quindi un target con CDN può trasformare il tuo server in un relay aperto per quella CDN) e idealmente dovrebbe essere ospitato all'incirca nella stessa regione di rete del tuo VPS per un profilo di latenza plausibile. Testa un candidato direttamente dal server:
/usr/local/bin/xray tls ping www.microsoft.com:443
Utilizza il nome host puro, non un URL. Alcuni domini comunemente usati come target per Reality perché stabili, compatibili con TLS 1.3 e non basati su CDN sono: www.microsoft.com, addons.mozilla.org, dl.google.com. Provane alcuni e scegline uno che risponda in modo affidabile dalla posizione del tuo VPS; utilizzerai lo stesso nome host sia come target che come voce serverNames nella Sezione 5.
Scrittura della configurazione del server
Esegui un backup della configurazione fornita con il programma di installazione, quindi apri il file per modificarlo:
cp /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.orig
nano /usr/local/etc/xray/config.json
Aprire il file di configurazione per modificarlo:
nano /usr/local/etc/xray/config.json
Sostituisci l'intero file con il modello seguente, sostituendo il tuo UUID, PrivateKey, short ID e target hostname dalla Sezione 4 (e la porta che hai aperto nella Sezione 2, se l'hai modificata da 443):
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"users": [
{
"id": "YOUR-UUID-HERE",
"flow": "xtls-rprx-vision",
"email": "client1"
}
],
"decryption": "none"
},
"streamSettings": {
"method": "raw",
"security": "reality",
"realitySettings": {
"show": false,
"target": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"privateKey": "YOUR-SERVER-PRIVATE-KEY",
"shortIds": ["YOUR-SHORT-ID"]
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" },
{ "protocol": "blackhole", "tag": "blocked" }
]
}
Premi Ctrl+O (WriteOut) per salvare il file.
Premi Invio per confermare il nome del file.
Premi Ctrl+X per uscire da nano.
I campi importanti: users[].id è l'UUID della Sezione 4; users[].flow attiva XTLS Vision; method (precedentemente chiamato network) seleziona il trasporto RAW, il metodo basato su TCP richiesto da Reality; target e serverNames sono il sito testato nella Sezione 4; privateKey è la chiave X25519 lato server, mai il valore Password; shortIds elenca tutti gli short ID che i client sono autorizzati a presentare. Per aggiungere altri utenti in seguito, aggiungi ulteriori oggetti all'array users, ciascuno con il proprio UUID e etichetta email, quindi riavvia il servizio.
Dalla versione 26.3.27 di Xray, una richiesta Reality in entrata senza un campo minClientVer esplicito impone come predefinita la versione del core del server: le app client meno recenti (una build v2rayN, v2rayNG o Streisand obsoleta che include una versione precedente di Xray-core) vengono reindirizzate silenziosamente alla pagina di fallback del target anziché connettersi, senza alcun errore nel client e senza anomalie evidenti nel log del server. Se un client che prima funzionava improvvisamente va in timeout dopo un aggiornamento, provare prima ad aggiornare l'app client stessa; se ciò non è possibile, aggiungere "minClientVer": "25.9.11" (o un'altra versione precedente) all'interno di realitySettings, a costo di rendere l'impronta digitale TLS di quel client meno recente leggermente meno coerente con un browser moderno.
Convalida e riavvia
Prima di riavviare il servizio attivo, verifica la configurazione: in questo modo potrai individuare errori di battitura JSON e campi non supportati prima che il proxy si blocchi.
/usr/local/bin/xray run -test -c /usr/local/etc/xray/config.json
Avvio del servizio e abilitazione dell'avvio automatico
Riavvia Xray con la nuova configurazione e abilita l'avvio automatico all'avvio del sistema:
systemctl enable --now xray
systemctl restart xray
systemctl status xray --no-pager
Lo stato dovrebbe indicare attivo (in esecuzione). Verifica che qualcosa sia effettivamente in ascolto sulla porta 443:
ss -lntp | grep ':443'
Se Xray non si avvia, il modo più rapido per scoprirne il motivo è consultare il journal di systemd (per informazioni generali sulla lettura dei log di Linux, vedere Come leggere i log di Linux e dove trovarli ):
journalctl -u xray -n 50 --no-pager
Creazione del collegamento di connessione con il cliente
I client Xray importano un singolo link di condivisione vless:// anziché un file di configurazione. Crealo a partire dai valori generati nella Sezione 4 (il formato del link di condivisione delle app client utilizza ancora il vecchio nome type=tcp per il trasporto, anche se il campo JSON stesso ora si chiama method):
IL TUO UUID — dall'UUID di xray (es. a1b2c3d4-e5f6-7890-abcd-ef1234567890)
YOUR-PASSWORD-PUBLIC-KEY — è la password di xray x25519 (NON la chiave privata!)
IL TUO ID BREVE — da openssl rand -hex 8 (es. a1b2c3d4e5f67890)
your_IP — (indirizzo IP del tuo server)
SNI — www.microsoft.com (o il tuo obiettivo)
vless://YOUR-UUID-HERE@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server
Collegamento di esempio:
vless://a1b2c3d4-e5f6-7890-abcd-ef1234567890@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=xyz_public_key_here&sid=a1b2c3d4e5f67890&type=tcp&flow=xtls-rprx-vision#My-Xray-Server
pbk è il valore della password di xray x25519 (la chiave pubblica, mai la chiave privata), sni corrisponde al nome host di destinazione e il testo dopo # è solo un'etichetta di visualizzazione che puoi rinominare liberamente in qualsiasi client.
Trasformalo in un codice QR in modo che i client mobili possano scansionarlo direttamente:
qrencode -o ~/vless-client.png "vless://YOUR-UUID@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server"
Oppure stampalo direttamente sul terminale senza salvare un file:
qrencode -t ansiutf8 "vless://YOUR-UUID@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server"
Copia il file PNG sul tuo computer usando scp, eseguendo il comando dal terminale del tuo computer (o PowerShell su Windows), non dal server:
scp root@your_IP:~/vless-client.png .
Connessione da Windows
In questa sezione tutto avviene sul tuo PC Windows, non tramite SSH: il client deve essere eseguito sul dispositivo che utilizzerà effettivamente il proxy.
Installa v2rayN
v2rayN è un client GUI gratuito e attivamente mantenuto che include Xray-core, con supporto nativo per VLESS/Reality. Scarica l'ultima versione dalla pagina del progetto :
Scarica il file .zip per Windows a 64 bit (nelle versioni più recenti di v2rayN, la build autonoma non richiede un runtime .NET separato), estrailo in una cartella a tua scelta ed esegui v2rayN.exe.
Importa il server
Copia il link vless:// creato nella Sezione 7 negli appunti (oppure copia il codice QR PNG con scp e aprilo), quindi in v2rayN seleziona Server e poi Importa URL in blocco dagli appunti (oppure scansiona il codice QR tramite lo scanner integrato). Il nuovo profilo server apparirà nell'elenco con l'etichetta che hai impostato dopo il #.
Fai clic con il pulsante destro del mouse sul profilo e selezionalo come attivo, quindi abilita il proxy di sistema (o la modalità TUN, per instradare l'intera macchina) dalla barra degli strumenti della finestra principale.
Connessione da Android
Qui tutto avviene sul tuo dispositivo Android, non tramite SSH.
Installa v2rayNG
v2rayNG è la controparte Android di v2rayN, sviluppata dallo stesso team, ed è il client Xray più utilizzato su Android. Installalo da Google Play oppure scarica l'APK direttamente dalla pagina delle release del progetto se Play non è disponibile nella tua regione:
Importa il server
Apri v2rayNG, tocca il pulsante + in alto a destra e scegli Importa configurazione dagli appunti dopo aver copiato il link vless:// oppure Scansiona il codice QR e inquadra con la fotocamera l'immagine PNG generata nella Sezione 7. Tocca il profilo importato per selezionarlo, quindi tocca il pulsante rotondo di connessione in basso. Android richiederà l'autorizzazione VPN la prima volta: approvala per stabilire il tunnel.
Connessione da iOS
Qui tutto avviene sul tuo iPhone o iPad, non tramite SSH. Le linee guida dell'App Store di Apple prevedono che i client Xray/VLESS su iOS siano in genere gratuiti, ma occasionalmente a pagamento, e siano applicazioni standalone, piuttosto che una funzionalità integrata nel sistema.
Installa un client compatibile con la realtà
Streisand è un client gratuito e open-source che supporta VLESS con Reality, oltre a diversi altri protocolli. Cercatelo nell'App Store o aprite questo link.
I cataloghi dell'App Store variano a seconda della piattaforma/regione e possono cambiare nel tempo; se Streisand non è presente nel tuo catalogo, tra le alternative con supporto VLESS+Reality ci sono Happ, V2Box e V2rayTun: cerca nell'App Store quella disponibile per il tuo account.
Importa il server
Copia il link vless:// negli appunti, apri il client e usa l'opzione "Aggiungi dagli appunti" (o l'equivalente "Importa") oppure scansiona il codice QR della Sezione 7 con lo scanner integrato del client. Attiva il nuovo profilo; iOS richiederà l'autorizzazione per la configurazione VPN la prima volta, che dovrai approvare tramite Face ID, Touch ID o il tuo codice di accesso.
Verifica della connessione
Con il tunnel attivo dalla Sezione 8, 9 o 10, torna al tuo dispositivo (non alla sessione SSH) e apri un qualsiasi strumento di verifica dell'indirizzo IP in un browser: l'indirizzo visualizzato dovrebbe corrispondere all'indirizzo IP del tuo VPS.
Per verificare dal lato server, invece, controlla il registro di sistema per l'attività di connessione e conferma che sia stata stabilita una sessione TCP sulla porta 443:
journalctl -u xray -n 50 --no-pager
ss -tnp | grep ':443'
Al livello di log predefinito "warning", Xray non visualizza molte informazioni sulle singole connessioni; se è necessario visualizzare maggiori dettagli durante la risoluzione dei problemi, impostare temporaneamente "loglevel": "info" in config.json e riavviare il servizio, quindi riportarlo al livello "warning" una volta che tutto funziona correttamente.
Riferimento:
|
Settore |
Valore |
|
Indirizzo |
l'indirizzo IP pubblico del tuo VPS |
|
Porto |
443 (lo stesso porto aperto nella Sezione 2) |
|
UUID / ID |
YOUR-UUID-HERE — generato nella Sezione 4 con uuid xray |
|
Flow |
xtls-rprx-vision — deve corrispondere su entrambi i lati |
|
Sicurezza |
la realtà |
|
SNI / nome_server |
Il nome host di destinazione testato nella Sezione 4, ad esempio www.microsoft.com |
|
Impronta digitale (fp) |
Chrome — un'impronta digitale uTLS supportata; deve essere impostata sul client |
|
Chiave pubblica / pbk |
Il valore della password da xray x25519 — mai la chiave privata |
|
ID breve / sid |
Generato con openssl rand -hex 8; deve corrispondere a un valore in shortIds |
Conclusione
Seguendo questa guida, il tuo VPS eseguirà un proprio server Xray VLESS+Reality, mascherato da normale traffico HTTPS verso un sito web reale, senza dominio né certificato da gestire. Il servizio viene eseguito come unità systemd xray e sopravvive al riavvio senza alcun intervento da parte tua.
È possibile aggiungere nuovi client in qualsiasi momento aggiungendo un altro oggetto all'array degli utenti in config.json con un nuovo UUID da xray uuid e un'etichetta email univoca, quindi riavviando il servizio (systemctl restart xray) e creando per quell'utente il proprio link di condivisione come descritto nella Sezione 7. Gli UUID separati per persona o dispositivo consentono di revocarne uno senza interferire con gli altri.
Ecco alcune abitudini da mantenere anche dopo l'avvio del server:
- Mantieni Xray aggiornato. Esegui periodicamente lo script di installazione della Sezione 3 (aggiorna un'installazione esistente) e mantieni aggiornate anche le app client, dato il comportamento di minClientVer descritto nella Sezione 5.
- Eseguite un backup del file config.json in un luogo privato al di fuori del server. Contiene la chiave privata Reality del server e l'UUID di ogni client; perderlo significherebbe dover rigenerare le credenziali per ogni dispositivo.
- Revocare immediatamente i dispositivi smarriti. Rimuovere la voce corrispondente dall'array degli utenti nel file config.json e riavviare il servizio.
Se la connessione non si stabilisce, controlla in quest'ordine:
- lo stato del servizio (systemctl status xray --no-pager) e il registro (journalctl -u xray -n 50 --no-pager)
- le regole del firewall (ufw status — la porta 443/tcp deve essere aperta)
- che la porta 443 non sia già occupata da un altro servizio (ss -lntp | grep ':443' dovrebbe mostrare solo xray)
- che l'UUID, la chiave pubblica, l'ID breve, l'SNI e il flusso nel client corrispondano esattamente a config.json: anche un solo carattere non corrispondente fa fallire l'handshake silenziosamente.
- il bersaglio della realtà stesso, con ping xray tls :443, nel caso in cui il sito abbia modificato la sua configurazione TLS
Stai confrontando Xray con altre opzioni? Consulta la Guida alla distribuzione del server AmneziaWG e Come configurare WireGuard VPN sul tuo server per alternative basate su WireGuard, oppure la configurazione di Hysteria2 e TUIC per altri due protocolli resistenti alla censura, progettati per reti con perdita di pacchetti o fortemente filtrate. Se ti serve solo un semplice proxy anziché una configurazione di tunneling completa, la configurazione di 3proxy su CentOS/ArchLinux è un'alternativa molto più leggera, e la vecchia configurazione del server VPN su Linux: PPTP o OpenVPN? illustra protocolli più semplici da configurare ma molto più facili da rilevare e bloccare per i sistemi DPI. Per la protezione generale del server una volta che il proxy è attivo, consulta Utenti Linux: Gestione e autorizzazioni.