VPNSmith
Outil gratuit - Xray et sing-box

Générateur de config VLESS + REALITY

Indiquez l'adresse de votre serveur et le site dont REALITY doit emprunter la poignée de main TLS. Le générateur crée la paire de clés X25519, l'UUID et le short ID, puis écrit les configs serveur et client correspondantes pour Xray-core ou sing-box, un lien vless:// à importer dans v2rayN, v2rayNG, Hiddify ou Shadowrocket, et les commandes d'installation. Les clés ne quittent jamais votre navigateur.

Tout se passe dans votre navigateur : clés, UUID et configs sont générés localement et ne sont envoyés nulle part.

L'IP publique de votre VPS (ou un domaine qui pointe dessus). Utilisée dans la config client et le lien de partage.

443 est la norme : REALITY imite le HTTPS.

Un site tiers en TLS 1.3 et HTTP/2, joignable depuis vos clients. Voir la liste de contrôle sous l'outil.

Empreinte uTLS (client)

L'empreinte TLS que le client imite. chrome est le choix habituel.

Paire de clés X25519

La clé privée va uniquement sur le serveur. La clé publique va à chaque client.

Hexadécimal, longueur paire, 16 caractères au plus.

  • Les clés manquent ou sont invalides (32 octets, base64url, 43 caractères). Générez une paire ou collez la vôtre.

Lien de partage vless://

vless://@203.0.113.10:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.example.com&fp=chrome&pbk=&sid=&type=tcp&headerType=none#my-reality

Importez-le dans v2rayN, v2rayNG, Hiddify, Streisand ou Shadowrocket, ou scannez le QR code.

config.json
{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "",
            "flow": "xtls-rprx-vision",
            "email": "my-reality"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "target": "www.example.com:443",
          "xver": 0,
          "serverNames": [
            "www.example.com"
          ],
          "privateKey": "",
          "shortIds": [
            ""
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls",
          "quic"
        ],
        "routeOnly": true
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}
client-xray.json
{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "udp": true
      }
    },
    {
      "listen": "127.0.0.1",
      "port": 10809,
      "protocol": "http"
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "tag": "proxy",
      "settings": {
        "vnext": [
          {
            "address": "203.0.113.10",
            "port": 443,
            "users": [
              {
                "id": "",
                "flow": "xtls-rprx-vision",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "serverName": "www.example.com",
          "fingerprint": "chrome",
          "publicKey": "",
          "shortId": "",
          "spiderX": "/"
        }
      }
    },
    {
      "protocol": "freedom",
      "tag": "direct"
    }
  ]
}
install.sh
# Installer Xray-core avec le script officiel (service systemd inclus)
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

# Facultatif : vérifier que la clé publique correspond à la clé privée
xray x25519 -i ""

# Vérifier que la cible répond en TLS 1.3 et HTTP/2
xray tls ping www.example.com

# Ouvrir le port
sudo ufw allow 443/tcp

# Coller la config serveur, la tester, puis démarrer le service
sudo nano /usr/local/etc/xray/config.json
xray run -test -c /usr/local/etc/xray/config.json
sudo systemctl restart xray && sudo systemctl enable xray

# Suivre le journal pendant la connexion du premier client
sudo journalctl -u xray -f

REALITY demande un serveur que vous contrôlez

Un serveur REALITY, c'est un VPS avec une IP publique et le port 443 libre, rien de plus. Le VPS d'entrée de gamme de Contabo inclut une IPv4 publique, l'accès root et un gros volume de trafic, et vous choisissez le datacenter le plus proche de vos utilisateurs.

Lien affilié : nous pouvons toucher une commission, sans surcoût pour vous. Le générateur reste gratuit et n'en dépend pas.

Voir le VPS Contabo

Le rôle de chaque valeur, et pourquoi elles doivent concorder

REALITY remplace le certificat TLS dont vous auriez normalement besoin. Votre serveur répond sur le port 443 comme le vrai site choisi comme cible : un censeur qui se connecte sans les bons identifiants reçoit la poignée de main et les pages du site authentique, relayées par votre serveur. Seul un client qui connaît la clé publique du serveur et un short ID valide termine la poignée de main du proxy.

D'où quatre valeurs qui doivent concorder des deux côtés. La clé privée reste sur le serveur, la clé publique va à chaque client. Le site cible doit figurer comme destination (target, ou dest dans les anciens guides ; handshake.server dans sing-box) et dans les noms de serveur acceptés, et le client l'envoie en SNI. Le short ID envoyé par le client doit faire partie de la liste du serveur. L'UUID identifie l'utilisateur, et xtls-rprx-vision doit être réglé des deux côtés, sinon la connexion est refusée.

Les configs ci-dessous s'en tiennent aux champs documentés : pas d'options sniff de sing-box dépréciées dans l'inbound, pas de transport superflu. Ajoutez des règles de routage ou d'autres utilisateurs une fois le tunnel de base fonctionnel.

Choisir le site cible : la liste de contrôle

La cible compte plus que tout autre champ, et aucun outil ne peut la choisir à votre place. Voici les points à vérifier avant de vous décider.

PointPourquoi c'est importantComment vérifier
TLS 1.3 et HTTP/2REALITY a besoin d'une poignée de main TLS 1.3 à imiterxray tls ping <hôte>, ou curl -I --tlsv1.3 --http2
Non bloqué là où sont vos clientsUne cible bloquée fait passer votre serveur pour un site bloquéOuvrez-la depuis le réseau du client, sans proxy
Plausible depuis le réseau du serveurUn petit VPS qui sert la page d'accueil d'un géant se remarque ; un hôte chez le même fournisseur ou dans la même région se fond mieuxComparez la localisation IP de la cible et le datacenter de votre VPS
Pas de redirection vers un autre domaineLe SNI doit correspondre au certificat réellement servi par la ciblecurl -sI https://<hôte> et cherchez un en-tête Location
Pas votre propre domaineLe but est de ressembler au vrai trafic de quelqu'un d'autreChoisissez un site tiers que vous ne contrôlez pas

Contourner des restrictions réseau est encadré ou interdit dans certains pays. Vérifiez ce qui s'applique là où vous et vos utilisateurs vous trouvez.

Questions fréquentes

Est-ce sûr de générer des clés REALITY dans une page web ?
Ici, la paire de clés est générée par l'implémentation WebCrypto (X25519) de votre navigateur et rien n'est envoyé à un serveur : vous pouvez couper le réseau une fois la page chargée, l'outil continue de fonctionner. Si vous préférez, lancez xray x25519 ou sing-box generate reality-keypair sur le serveur et collez la clé privée : le bouton Dériver calcule localement la clé publique correspondante.
Où trouver la clé publique si je n'ai que la clé privée ?
Collez la clé privée et appuyez sur Dériver la clé publique. Le résultat est le même que xray x25519 -i "<clé privée>", qui affiche la clé privée puis, sous le libellé Password (PublicKey), la clé publique dont les clients ont besoin.
La config est-elle compatible avec v2rayN, v2rayNG, Hiddify et Shadowrocket ?
Oui : importez le lien vless:// ou scannez le QR code. Le lien porte security=reality, la clé publique (pbk), le short ID (sid), le SNI, l'empreinte uTLS (fp) et flow=xtls-rprx-vision, que ces clients lisent. Si un client le refuse, mettez-le à jour : REALITY et Vision demandent un cœur récent.
Faut-il écrire dest ou target dans Xray ?
Xray-core actuel accepte les deux, et target est le nom employé dans ses propres messages d'erreur. La plupart des tutoriels écrivent encore dest. Le générateur écrit target côté serveur ; si un ancien cœur le refuse, renommez le champ en dest.
Faut-il un nom de domaine ou un certificat ?
Non. REALITY emprunte la poignée de main du site cible : le serveur n'a besoin ni de domaine ni de certificat, un VPS avec une IP publique et le port TCP 443 ouvert suffit. C'est l'une des raisons pour lesquelles il a remplacé VLESS sur WebSocket avec TLS dans les nouvelles installations.
Pourquoi le client se connecte-t-il sans qu'aucun site ne charge ?
En général, l'une de trois discordances : le short ID n'est pas dans la liste du serveur, la clé publique n'est pas la paire de la clé privée du serveur, ou flow n'est réglé que d'un côté. Consultez le journal du serveur avec journalctl, et si vous avez réglé maxTimeDiff (max_time_difference dans sing-box), vérifiez l'heure des deux machines : une dérive ressemble alors à une erreur de clé.