Blog
Development·5 min read

Construyendo un VPN de un solo clic para sobrevivir al Great Firewall

Me mudo a China y el Great Firewall bloquea todo. Así que construí una app de escritorio con Tauri y Rust que tuneliza el tráfico a través de VLESS + Reality — indetectable

Jo Vinkenroye·March 8, 2026
Construyendo un VPN de un solo clic para sobrevivir al Great Firewall

Me mudo a China por un tiempo. y si sabes algo sobre la situación de internet allí, sabes que el Great Firewall bloquea básicamente todo — Google, YouTube, WhatsApp, Twitter, hasta ChatGPT. las apps VPN habituales también se detectan y bloquean bastante rápido

Así que construí el mío propio

Una app de escritorio que te conecta a un servidor proxy con un solo clic. sin archivos de configuración, sin setup manual, sin comandos de terminal. solo haz clic y tu tráfico está encriptado, ofuscado y enrutado a través de un servidor que el firewall no puede distinguir del tráfico web normal

Por qué no usar simplemente un VPN normal

Los VPN comerciales son lo primero que China bloquea. conocen los protocolos, conocen las IPs de los servidores, hacen deep packet inspection en todo. la mayoría de las conexiones VPN se ralentizan o se cortan en segundos

El Great Firewall es en realidad muy sofisticado. no solo bloquea IPs — analiza patrones de tráfico, huellas TLS, temporización de paquetes. si tu conexión no parece navegación web normal, se marca

Así que necesitaba algo que no pareciera un VPN en absoluto

El truco: VLESS + Reality

Aquí es donde se pone interesante. estoy usando el protocolo VLESS con transporte Reality — y Reality hace algo ingenioso

Hace que tu tráfico proxy parezca una conexión HTTPS normal a un sitio web legítimo. en este caso, el handshake TLS imita una conexión a www.microsoft.com en el puerto 443. el firewall ve lo que parece alguien navegando por el sitio de Microsoft. nada sospechoso

La pila de encriptación:

  • Reality maneja la encriptación y ofuscación a nivel TLS
  • xtls-rprx-vision para control de flujo
  • Chrome TLS fingerprint spoofing para coincidir con tráfico real de navegador
  • Curve25519 public key crypto para el handshake

VLESS en sí establece la encriptación en "none" porque Reality ya maneja todo en la capa de transporte. sin doble encriptación, sin overhead, sin firma VPN detectable

La stack

  • Tauri 2 — framework de app de escritorio (backend Rust, frontend web)
  • React 19 + TypeScript — UI frontend
  • xray-core — el motor proxy que ejecuta VLESS + Reality
  • 3x-ui — panel del lado del servidor para gestionar conexiones

Tauri era la elección obvia. Electron funcionaría pero enviar un Chromium completo para lo que es esencialmente un botón de conectar se sentía excesivo. Tauri me da una app nativa con una huella mínima y un backend Rust que puede lanzar procesos y modificar tablas de enrutamiento del sistema

Cómo funciona

Cuando haces clic en conectar, pasan muchas cosas en unos 2 segundos

Registro automático

La app viene con credenciales para un panel de gestión 3x-ui corriendo en mi servidor. en la primera conexión, genera un UUID para tu dispositivo y se registra como cliente. ningún paso manual necesario

App launch → Generate UUID → Login to panel → Register device → Save identity

Cada conexión posterior solo verifica que el registro siga existiendo. quería cero fricción — especialmente para familiares que también podrían necesitar esto

La cadena de proxy

Your browser
→ System SOCKS proxy (127.0.0.1:1080)
→ xray-core (local process)
VLESS + Reality encrypted tunnel (TCP:443)
→ Remote server (outside China)
→ Internet

xray-core corre como proceso hijo. la app escribe una configuración JSON, lanza el binario y consulta el puerto 1080 hasta que el proxy SOCKS5 esté listo. luego le dice a macOS o Windows que enrute todo el tráfico a través de ese proxy local

Integración con el sistema

La parte más complicada no es el proxy — es hacer que el SO coopere

En macOS, la app ejecuta networksetup con privilegios de administrador para configurar el proxy SOCKS del sistema. en Windows, escribe en el registro. ambos requieren elevación de privilegios

La app hace una captura de tu estado de red antes de conectar — gateway por defecto, interfaz, servidores DNS. si la app se cae mientras estás conectado, restaura todo automáticamente en el próximo inicio

Compartir acceso

Esto era importante. no soy el único que necesita esto

La app puede exportar una URI VLESS como código QR. escanéalo con v2rayNG en Android o Streisand en iOS y obtienes la misma conexión. la URI contiene todo — dirección del servidor, UUID, clave pública, configuración de Reality. un escaneo, conectado

Así que puedo configurar mi servidor una vez y compartir acceso con cualquiera que lo necesite. sin explicar cómo funcionan las configs de proxy, sin guiar a la gente por comandos de terminal a través de WeChat

Qué mejoraría

Las credenciales del panel están hardcodeadas. la conexión al panel usa HTTP sin verificación TLS. los archivos de configuración almacenan credenciales en texto plano. para una herramienta personal esto está bien, pero sé que debería arreglar esto antes de compartirlo más ampliamente

El código Rust usa algo de unsafe static mutable state para los handles de procesos. funciona, pero un enfoque Arc/Mutex sería más limpio. a veces entregar gana a la perfección — especialmente cuando tienes un vuelo que tomar

El resultado

Una app de escritorio de 15MB que convierte un VPS de $5/mes en un VPN personal que el Great Firewall no puede detectar. un clic para conectar, un clic para desconectar. el tráfico parece navegación web normal para cualquiera que esté observando

A veces la mejor herramienta es la que nadie tiene que pensar. y cuando estás a punto de perder acceso a la mitad de internet, construyes lo que necesitas

Stay Updated

Get notified about new posts on automation, productivity tips, indie hacking, and web3.

No spam, ever. Unsubscribe anytime.

Comments

Related Posts