VPNSmith
Herramienta gratuita - Xray y sing-box

Generador de configuración VLESS + REALITY

Introduce la dirección de tu servidor y el sitio del que REALITY debe tomar prestado el handshake TLS. El generador crea el par de claves X25519, el UUID y el short ID, y escribe las configuraciones de servidor y cliente para Xray-core o sing-box, un enlace vless:// para importar en v2rayN, v2rayNG, Hiddify o Shadowrocket, y los comandos de instalación. Las claves nunca salen de tu navegador.

Todo ocurre en tu navegador: claves, UUID y configuraciones se generan en local y no se envían a ningún sitio.

La IP pública de tu VPS (o un dominio que apunte a ella). Se usa en la configuración del cliente y en el enlace.

443 es lo habitual: REALITY imita HTTPS.

Un sitio de terceros con TLS 1.3 y HTTP/2, accesible desde tus clientes. Mira la lista de comprobación bajo la herramienta.

Huella uTLS (cliente)

La huella TLS que imita el cliente. chrome es la opción habitual.

Par de claves X25519

La clave privada va solo en el servidor. La pública va a cada cliente.

Hexadecimal, longitud par, hasta 16 caracteres.

  • Faltan las claves o no son válidas (32 bytes, base64url, 43 caracteres). Genera un par o pega el tuyo.

Enlace vless:// para compartir

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

Impórtalo en v2rayN, v2rayNG, Hiddify, Streisand o Shadowrocket, o escanea el código QR.

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
# Instalar Xray-core con el script oficial (servicio systemd incluido)
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

# Opcional: confirmar que la clave pública corresponde a la privada
xray x25519 -i ""

# Comprobar que el destino responde en TLS 1.3 y HTTP/2
xray tls ping www.example.com

# Abrir el puerto
sudo ufw allow 443/tcp

# Pegar la configuración del servidor, probarla y arrancar el servicio
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

# Seguir el registro mientras se conecta el primer cliente
sudo journalctl -u xray -f

REALITY necesita un servidor que controles

Un servidor REALITY es un VPS con IP pública y el puerto 443 libre, nada más. El VPS de entrada de Contabo incluye IPv4 pública, acceso root y mucho tráfico, y puedes elegir el datacenter más cercano a tus usuarios.

Enlace de afiliado: podemos recibir una comisión, sin coste extra para ti. El generador sigue siendo gratuito y no depende de ello.

Ver el VPS de Contabo

Qué hace cada valor y por qué deben coincidir

REALITY sustituye al certificado TLS que normalmente necesitarías. Tu servidor responde en el puerto 443 como el sitio real que elegiste como destino: un censor que se conecta sin las credenciales correctas recibe el handshake y las páginas del sitio auténtico, reenviados por tu servidor. Solo un cliente que conoce la clave pública del servidor y un short ID válido completa el handshake del proxy.

Por eso cuatro valores deben coincidir en ambos lados. La clave privada se queda en el servidor y la pública va a cada cliente. El sitio destino debe aparecer como destino (target, o dest en guías antiguas; handshake.server en sing-box) y en los nombres de servidor aceptados, y el cliente lo envía como SNI. El short ID que envía el cliente debe estar en la lista del servidor. El UUID identifica al usuario, y xtls-rprx-vision debe configurarse en ambos extremos o la conexión se rechaza.

Las configuraciones de abajo se limitan a los campos documentados: sin opciones sniff obsoletas de sing-box en el inbound y sin transportes de más. Añade reglas de enrutamiento u otros usuarios cuando el túnel básico funcione.

Elegir el sitio destino: lista de comprobación

El destino importa más que cualquier otro campo, y ninguna herramienta puede elegirlo por ti. Estas son las propiedades que debes comprobar antes de decidir.

ComprobaciónPor qué importaCómo verificarlo
TLS 1.3 y HTTP/2REALITY necesita un handshake TLS 1.3 que imitarxray tls ping <host>, o curl -I --tlsv1.3 --http2
No bloqueado donde están tus clientesUn destino bloqueado hace que tu servidor parezca un sitio bloqueadoÁbrelo desde la red del cliente sin proxy
Plausible desde la red de tu servidorUn VPS pequeño que sirve la portada de un gigante llama la atención; un host del mismo proveedor o región pasa más desapercibidoCompara la ubicación IP del destino con el datacenter de tu VPS
Sin redirección a otro dominioEl SNI debe coincidir con el certificado que sirve realmente el destinocurl -sI https://<host> y busca una cabecera Location
No es tu propio dominioLa idea es parecer tráfico real de otra personaElige un sitio de terceros que no controles

Eludir restricciones de red está restringido o es ilegal en algunas jurisdicciones. Comprueba qué se aplica donde estáis tú y tus usuarios.

Preguntas frecuentes

¿Es seguro generar claves REALITY en una página web?
Aquí el par de claves lo genera la implementación WebCrypto (X25519) de tu navegador y no se envía nada a ningún servidor: puedes desconectarte de la red tras cargar la página y la herramienta sigue funcionando. Si lo prefieres, ejecuta xray x25519 o sing-box generate reality-keypair en el servidor y pega la clave privada: el botón Derivar calcula la clave pública correspondiente en local.
¿Dónde encuentro la clave pública si solo tengo la privada?
Pega la clave privada y pulsa Derivar clave pública. El resultado es el mismo que xray x25519 -i "<clave privada>", que muestra la clave privada y, con la etiqueta Password (PublicKey), la clave pública que necesitan los clientes.
¿La configuración es compatible con v2rayN, v2rayNG, Hiddify y Shadowrocket?
Sí: importa el enlace vless:// o escanea el código QR. El enlace lleva security=reality, la clave pública (pbk), el short ID (sid), el SNI, la huella uTLS (fp) y flow=xtls-rprx-vision, que esos clientes leen. Si un cliente lo rechaza, actualízalo: REALITY y Vision necesitan un núcleo reciente.
¿Uso dest o target en Xray?
Xray-core actual acepta ambos, y target es el nombre que usan sus propios mensajes de error. La mayoría de tutoriales siguen escribiendo dest. El generador escribe target en el servidor; si un núcleo antiguo lo rechaza, renombra el campo a dest.
¿Necesito un dominio o un certificado?
No. REALITY toma prestado el handshake del sitio destino, así que el servidor no necesita dominio ni certificado: basta un VPS con IP pública y el puerto TCP 443 abierto. Es una de las razones principales por las que sustituyó a VLESS sobre WebSocket con TLS en las instalaciones nuevas.
¿Por qué el cliente conecta pero no carga ninguna web?
Normalmente por una de tres discrepancias: el short ID no está en la lista del servidor, la clave pública no es la pareja de la privada del servidor, o flow solo está configurado en un lado. Revisa el registro del servidor con journalctl y, si configuraste maxTimeDiff (max_time_difference en sing-box), comprueba la hora de ambas máquinas: un desfase parece entonces un error de clave.