4 điểm bởi GN⁺ 2024-08-18 | 1 bình luận | Chia sẻ qua WhatsApp
  • Magic Wormhole cung cấp thư viện và công cụ dòng lệnh wormhole để chuyển an toàn các tệp có kích thước bất kỳ, thư mục và đoạn văn bản ngắn từ máy tính này sang máy tính khác
  • Hai đầu của quá trình truyền được định danh bằng cùng một wormhole code; thông thường thiết bị gửi tạo và hiển thị mã, rồi mã đó được nhập trên thiết bị nhận
  • Mã dùng danh sách các từ ngắn, dễ phát âm với con người; phía nhận cung cấp tự động hoàn thành bằng phím Tab cho các từ trong mã, nên thường chỉ cần nhập vài ký tự
  • wormhole code là dùng một lần, không cần ghi nhớ, và chương trình sử dụng hai máy chủ là mailbox server và transit relay nằm ở các kho lưu trữ riêng
  • Magic Wormhole được phân phối theo giấy phép MIT, tương thích với Python 3.10 trở lên và đã được kiểm thử đến 3.12

Magic Wormhole cung cấp những gì

  • Magic Wormhole là dự án hướng tới mục tiêu “lấy dữ liệu một cách an toàn từ máy tính này sang máy tính khác”
  • Gói này cung cấp hai dạng
    • Thư viện

      • Công cụ dòng lệnh có tên wormhole
      • Đối tượng có thể truyền bao gồm
      • Tệp có kích thước bất kỳ
      • Thư mục
      • Các mẩu văn bản ngắn

Cách truyền dựa trên wormhole code

  • Hai endpoint được định danh bằng cùng một wormhole code
  • Luồng thông thường như sau
    • Thiết bị gửi tạo mã và hiển thị trên màn hình
    • Nhập mã đó trên thiết bị nhận
  • Mã ngắn, dễ phát âm với con người và dùng danh sách các từ có thể phân biệt về mặt âm thanh
  • Phía nhận cung cấp tự động hoàn thành bằng phím Tab cho các từ trong mã, nên thường chỉ cần nhập vài ký tự
  • wormhole code là dùng một lần và không cần ghi nhớ

Cấu hình máy chủ

  • Chương trình này sử dụng hai máy chủ, và mã nguồn của từng máy chủ nằm trong kho lưu trữ riêng

Tài liệu và bài thuyết trình

  • Có thể xem tài liệu đầy đủ tại tài liệu Magic Wormhole hoặc trong thư mục con docs/ của kho lưu trữ
  • Có cung cấp tài liệu thuyết trình PyCon 2016

Giấy phép, khả năng tương thích và cài đặt

  • Magic Wormhole được phân phối theo giấy phép MIT; chi tiết có trong tệp LICENSE
  • Thư viện tương thích với Python 3.10 trở lên và đã được kiểm thử đến 3.12
  • Gói Magic Wormhole có trong nhiều hệ điều hành
  • Nếu muốn cài đặt mà không dùng gói của hệ điều hành, hãy làm theo Installation docs

1 bình luận

 
GN⁺ 2024-08-18
Các ý kiến trên Hacker News
  • Tôi đã dùng nó suốt vài năm để chuyển các tệp lớn giữa các hệ thống trong những môi trường mạng kỳ lạ, và hầu như lúc nào cũng hoạt động trơn tru
    Một thử nghiệm đặc biệt hơn là tự dựng relay Magic Wormhole, rồi tinh chỉnh để việc sao chép các tệp rất lớn nhanh hơn và ổn định hơn
    Tôi vẫn ghét Google Drive vì nó sập quá thường xuyên khi ném vào các tệp vài chục GB
    https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...

    • Việc các công cụ như thế này không phát triển thêm là khá nghiêm trọng. Khoảng 6 năm trước, hoạt động quanh PAKE rất sôi nổi, nhưng đến giờ vẫn thiếu hole punching ổn định để dùng mà không cần máy chủ relay chậm, cũng như nhiều luồng TCP đồng thời hoặc một giao thức UDP được thiết kế cẩn trọng để gửi dữ liệu khối lượng lớn nhanh trên các đường truyền dài, băng thông cao
      Lần gần nhất tôi cố gửi lượng dữ liệu lớn bằng Wormhole thì bị giới hạn ở 20MB/s vì tích băng thông-độ trễ, cuối cùng tôi dùng HTTP thông thường với aria2c và nhiều luồng để dùng kín đường truyền 1Gbps
      Tôi không thấy có lý do gì khiến các công cụ dựa trên PAKE không thể thay thế hoàn toàn những công cụ độc quyền quá phức tạp như Globus trong truyền tải đường dài dung lượng lớn, nhưng thực tế vẫn mắc kẹt trong quá khứ
    • Tôi đã tưởng máy chủ relay chỉ được dùng cho bắt tay ban đầu để xuyên NAT, rồi sau đó truyền tải sẽ là P2P
      Chỉ khi có một số hạn chế mạng thì dữ liệu thực tế mới đi qua relay; nếu không thì tôi tò mò họ trang trải chi phí vận hành relay miễn phí như thế nào
    • Tôi dùng kết hợp scp, LocalSend, magic wormhole, sharedrop.io, và khi cần gấp thì thỉnh thoảng cũng dùng python -m http.server để tải xuống cục bộ
      Thật tiếc là truyện xkcd này vẫn còn đúng y như hồi năm 2011: https://xkcd.com/949/
  • Đây là một trong những tiện ích đơn năng làm cực tốt một việc, nhưng vì hoạt động quá tốt và không phô trương nên gần như hoàn toàn không được chú ý
    Tôi thấy mình nên biết ơn nhiều hơn những sáng tạo tuyệt vời như vậy

  • Tôi đang dùng croc, một dự án tương tự có các tính năng hay: https://github.com/schollz/croc

  • Tôi từng chuyển một tệp 70GB bằng wormhole. Trước đây thì đó là chuyện hoàn toàn không thể
    Tôi biết mình đã dùng băng thông của máy chủ relay, nên ngay sau đó đã quyên góp cho Debian. Tôi hiểu là Debian vận hành relay cho phiên bản gói apt

    • Tôi là tác giả Magic Wormhole. Máy chủ relay do tôi vận hành, nhưng người bảo trì Debian đã đồng ý đưa một tên máy chủ thay thế vào phiên bản gói
      Đó là một CNAME trỏ tới cùng nơi với địa chỉ mà mã git upstream dùng, mục đích là để có thể đổi dễ dàng nếu phát sinh gánh nặng chi phí
      Từ trước đến nay chưa thành vấn đề; mỗi tháng nó chuyển khoảng 10–15TB, nhưng dù sao cũng dùng chung pool băng thông với các máy chủ khác mà tôi đang thuê, nên tôi mới chỉ phải trả phí vượt mức một lần
      Thành thật mà nói, nếu có ai quyên góp cho tôi thì có lẽ tôi cũng sẽ gửi nguyên khoản đó cho Debian
      Thỉnh thoảng khi ai đó đẩy qua nửa terabyte, tôi lại nghĩ mình nên chuyển sang một nhà cung cấp chậm hơn nhưng tính phí cố định, hoặc triển khai mã giới hạn tốc độ tốt hơn, hoặc cuối cùng triển khai phần mở rộng giao thức để client khai báo trước lượng dữ liệu sẽ truyền và máy chủ có thể từ chối
      Nhưng đến giờ việc đó vẫn chưa bao giờ đủ cao trong danh sách ưu tiên
    • Đọc tới đây mới thấy phần cốt lõi lộ ra một chút. Tôi tò mò liệu nó có phụ thuộc vào một máy chủ duy nhất hoặc một số ít máy chủ relay dạng quyên góp hay không
      Rõ ràng động lực lớn nhất là xuyên NAT-đến-NAT. Nếu hai bên không bị tường chắn thì cứ dùng scp, rsync, sftp là được
      Tôi cũng tò mò có thể cấu hình máy chủ relay hay không. Trông có vẻ như nó được hard-code ở một mức nào đó
    • Giao thức truyền của wormhole cố gắng thiết lập kết nối trực tiếp để tránh truyền dữ liệu qua relay
  • Tình cờ tôi cũng tìm thấy cái này. “Một bản triển khai bằng Rust của Magic Wormhole với các tính năng và cải tiến mới”: https://github.com/magic-wormhole/magic-wormhole.rs

    • Nó thiếu vài tính năng có trong các bản triển khai khác. Ví dụ không có chức năng gửi zip và giải nén đúng cách
  • Tôi là tác giả. Nếu có câu hỏi thì tôi có thể trả lời

    • Tôi dùng wormhole rất nhiều, nhưng cứ trì hoãn việc tìm hiểu xem nó có an toàn như ssh/scp không, nên tôi luôn mã hóa bằng gpg tệp cần gửi rồi mới đưa vào wormhole
      Như vậy có phải là hoang tưởng không?
    • Ban đầu tôi chỉ cần nó để bootstrap VM trên một máy mới, nhưng cuối cùng lại tiếp tục dùng cho nhiều mục đích. Dự án tuyệt vời
    • Tôi có vài câu hỏi. Tôi muốn biết có ứng dụng hay không, và khi dữ liệu quá lớn để đưa vào mã QR thì có thể chia sẻ mật khẩu bằng mã QR không
      Tôi cũng tò mò kế hoạch ứng phó với điện toán lượng tử là gì, và có kế hoạch chuyển sang mật mã hậu lượng tử để chống các cuộc tấn công lưu trữ rồi giải mã sau hay không
      Tôi cũng muốn biết liệu giao thức có thể được mở rộng lên trên một proxy tổng quát hơn như máy chủ TURN hay không
  • Cũng có một vài công cụ khác
    p2pcopy https://github.com/psantosl/p2pcopy
    pcp https://github.com/dennis-tra/pcp
    wormhole-william https://github.com/psanford/wormhole-william

  • Có thể là câu hỏi ngớ ngẩn, nhưng giữa iPhone và MacBook thì nên làm việc này thế nào?
    AirDrop bị tắt theo chính sách, dung lượng iCloud thì do lười dọn nên đã đầy, trên mọi thiết bị khác tôi dùng Syncthing nhưng không tìm được client dùng được trên iPhone công ty

    • Tôi đang dùng sharedrop.io; nó cũng là mã nguồn mở và hoạt động khá tốt: https://github.com/szimek/sharedrop
      Tôi đặc biệt thích vì không cần cài ứng dụng bên thứ ba trên bất kỳ thiết bị nào
      Trên Safari của Mac thì thường có vẻ không tốt bằng Chrome, nhưng tôi đã từng chuyển không cần cài đặt từ Windows sang iOS, từ Windows sang macOS, và từ macOS sang iOS
    • Nếu ở cùng một mạng, có LocalSend, một giải pháp thay thế AirDrop đa nền tảng mã nguồn mở: https://github.com/localsend/localsend
    • TailDrop, tính năng ăn tiền của Tailscale. Có thể truyền file đáng tin cậy giữa đủ loại thiết bị
    • Chỉ cần kết nối hai thiết bị vào cùng một mạng WiFi rồi dùng một HTTP server như python -m http.server là được
    • https://mobiussync.com/
  • Bài liên quan: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - tháng 5 năm 2021, 178 bình luận

  • Tailscale giờ cũng có Taildrop: https://tailscale.com/kb/1106/taildrop

    • Taildrop cũng ổn, nhưng nếu bạn thấy công cụ dòng lệnh là được thì Wormhole linh hoạt hơn nhiều và dễ dùng hơn
      Ở đây chúng tôi vẫn thường gửi file bằng wormhole, dù nhìn chung đang dùng Tailscale