4 puntos por GN⁺ 2024-08-18 | 1 comentarios | Compartir por WhatsApp
  • Magic Wormhole ofrece una biblioteca y la herramienta de línea de comandos wormhole para mover de forma segura archivos de cualquier tamaño, directorios y textos cortos de una computadora a otra
  • Ambos extremos de la transferencia se identifican con el mismo wormhole code, y por lo general el dispositivo emisor genera el código, lo muestra y se ingresa en el dispositivo receptor
  • El código usa una lista de palabras cortas y fáciles de pronunciar, y el lado receptor ofrece autocompletado con tabulador para las palabras del código, así que normalmente basta con escribir unas pocas letras
  • El wormhole code es de un solo uso, no hace falta memorizarlo, y el programa utiliza dos servidores de repositorios separados: mailbox server y transit relay
  • Magic Wormhole se distribuye bajo la licencia MIT y es compatible con Python 3.10 o superior, con pruebas hasta la versión 3.12

Funciones que ofrece Magic Wormhole

  • Magic Wormhole es un proyecto cuyo objetivo es “llevar de forma segura algo de una computadora a otra”
  • El paquete ofrece dos formas
    • Biblioteca

      • la herramienta de línea de comandos wormhole
      • los elementos que se pueden transferir incluyen lo siguiente
      • archivos de cualquier tamaño
      • directorios
      • fragmentos cortos de texto

Método de transferencia basado en wormhole code

  • Los dos endpoints se identifican usando el mismo wormhole code
  • El flujo habitual es el siguiente
    • el dispositivo emisor genera el código y lo muestra en pantalla
    • en el dispositivo receptor se ingresa ese código
  • El código es corto, fácil de pronunciar y usa una lista de palabras fonéticamente distinguibles
  • El lado receptor ofrece autocompletado con tabulador para las palabras del código, por lo que normalmente solo hace falta escribir unas pocas letras
  • El wormhole code es de un solo uso y no hace falta memorizarlo

Configuración del servidor

Documentación y materiales de presentación

Licencia, compatibilidad e instalación

  • Magic Wormhole se distribuye bajo la licencia MIT y los detalles están en el archivo LICENSE
  • La biblioteca es compatible con Python 3.10 o superior y ha sido probada hasta la versión 3.12
  • El paquete Magic Wormhole está incluido en varios sistemas operativos
  • Para instalarlo sin paquetes del sistema operativo, se pueden seguir las Installation docs

1 comentarios

 
GN⁺ 2024-08-18
Opiniones en Hacker News
  • Lo he usado durante años para mover archivos grandes entre sistemas en entornos de red raros, y casi siempre funciona sin problemas.
    Como prueba un poco más inusual, pude levantar mi propio relay de Magic Wormhole y ajustarlo para que la copia de archivos muy grandes fuera más rápida y estable.
    Todavía odio Google Drive porque se cae demasiado seguido cuando le tiras archivos de decenas de GB.
    https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...

    • Es bastante grave que estas herramientas no avancen. Hace unos 6 años había mucha actividad alrededor de PAKE, pero todavía faltan un hole punching confiable para usarlas sin servidores relay lentos, y múltiples streams TCP simultáneos o un protocolo UDP cuidadosamente diseñado para enviar grandes volúmenes de datos rápidamente por rutas largas de alto ancho de banda.
      La última vez que intenté enviar muchos datos con Wormhole, el producto ancho de banda-retardo me limitó a 20 MB/s, y al final usé HTTP común con aria2c y múltiples streams para saturar una línea de 1 Gbps.
      No veo por qué las herramientas basadas en PAKE no podrían reemplazar por completo, para transferencias grandes de larga distancia, a herramientas propietarias excesivamente complejas como Globus, pero la realidad sigue anclada en el pasado.
    • Esperaba que el servidor relay se usara solo para el handshake inicial para atravesar NAT, y que luego la transferencia fuera P2P.
      Solo con algunas restricciones de red los datos reales pasarían por el relay; si no fuera así, me pregunto cómo cubren los costos de operar un relay gratuito.
    • Uso una combinación de scp, LocalSend, magic wormhole y sharedrop.io, y cuando hay apuro a veces también python -m http.server para descargas locales.
      Es una lástima que este cómic de xkcd siga siendo tan vigente como en 2011: https://xkcd.com/949/
  • Esta es una de esas utilidades de una sola función que hacen una cosa extremadamente bien; funciona tan bien y de forma tan discreta que pasa totalmente desapercibida.
    Siento que deberíamos agradecer más este tipo de creaciones excelentes.

  • Estoy usando croc, un proyecto similar con buenas funciones: https://github.com/schollz/croc

  • Una vez transferí un archivo de 70 GB con wormhole. Antes eso habría sido imposible.
    Sabía que estaba usando el ancho de banda del servidor relay, así que enseguida doné a Debian. Entendía que Debian operaba el relay de la versión del paquete apt.

    • Soy el autor de Magic Wormhole. Yo opero el servidor relay, pero el mantenedor de Debian aceptó poner un nombre de host alternativo en la versión del paquete.
      Es un CNAME que apunta al mismo lugar que la dirección usada por el código git upstream, con la idea de poder cambiarlo fácilmente si los costos se volvieran una carga.
      Hasta ahora no ha sido un problema; mueve alrededor de 10 a 15 TB al mes, pero de todos modos comparte un pool de ancho de banda con otros servidores que tengo alquilados, así que solo una vez tuve que pagar cargos por excedente.
      Aunque alguien me donara a mí, honestamente creo que lo enviaría directamente a Debian.
      A veces, cuando alguien deja pasar medio terabyte, pienso que debería moverlo a un proveedor más lento pero de tarifa plana, o implementar un mejor código de limitación de velocidad, o por fin implementar una extensión del protocolo para que el cliente indique de antemano cuántos datos va a transferir y el servidor pueda rechazarlo.
      Pero todavía no ha subido lo suficiente en la lista de prioridades.
    • Recién llegando hasta aquí se empieza a ver un poco el punto clave. Me pregunto si esto depende de un solo servidor o de unos pocos servidores relay mantenidos con donaciones.
      Está claro que la mayor motivación es atravesar NAT a NAT. Si no hubiera barreras de ambos lados, bastaría con usar scp, rsync o sftp.
      También me pregunto si se puede configurar el servidor relay. Parecía estar hardcodeado hasta cierto punto.
    • El protocolo de transferencia de wormhole intenta una conexión directa para evitar enviar datos a través del relay.
  • También encontré esto por casualidad: “Una implementación en Rust de Magic Wormhole con nuevas funciones y mejoras”: https://github.com/magic-wormhole/magic-wormhole.rs

    • Le faltan algunas funciones que están en otras implementaciones. Por ejemplo, no tiene la capacidad de enviar un zip y que se descomprima correctamente.
  • Soy el autor. Si tienen preguntas, puedo responderlas.

    • Uso mucho wormhole, pero he venido postergando averiguar si es tan seguro como ssh/scp, así que siempre cifro con gpg el archivo que voy a transferir antes de meterlo en wormhole.
      ¿Eso es paranoico?
    • Solo lo necesitaba para bootstrappear una VM en una máquina nueva, pero terminé usándolo para muchas otras cosas. Es un proyecto excelente.
    • Tengo algunas preguntas. Me pregunto si hay una app, y si se puede compartir la contraseña mediante un código QR cuando los datos son demasiado grandes para caber en el QR.
      También me interesa cómo planean responder a la computación cuántica, y si tienen planes de migrar a criptografía poscuántica para protegerse contra ataques de almacenar ahora y descifrar después.
      Quisiera saber también si el protocolo puede ampliarse sobre un proxy más general, como un servidor TURN.
  • También hay algunas otras herramientas
    p2pcopy https://github.com/psantosl/p2pcopy
    pcp https://github.com/dennis-tra/pcp
    wormhole-william https://github.com/psanford/wormhole-william

  • Tal vez sea una pregunta tonta, pero ¿cuál sería la mejor forma de hacer esto entre un iPhone y una MacBook?
    AirDrop está deshabilitado por política, el almacenamiento de iCloud está lleno por mi propia flojera, y uso Syncthing en todos los demás dispositivos, pero no encontré un cliente que pueda usar en el iPhone de la empresa

    • Estoy usando sharedrop.io; también es open source y funciona bastante bien: https://github.com/szimek/sharedrop
      Me gusta especialmente que no hace falta instalar apps de terceros en ningún dispositivo
      En Safari en Mac normalmente no parece funcionar tan bien como en Chrome, pero he transferido de Windows a iOS, de Windows a macOS y de macOS a iOS sin instalar nada
    • Si están en la misma red, existe LocalSend, una alternativa a AirDrop open source y multiplataforma: https://github.com/localsend/localsend
    • Está TailDrop, la killer feature de Tailscale. Permite transferir archivos de forma confiable entre todo tipo de dispositivos
    • Conecta los dos dispositivos a la misma red WiFi y usa un servidor HTTP como python -m http.server
    • https://mobiussync.com/
  • Artículo relacionado: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - mayo de 2021, 178 comentarios

  • Tailscale ahora también tiene Taildrop: https://tailscale.com/kb/1106/taildrop

    • Taildrop también está bien, pero si te sirven las herramientas de línea de comandos, Wormhole es mucho más flexible y fácil de usar
      Aunque aquí usamos Tailscale en general, todavía suelo enviar archivos con wormhole