
Máquina virtual Linux del lado del cliente que se ejecuta en el navegador mediante WebAssembly, con redes de Tailscale, imágenes personalizadas basadas en Dockerfile y soporte para desafíos CTF para educación y desarrollo en seguridad.
Este repositorio alberga el código fuente de https://webvm.io, una máquina virtual Linux que se ejecuta en tu navegador.
Prueba el nuevo entorno gráfico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM es un entorno virtual sin servidor que se ejecuta completamente del lado del cliente en HTML5/WebAssembly. Está diseñado para ser compatible con ABI de Linux y ejecuta una distribución Debian sin modificar, incluyendo muchas cadenas de herramientas de desarrollo nativas.
WebVM funciona gracias al motor de virtualización CheerpX, que proporciona:
[!NOTE] Visita https://webvm.io para empezar de inmediato en tu navegador. Sin configuración previa.
Para configuración local, compilaciones de imágenes personalizadas y guía de bifurcación/despliegue, consulta Desarrollo y personalización.
WebVM soporta integración con Tailscale. De esta forma, tu máquina virtual en el navegador puede acceder a tu red privada y, con un nodo de salida, también a Internet público.
[!NOTE] Algunas operaciones de red de bajo nivel (especialmente ICMP usado por
ping) no están disponibles actualmente en este entorno. Para comprobaciones de conectividad, usacurlowget.
¡WebVM ahora tiene acceso a todas las máquinas de tu red Tailscale!
[!TIP] En conexiones lentas puede haber una breve demora antes de la inicialización. El estado de la conexión se muestra como un punto de color en el botón: naranja = red local, verde = global/Internet. El texto del botón muestra tu dirección IP de Tailscale una vez conectado.
Para acceder a Internet público desde WebVM, configura un Nodo de salida en otro dispositivo de tu red Tailscale:
Como alternativa al inicio de sesión interactivo, añade tu clave de autenticación de Tailscale al fragmento de URL:
https://webvm.io/#authKey=<tu-clave-efímera>
Esto equivale a la opción --login-server de Tailscale.
[!TIP] Si también necesitas un servidor de control personalizado, añade
controlUrlen el mismo fragmento de URL y separa los valores con&, por ejemplo:#authKey=...&controlUrl=....
También soportamos headscale, una implementación de código abierto autoalojada del servidor de control de Tailscale. Como Headscale no añade cabeceras CORS por defecto, necesitarás un proxy delante de él. Consulta la documentación de configuración de proxy inverso de Headscale para ver un ejemplo.
Una vez listo, añade la siguiente línea a tu bloque location / en el archivo de configuración de nginx.
if ($http_origin = "https://tudominio.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Luego accede a WebVM con:
https://tudominio.com/#controlUrl=<tu-url-de-headscale>
[!NOTE] Los usuarios tienen privilegios de root por defecto.
sudono está instalado, aunque se puede añadir fácilmente al Dockerfile si es necesario.
Este es un flujo de trabajo simple, apto para principiantes. Para alojamiento local y personalización, consulta más abajo Servicio local y configuración de imagen.
Bifurca (fork) el repositorio de WebVM para desplegar tu propia versión en GitHub Pages:
Deploy desde Actionsdeploy_to_github_pages
El mismo flujo de trabajo Deploy también compila imágenes de disco .ext2 personalizadas a partir de un Dockerfile. Puedes apuntarlo a dockerfiles/debian_mini u otro Dockerfile, y luego publicar el resultado como un activo de lanzamiento de GitHub o desplegar la compilación de Pages desde tu bifurcación.
[!NOTE]
dockerfiles/debian_largees una imagen demasiado grande para GitHub Pages.
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/Este repositorio incluye un directorio persistente custom-disk-images/ para archivos .ext2 locales.
Para usar la imagen oficial Debian mini, descárgala de los lanzamientos:
debian_mini_20230519_5022088024.ext2
También puedes copiar una imagen que hayas compilado tú mismo.
Edita config_public_terminal.js:
export const diskImageUrl =
"/custom-disk-images/debian_mini_20230519_5022088024.ext2";
export const diskImageType = "bytes";
npm install
npm run build
nginx -p . -c nginx.conf
Luego abre http://127.0.0.1:8081 y ¡disfruta de tu WebVM local!
Para el entorno de escritorio Alpine completo, consulta leaningtech/alpine-image.
Para más detalles, consulta la documentación de imágenes personalizadas de CheerpX.
[!TIP] Para el REPL de Python3, el flujo de trabajo
Deploytiene en cuenta elCMDespecificado en el Dockerfile.Para construir un REPL, simplemente cambia
CMD [ "/bin/bash" ]porCMD [ "/usr/bin/python3" ]y despliega.
Para acceder a Claude AI, necesitas una clave API. Sigue estos pasos para empezar: