Xray
Resumen
Despliega y configura Xray-core, la plataforma proxy avanzada que soporta los protocolos VLESS, VMess, Trojan y Shadowsocks con transportes modernos como Reality, XTLS-Vision, WebSocket, gRPC y HTTP/2. Esta habilidad cubre el despliegue del servidor, la selección de protocolo, la configuración de TLS/Reality, el enrutamiento de tráfico, la gestión multi-usuario, la integración con CDN, la configuración del cliente y la monitorización.
Instrucciones
Paso 1: Instalación
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
xray version
# Binario: /usr/local/bin/xray
# Configuración: /usr/local/etc/xray/config.json
# Generar UUID y claves X25519
xray uuid
xray x25519 # Par de claves Privada + Pública para Reality
Paso 2: VLESS + Reality (Recomendado)
La configuración más segura. Reality imita el handshake TLS de un sitio web HTTPS real, eliminando la necesidad de un dominio o certificado TLS.
Configuración del servidor (/usr/local/etc/xray/config.json):
{
"log": { "loglevel": "warning" },
"inbounds": [{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{ "id": "YOUR-UUID", "flow": "xtls-rprx-vision", "email": "user1@proxy" }
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com", "microsoft.com"],
"privateKey": "YOUR-PRIVATE-KEY",
"shortIds": ["", "0123456789abcdef"]
}
},
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] }
}],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" },
{ "protocol": "blackhole", "tag": "block" }
],
"routing": {
"rules": [{ "type": "field", "ip": ["geoip:private"], "outboundTag": "block" }]
}
}
Enlace de compartición para el cliente:
vless://UUID@SERVER_IP:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.microsoft.com&fp=chrome&pbk=PUBLIC_KEY&sid=0123456789abcdef&type=tcp#MyProxy
systemctl enable --now xray
Paso 3: VLESS + WebSocket + TLS (Compatible con CDN)
Para enrutar a través del CDN de Cloudflare y ocultar la IP del servidor. Requiere un dominio con proxy de Cloudflare y un certificado TLS.
apt install -y certbot
certbot certonly --standalone -d proxy.yourdomain.com
{
"inbounds": [
{
"port": 443, "protocol": "vless",
"settings": {
"clients": [{ "id": "YOUR-UUID" }],
"decryption": "none",
"fallbacks": [
{ "dest": 8080 },
{ "path": "/ws-path", "dest": 8443, "xver": 1 }
]
},
"streamSettings": {
"network": "tcp", "security": "tls",
"tlsSettings": {
"certificates": [{
"certificateFile": "/etc/letsencrypt/live/proxy.yourdomain.com/fullchain.pem",
"keyFile": "/etc/letsencrypt/live/proxy.yourdomain.com/privkey.pem"
}]
}
}
},
{
"listen": "127.0.0.1", "port": 8443, "protocol": "vless",
"settings": { "clients": [{ "id": "YOUR-UUID" }], "decryption": "none" },
"streamSettings": { "network": "ws", "wsSettings": { "path": "/ws-path" } }
}
],
"outbounds": [{ "protocol": "freedom", "tag": "direct" }]
}
Configura nginx en el puerto 8080 como fallback, y en Cloudflare: SSL/TLS Completo (Estricto), WebSockets ACTIVADO.
Paso 4: Trojan y Shadowsocks
Trojan (parece HTTPS normal):
{
"inbounds": [{
"port": 443, "protocol": "trojan",
"settings": {
"clients": [{ "password": "your-strong-password", "email": "user1@trojan" }],
"fallbacks": [{ "dest": 8080 }]
},
"streamSettings": {
"network": "tcp", "security": "tls",
"tlsSettings": { "certificates": [{ "certificateFile": "...", "keyFile": "..." }] }
}
}]
}
Shadowsocks 2022 (cifrados AEAD modernos):
{
"inbounds": [{
"port": 8388, "protocol": "shadowsocks",
"settings": { "method": "2022-blake3-aes-128-gcm", "password": "BASE64_KEY", "network": "tcp,udp" }
}]
}
Generar clave: openssl rand -base64 16 (o -base64 32 para aes-256)
Paso 5: Gestión Multi-Usuario
"clients": [
{ "id": "uuid-1", "email": "alice@proxy", "flow": "xtls-rprx-vision" },
{ "id": "uuid-2", "email": "bob@proxy", "flow": "xtls-rprx-vision" },
{ "id": "uuid-3", "email": "carol@proxy", "flow": "xtls-rprx-vision" }
]
Estadísticas de tráfico por usuario — habilita la API de estadísticas:
{
"stats": {},
"policy": {
"levels": { "0": { "statsUserUplink": true, "statsUserDownlink": true } },
"system": { "statsInboundUplink": true, "statsInboundDownlink": true }
},
"api": { "tag": "api", "services": ["StatsService", "HandlerService"] },
"inbounds": [
{ "listen": "127.0.0.1", "port": 10085, "protocol": "dokodemo-door",
"settings": { "address": "127.0.0.1" }, "tag": "api" }
],
"routing": { "rules": [{ "type": "field", "inboundTag": ["api"], "outboundTag": "api" }] }
}
Consultar y gestionar usuarios en tiempo de ejecución:
xray api stats --server=127.0.0.1:10085 -name "user>>>alice@proxy>>>traffic>>>uplink"
xray api adi --server=127.0.0.1:10085 --inbound-tag proxy --id "new-uuid" --email "newuser@proxy"
xray api rmi --server=127.0.0.1:10085 --inbound-tag proxy --email "olduser@proxy"
Paso 6: Reglas de Enrutamiento y Monitorización
Enrutar por dominio/IP/geo:
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{ "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" },
{ "type": "field", "ip": ["geoip:private"], "outboundTag": "block" },
{ "type": "field", "network": "tcp,udp", "outboundTag": "proxy" }
]
}
}
Monitorización:
systemctl status xray
journalctl -u xray -f
grep "accepted" /var/log/xray/access.log | awk '{print $3}' | sort | uniq -c | sort -rn
Firewall:
ufw allow 443/tcp && ufw allow 443/udp && ufw enable
Ejemplos
Ejemplo 1: Desplegar un servidor proxy VLESS + Reality para un equipo pequeño
Indicación del usuario: "Configura Xray en nuestro VPS Debian 12 en 198.51.100.30 usando VLESS con transporte Reality. Crea cuentas para alice, bob y carol. Usa microsoft.com como destino de Reality y dame los enlaces de compartición para v2rayNG."
El agente instalará Xray mediante el script oficial, generará un UUID para cada usuario y un par de claves X25519, construirá un config.json con un inbound VLESS en el puerto 443 usando configuración Reality apuntando a www.microsoft.com, añadirá tres entradas de cliente con flujo xtls-rprx-vision, agregará reglas de enrutamiento para bloquear IPs privadas, habilitará e iniciará el servicio xray, abrirá el puerto 443 en el firewall, y generará tres enlaces de compartición vless:// con la IP del servidor, clave pública, ID corto y SNI.
Ejemplo 2: Configurar un proxy VLESS con frontend CDN usando Cloudflare y un sitio web de fallback
Indicación del usuario: "Tengo proxy.mysite.com apuntando a nuestro servidor a través de Cloudflare. Configura Xray con VLESS sobre WebSocket en /secret-ws para que el tráfico pase por el CDN de Cloudflare. Los visitantes no proxy deben ver un sitio web nginx normal."
El agente obtendrá un certificado Let's Encrypt con certbot, configurará Xray con un inbound principal VLESS+TLS en el puerto 443 con un fallback a nginx en el puerto 8080, añadirá un segundo inbound VLESS+WebSocket en localhost:8443 con la ruta /secret-ws, configurará nginx para servir un sitio estático en el puerto 8080, verificará que el SSL de Cloudflare esté configurado en Completo (Estricto) con WebSockets habilitado, y proporcionará la cadena de conexión del cliente con la ruta WebSocket y el SNI de Cloudflare.
Directrices
- Utiliza siempre VLESS + Reality para nuevos despliegues; no requiere dominio ni certificado y es el protocolo más difícil de detectar y bloquear
- Establece
"alterId": 0para todos los usuarios de VMess para habilitar el cifrado AEAD obligatorio; un alterId distinto de cero utiliza el formato heredado, menos seguro y obsoleto - Bloquea el acceso a los rangos de IP privadas (geoip:private) en las reglas de enrutamiento para evitar que el proxy se utilice para ataques SSRF contra servicios internos
- Usa los comandos
xray apipara añadir y eliminar usuarios en tiempo de ejecución sin reiniciar el servicio, evitando así desconectar a los usuarios activos - Elige el
destyserverNamesde Reality de un sitio web popular (microsoft.com, apple.com) alojado en una IP diferente a la de tu servidor, y asegúrate de que ese sitio soporte TLS 1.3 y HTTP/2 - Habilita la API de estadísticas con seguimiento por usuario (
statsUserUplink/statsUserDownlink) para monitorear el uso de ancho de banda y detectar abusos