Volver al blog
Agosto 19, 2026Guías

Cómo instalar el panel 3X-UI en un VPS

Guía completa y orientada a producción para instalar el panel 3X-UI de Xray en Ubuntu, proteger la interfaz web, emitir TLS, crear un inbound VLESS Reality, gestionar usuarios y conectar clientes en escritorio y móvil.

Cómo instalar el panel 3X-UI en un VPS

3X-UI es un panel web para Xray-core. Permite gestionar inbounds (VLESS, VMess, Trojan, Shadowsocks y otros), emitir enlaces de suscripción, fijar límites de tráfico y fechas de caducidad, y ver las conexiones en vivo sin editar JSON a mano. Si ya tienes un VPS, es una de las formas más rápidas de obtener una pila de proxy mantenible en lugar de una configuración de un solo uso que nadie se atreve a tocar seis meses después.

Esta guía está pensada para un VPS Ubuntu 22.04 o 24.04 recién instalado, como suelen verse las imágenes Linux de Hiddence tras el primer arranque. Instalaremos la versión MHSanaei de 3X-UI, muy extendida, cambiaremos todos los secretos por defecto en el primer acceso, pondremos el panel detrás de HTTPS, abriremos solo los puertos que necesites, crearemos un inbound VLESS + Reality y luego repasaremos las aplicaciones cliente. Si ya seguiste nuestro artículo de Marzban, la idea es similar — un panel sobre Xray —, pero la instalación, el árbol de ficheros y el día a día son distintos: no mezcles ambos en el mismo servidor salvo que sepas separar los puertos.

Por qué 3X-UI en lugar de un config Xray en crudo

Un config Xray en crudo vale para un usuario y un inbound. En cuanto añades amigos, rotas claves Reality o necesitas una URL de suscripción que el teléfono importa con un toque, un panel ahorra horas. 3X-UI guarda los usuarios en una base local, reinicia Xray de forma limpia tras los cambios y ofrece un panel compacto de tráfico y estado en línea. No es una capa mágica de anonimato: la ubicación del VPS, la huella TLS, el tipo de inbound y tu propia higiene operativa siguen decidiendo cómo se comporta el montaje en la red.

  • Interfaz web para inbounds, clientes, tráfico y caducidad en lugar de JSON editado a mano
  • Enlaces de suscripción integrados para v2rayN, v2rayNG, Streisand, Happ y clientes similares
  • Instalación con un solo comando y un camino de actualización documentado
  • Funciona bien en un VPS pequeño (1 vCPU / 1 GB de RAM basta para uso personal)
  • Conservas root en tu servidor: el panel no envía configs a una nube de terceros

Qué necesitas antes de empezar

No te saltes el dominio ni el cortafuegos. Un panel dejado en HTTP en el puerto 2053 con la contraseña por defecto lo escanean los bots en cuestión de horas. Prepara estos elementos y conéctate como root (o un usuario con sudo) por SSH.

  • Un VPS Linux con dirección IPv4 pública (se recomienda Ubuntu 22.04/24.04)
  • Al menos 1 GB de RAM y 10 GB de disco; 2 GB de RAM son más cómodos si también corren otros servicios
  • Acceso root o sudo por SSH
  • Un dominio o subdominio con un registro A apuntando a la IP del VPS (necesario para un certificado decente del panel)
  • Unos 20–30 minutos, más el tiempo de espera de DNS si acabas de crear el registro A

Paso 1: Actualizar el sistema y fijar la zona horaria

Un VPS nuevo suele tener actualizaciones de seguridad pendientes y el reloj en UTC. Actualiza primero los paquetes para que el instalador no pelee con un OpenSSL o curl desfasados. La zona horaria es opcional para el propio Xray, pero hace mucho más legibles los registros del panel y las fechas de caducidad de los certificados.

bash
ssh root@YOUR_VPS_IP

apt update && apt -y upgrade
apt -y install curl wget ca-certificates gnupg socat tar unzip

timedatectl set-timezone UTC
hostnamectl set-hostname panel

# Confirm DNS for your subdomain (should print your VPS IP):
dig +short panel.example.com

Paso 2: Instalar 3X-UI

El script de instalación oficial de la versión MHSanaei de 3X-UI descarga la última versión, instala Xray-core, crea un servicio systemd e imprime la URL del primer acceso. Lee la salida con atención: contiene una ruta aleatoria y un usuario/contraseña generados. Cópialos al instante en un gestor de contraseñas. Si el script pregunta por el puerto del panel, deja 2053 o elige un puerto alto libre; recuérdalo para el paso del cortafuegos.

bash
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

# After install, useful commands:
x-ui                    # interactive menu (start/stop/restart, reset, update)
systemctl status x-ui    # confirm the service is active
ss -tulpn | grep x-ui    # see which port the panel listens on
Mantén esta sesión SSH abierta. Si te quedas fuera del panel, el menú x-ui en el servidor puede restablecer la contraseña de administrador sin reinstalar.

Paso 3: Primer acceso y endurecimiento inmediato

Abre la URL que imprimió el instalador, normalmente http://YOUR_IP:2053/<ruta-aleatoria>. Entra con las credenciales generadas y ve a los ajustes del panel (Panel Settings o Configuration). Cambia el usuario y la contraseña por valores únicos. Si el panel permite cambiar la ruta base web, hazlo: una ruta larga y aleatoria recorta una enorme cantidad de escaneos oportunistas. Ajusta el puerto de escucha si quieres algo distinto de 2053. Guarda, reinicia el panel desde la interfaz o con systemctl restart x-ui y vuelve a entrar en la nueva URL.

A continuación, activa la autenticación de dos factores si tu versión la ofrece y desactiva las plantillas de inbound que no vas a usar. En los ajustes de Xray, deja la versión del núcleo que vino con el panel salvo que tengas un motivo concreto para fijar otra. No expongas aún el panel en los puertos 80/443 si más adelante los usará Reality o un proxy inverso: elige una estrategia y cúmplela.

  • Sustituye de inmediato el acceso de administrador generado
  • Conserva la ruta web secreta; no muevas el panel a /
  • Prefiere un puerto de panel no predeterminado y anótalo
  • No reutilices esta contraseña en otros servicios

Paso 4: Certificado TLS para el panel

Los navegadores avisan en HTTP, y enviar la contraseña de administrador en claro por una red pública es mala idea. 3X-UI puede solicitar un certificado Let's Encrypt si el puerto 80 está libre y el dominio apunta a este VPS. En el panel, abre la sección de certificado / SSL, introduce panel.example.com y pide el certificado. Si el puerto 80 ya está ocupado, usa un flujo DNS-01 o pon Caddy/Nginx delante y haz proxy inverso hacia 127.0.0.1:2053.

bash
# Quick check that port 80 is free before the panel ACME challenge:
ss -tulpn | grep ':80'

# If you terminate TLS on Caddy instead of inside 3X-UI:
# Caddyfile example (panel stays on 127.0.0.1:2053):
# panel.example.com {
#     reverse_proxy 127.0.0.1:2053
# }
El certificado del panel es solo para la interfaz web. VLESS Reality tiene otra historia TLS (se camufla como otro sitio) y no usa este fichero de Let's Encrypt para el tráfico de clientes.

Paso 5: Crear un inbound VLESS Reality

En Inbounds, crea un inbound nuevo. Un valor por defecto sólido para muchas redes es VLESS con Reality y TCP. Elige un puerto que no sea el del panel: 443 es habitual si no hay nada más enlazado ahí; si no, un puerto TCP alto y sé coherente en el cortafuegos. Genera un UUID para el primer cliente, pares de claves Reality en la interfaz y configura dest / serverNames hacia un destino legítimo que puedas imitar (un sitio conocido con TLS 1.3). Guarda el inbound y confirma en los registros del panel que Xray recarga sin errores.

Luego añade más clientes en ese inbound si los necesitas: cada usuario obtiene un UUID, una etiqueta de correo opcional y un límite de tráfico o de tiempo opcional. Copia el enlace de conexión o la URL de suscripción de la fila del usuario. No publiques esos enlaces en chats públicos; equivalen a una contraseña.

bash
# On the server, confirm Xray is listening on the inbound port (example: 443):
ss -tulpn | grep -E ':443|:2053'

# Follow Xray logs if a client cannot connect:
journalctl -u x-ui -f

Paso 6: Cortafuegos: solo los puertos que necesitas

UFW en Ubuntu basta. Permite SSH primero para no quedarte fuera, luego el puerto del panel y el del inbound. Si pediste un certificado Let's Encrypt desde el panel, permite también 80/tcp durante la emisión. Un inbound Reality en 443 necesita 443/tcp (y no el panel en el mismo puerto).

bash
ufw allow OpenSSH
ufw allow 2053/tcp comment '3x-ui panel (change if you picked another port)'
ufw allow 443/tcp comment 'VLESS Reality inbound'
# ufw allow 80/tcp comment 'only if panel ACME needs it'
ufw enable
ufw status verbose

Conectar clientes

En Windows, v2rayN puede importar un enlace VLESS desde el portapapeles. En Android, v2rayNG u otros clientes Xray similares hacen lo mismo a partir de un código QR. En iOS, usa un cliente que admita VLESS Reality (por ejemplo Streisand o Happ, según lo que esté disponible en tu región). Tras importar, activa el perfil y comprueba la lista en línea del panel. Si el cliente permanece desconectado, las causas habituales son un puerto incorrecto, UDP activado en un inbound solo TCP, un serverName de Reality que no coincide con dest, o un cortafuegos local en el portátil.

  • Windows: v2rayN — importar el enlace VLESS y ajustar el enrutado (global o por reglas)
  • Android: v2rayNG — escanear el QR desde la página de usuario del panel
  • macOS / iOS: un cliente con soporte VLESS + Reality; pega el mismo enlace
  • URL de suscripción: añádela en el cliente para que las rotaciones de UUID no exijan reimportar a mano

Actualizaciones, copia de seguridad y reinstalación segura

Antes de cada actualización del panel, descarga una copia de seguridad desde la interfaz (base de datos + configuración). Guárdala fuera del VPS. Las actualizaciones suelen ser x-ui y luego la opción de actualización del menú, o el mismo script de instalación, que detecta una instalación existente. Tras actualizar, confirma que el servicio systemd está activo y que los inbounds siguen escuchando. Si reinstalas el sistema, restaura la copia en el panel en lugar de recrear cada UUID a mano.

bash
x-ui   # choose update when prompted, or:
# bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

# Backup files commonly live under /etc/x-ui/ — copy them off-box:
ls -la /etc/x-ui/
# Example offsite copy:
# scp -r /etc/x-ui/ you@backup-host:~/x-ui-backup-$(date +%F)/

Resolución de problemas

La mayoría de los fallos del primer día son DNS, puertos o campos de Reality. Recorre esta lista antes de reinstalar el panel. Reinstalar sin copia de seguridad es cómo se pierden todos los UUID de los clientes.

  • No abre la interfaz web: comprueba systemctl status x-ui, ss -tulpn y UFW. Confirma que incluiste la ruta secreta en la URL.
  • Olvidaste la contraseña de administrador: ejecuta x-ui en el servidor y usa la opción de restablecer.
  • El cliente conecta y se queda colgado: puerto de inbound bloqueado, o UDP activado en un inbound Reality TCP.
  • Errores TLS en el panel: el registro A del dominio aún no apunta aquí, o el puerto 80 está ocupado durante ACME.
  • Falla el handshake de Reality: dest/serverNames no coinciden, u otro servicio ya está enlazado a 443.
  • CPU alta: demasiados inbounds en un plan de 1 vCPU, o un escaneo/inundación en un puerto abierto; revisa ss y el recuento en línea del panel.

Notas de seguridad que de verdad importan

Trata el panel como software de administración de producción. Puede crear usuarios nuevos y leer cada UUID. Limita quién puede alcanzar el puerto web: si tienes una IP de oficina estable, permite solo esa IP en UFW para 2053/tcp. SSH con claves, no con contraseñas. No alojas sitios públicos ajenos en la misma IP si usas Reality en 443: pilas TLS que compiten en un puerto son una causa clásica de caídas. Rota la contraseña de administrador si alguna captura del panel se filtró a un chat.

  • Solo claves SSH; desactiva el acceso por contraseña cuando las claves funcionen
  • Restringe el puerto del panel en el cortafuegos cuando puedas
  • Haz copias de /etc/x-ui fuera del servidor con regularidad
  • No compartas URL de suscripción en grupos públicos de Telegram
  • Vigila el disco: registros y estadísticas de tráfico crecen en un inbound ocupado

Consejos prácticos

  • Un inbound con muchos clientes es más fácil de operar que diez inbounds casi idénticos
  • Nombra los clientes por dispositivo (laptop-anna, phone-ben) para que las gráficas de tráfico signifiquen algo
  • Si también necesitas un proxy inverso para un sitio web, pon el sitio en otra IP u otro puerto: no pelees con Reality por el 443
  • Tras cualquier reinicio de x-ui, prueba un cliente antes de cerrar la sesión SSH
  • Lee el registro de cambios antes de actualizar; evita los saltos a latest un viernes por la noche

Ya tienes 3X-UI instalado como servicio systemd, una URL de administración protegida, TLS en el panel, un inbound VLESS Reality, reglas de cortafuegos alineadas con esos puertos y el hábito de hacer copias. Añade clientes desde la página del inbound, importa el enlace en cada dispositivo y actualiza el panel solo después de una copia. Si algo se rompe, el menú x-ui en el VPS es la vía de recuperación, no una reinstalación completa.