> La lista completa de artículos está en [llms.txt](https://docs.f3cloud.com/llms.txt). Cada página tiene versión en Markdown, basta con añadir .md a su dirección. Esta página en Markdown: [https://docs.f3cloud.com/es/vpn-guide/reality-self-steal.md](https://docs.f3cloud.com/es/vpn-guide/reality-self-steal.md).

# Self-steal para VLESS Reality – camufla el servidor como tu propia web

Por qué se bloquean los servidores VLESS Reality que se hacen pasar por sitios ajenos y cómo pasarse a self-steal. Tu propio dominio, nginx en 127.0.0.1:8443, Xray con Reality y la configuración en 3X-UI, Marzban y Remnawave.

Reality esconde la VPN detrás de un sitio web normal. Si ese sitio es ajeno, por ejemplo microsoft.com o dl.google.com, el servidor es fácil de detectar, y por eso en 2026 este tipo de servidores se bloquean de forma masiva. **Self-steal** resuelve el problema – el servidor se hace pasar por tu propio sitio web con un certificado real.

> **Consejo.**
>
> **El artículo en pocas palabras**
>
> * **Resultado** – un VLESS Reality que, para todo el mundo, parece tu sitio web;
> * **Tiempo** – unos 20 minutos;
> * **Necesitarás** – un VPS con Ubuntu o Debian y tu propio dominio;
> * **Sirve para** – Xray sin panel, 3X-UI, Marzban y Remnawave.

### Por qué se bloquean los servidores

| Cuándo                      | Qué pasó                                                                        |
| --------------------------- | ------------------------------------------------------------------------------- |
| Noviembre de 2025           | Cortes masivos de VLESS Reality en el puerto 443 con los proveedores domésticos |
| 17 de febrero de 2026       | Una gran oleada de bloqueos de VLESS Reality sobre TCP en todo el país          |
| Mayo de 2026                | Pruebas de nuevos métodos en Siberia, el Lejano Oriente y Moscú                 |
| Agosto – septiembre de 2026 | Bloqueos de direcciones IP y subredes de proveedores de VPS populares           |

Reality en sí no ha sido vulnerado. Los filtros de los proveedores (TSPU) buscan señales indirectas, y la principal es hacerse pasar por un sitio ajeno:

* el nombre del sitio (SNI) se envía sin cifrar;
* microsoft.com en la dirección IP de un pequeño proveedor de hosting resulta poco natural;
* cualquiera que se conecte al servidor verá el sitio real de Microsoft en una dirección IP ajena.

<details>

<summary>Qué dicen los desarrolladores de Xray</summary>

Desde 2026, Xray muestra un aviso si eliges como destino apple.com, icloud.com o microsoft.com, y desde julio de 2026 también con los sitios de las zonas .ru, .ir y .cn. La documentación oficial de Reality recomienda elegir un sitio de la misma red que el servidor. La forma más sencilla de cumplir esta condición es alojar el sitio en el propio servidor.

</details>

### Cómo funciona self-steal

| Quién se conecta              | Qué ve                                |
| ----------------------------- | ------------------------------------- |
| Tu cliente con la clave       | Una conexión VPN                      |
| Proveedor, escáner, navegador | Tu sitio web con un certificado real  |

El dominio, el certificado y la dirección IP coinciden, así que el servidor parece uno más entre miles de sitios web normales. Xray acepta las conexiones en el puerto 443, y el sitio funciona en nginx en la dirección interna `127.0.0.1:8443`.

> **Atención.**
>
> Self-steal no es una garantía total. En agosto y septiembre de 2026 también cayeron servidores así en los bloqueos de subredes. El esquema funciona mejor junto con un dominio neutro, pocos usuarios y la huella `firefox`.

### Qué necesitas

* un VPS con **Ubuntu 22.04**, **24.04** o **Debian 12** – para uso personal basta con **DE-PROMO**, y para un canal de 1 Gbit/s va bien **DE-RZ9-1**;
* un dominio o subdominio que apunte a este servidor;
* los puertos 80 y 443 libres.

> **Consejo.**
>
> Elige un nombre de dominio neutro, como el de un blog o un portfolio, sin las palabras vpn, proxy, xray, reality ni node. Para un servidor en Alemania es mejor una zona internacional (.com, .net, .org) o .de – con la zona .ru Xray muestra un aviso.

### Paso 1. Registro DNS

Crea en tu registrador un registro A con la dirección IP del servidor. Si el dominio está conectado a Cloudflare, desactiva el proxy (nube gris) – Reality no funciona a través de una CDN.

```bash
dig +short example.com
```

El comando debe mostrar la dirección IP del servidor.

### Paso 2. Sitio web y certificado

Instala nginx y certbot y luego pon en el sitio una página sencilla – un blog, una tarjeta de visita, lo que quieras menos una página vacía:

```bash
apt update && apt install -y nginx certbot
nano /var/www/html/index.html
```

Emite el certificado, cambiando el dominio y el correo por los tuyos:

```bash
certbot certonly --webroot -w /var/www/html -d example.com -m you@example.com --agree-tos --no-eff-email --deploy-hook "systemctl reload nginx"
```

Certbot renovará el certificado y recargará nginx por su cuenta.

### Paso 3. Configuración de nginx

Abre el archivo `/etc/nginx/sites-available/default` y sustituye su contenido, poniendo tu propio dominio:

```nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 127.0.0.1:8443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
```

```bash
nginx -t && systemctl reload nginx
```

<details>

<summary>Qué hace esta configuración</summary>

* **Puerto 80** – renovación del certificado y redirección de los visitantes a HTTPS.
* **127.0.0.1:8443** – el propio sitio. Solo es accesible desde dentro del servidor, y el puerto 443 queda libre para Xray.
* **El aviso** `listen ... http2 is deprecated` de las versiones nuevas de nginx puedes ignorarlo. No cambies la línea por `http2 on;` – el nginx de Ubuntu 22.04, 24.04 y Debian 12 no conoce esa directiva y no arrancará.

</details>

### Paso 4. Instalar Xray y generar las claves

```bash
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
xray uuid
xray x25519
openssl rand -hex 8
```

Guarda cuatro valores:

| Valor         | De dónde sacarlo                                                 | Dónde se necesita  |
| ------------- | ---------------------------------------------------------------- | ------------------ |
| UUID          | `xray uuid`                                                      | Servidor y cliente |
| Clave privada | `xray x25519`, la línea `PrivateKey`                             | Solo el servidor   |
| Clave pública | `xray x25519`, la línea `Password (PublicKey)` o `Public key`    | Solo el cliente    |
| Short ID      | `openssl rand -hex 8`                                            | Servidor y cliente |

### Paso 5. Configurar Xray

> **Atención.**
>
> Si el archivo `/usr/local/etc/xray/config.json` ya contiene tus conexiones, no lo borres – perderías a tus usuarios. Cambia solo el bloque `realitySettings` según la tabla de abajo.

Para una instalación nueva, abre el archivo con el comando `nano /usr/local/etc/xray/config.json` y pega la configuración, sustituyendo los valores en mayúsculas.

<details>

<summary>Configuración de Xray para una instalación nueva</summary>

```json
{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "UUID",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "target": "127.0.0.1:8443",
          "xver": 0,
          "serverNames": ["example.com"],
          "privateKey": "PRIVATE_KEY",
          "shortIds": ["SHORT_ID"]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls", "quic"]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}
```

</details>

Lo más importante de esta configuración son tres campos:

| Campo         | Valor            | Para qué                                                                          |
| ------------- | ---------------- | --------------------------------------------------------------------------------- |
| `target`      | `127.0.0.1:8443` | A los extraños los enviamos a tu sitio. Antes este campo se llamaba `dest`         |
| `xver`        | `0`              | Si no, nginx recibirá una cabecera PROXY protocol de más y el sitio no se abrirá  |
| `serverNames` | Tu dominio       | Debe coincidir con el dominio del certificado                                     |

Comprueba la configuración y reinicia Xray:

```bash
xray run -test -config /usr/local/etc/xray/config.json
systemctl restart xray
```

### Paso 6. Cortafuegos

```bash
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
```

Si SSH funciona en otro puerto, indícalo en lugar de `22`.

### Paso 7. Comprobación

Abre `https://example.com` en el navegador. Si aparece tu sitio sin avisos sobre el certificado, Xray está pasando bien a nginx las conexiones ajenas.

### Paso 8. Conectar el cliente

```text
vless://UUID@example.com:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=example.com&fp=firefox&pbk=PUBLIC_KEY&sid=SHORT_ID&type=tcp#My-server
```

Pon tus valores e importa el enlace en la aplicación, como se muestra en las [instrucciones de importación](https://docs.f3cloud.com/es/vpn-guide/marzban-installation.md#paso-4.-conectate-a-la-vpn). Por qué el enlace lleva `fp=firefox` lo explicamos en el artículo [sobre 3X-UI](https://docs.f3cloud.com/es/vpn-guide/3x-ui-panel-guide.md#vless-reality).

### Self-steal en los paneles

Primero haz los pasos 1–3 en el servidor donde funciona Xray. Después cambia la conexión en el panel.

#### 3X-UI

Abre la conexión VLESS Reality e indica:

* **Target** – `127.0.0.1:8443`;
* **SNI** – tu dominio;
* **Xver** – `0`.

No hace falta volver a generar las claves.
#### Marzban

1. En **Core Settings**, en el bloque `realitySettings`, pon `target` – `127.0.0.1:8443`, `serverNames` – tu dominio, `xver` – `0`.
2. En **Host Settings**, escribe este dominio en el campo SNI.
#### Remnawave

1. En **Config Profiles**, abre el perfil del nodo y haz los mismos tres cambios en `realitySettings`.
2. Si en la sección **Hosts** el SNI está redefinido, pon ahí el nuevo dominio.

Tienes más información sobre el panel en el artículo [«Instalación de Remnawave en un VPS»](https://docs.f3cloud.com/es/vpn-guide/remnawave-installation.md).

> **Nota.**
>
> Si Xray funciona en Docker sin `network_mode: host`, la dirección `127.0.0.1` apunta al interior del contenedor y nginx no será accesible. El nodo de Remnawave funciona en modo `host`, así que a él no le afecta.

### Cómo pasar de un sitio ajeno a self-steal

1. Haz una copia de la configuración con el comando `cp /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.bak`.
2. Haz los pasos 1–3.
3. Cambia `target`, `serverNames` y `xver` según la tabla del paso 5. Si en la configuración aparecen a la vez `dest` y `target`, deja solo uno de los dos.
4. Comprueba la configuración y reinicia Xray.

El UUID, las claves y el Short ID no cambian. Los usuarios solo tienen que actualizar la suscripción o el enlace – en él cambiará `sni`.

> **Atención.**
>
> Si Reality se instaló con la aplicación **AmneziaVPN**, esta escribe la configuración del servidor por su cuenta, y los cambios manuales pueden perderse. Para self-steal es más fiable instalar Xray por separado.

### Si algo no funciona

| Síntoma                                 | Qué comprobar                                                                                       |
| --------------------------------------- | --------------------------------------------------------------------------------------------------- |
| El sitio no se abre                     | El registro A, la salida de `nginx -t`, si nginx escucha en el puerto 8443 (`ss -tlnp \| grep 8443`) |
| Xray no arranca                         | El log de `journalctl -u xray -n 50`, la sintaxis del JSON, si el puerto 443 ya está ocupado         |
| El sitio se abre, pero la VPN no        | Si UUID, `sni`, `pbk` y `sid` coinciden con el servidor, si el cliente está actualizado              |
| El certificado no se renueva            | Si el puerto 80 está abierto, el resultado de `certbot renew --dry-run`                              |
| No funciona con un proveedor concreto   | Otra huella en el cliente, la conexión desde otra red, si la IP está bloqueada                       |

### Consejos

* **Menos usuarios** – un perfil de tráfico menos llamativo.
* **Una página real** – parece más natural que una página vacía.
* **Versiones recientes** – Xray se actualiza con el mismo comando de instalación, y los clientes mantenlos también al día.
* **Una conexión de reserva** – por ejemplo, [VLESS + TLS + XHTTP](https://docs.f3cloud.com/es/vpn-guide/setup-vless-xhttp.md), por si la principal deja de funcionar.
