4 ポイント 投稿者 GN⁺ 2024-08-18 | 1件のコメント | WhatsAppで共有
  • Magic Wormholeは、あるコンピューターから別のコンピューターへ、任意サイズのファイル、ディレクトリ、短いテキストを安全に移動するためのライブラリと wormhole コマンドラインツールを提供する
  • 転送の両端は同じ wormhole code で識別され、通常は送信側デバイスがコードを生成して表示し、受信側デバイスで入力する
  • コードには短くて人が発音しやすい単語リストが使われ、受信側ではコード語の タブ補完 が利用できるため、通常は数文字だけ入力すればよい
  • wormhole code は 使い捨て で、覚えておく必要はなく、プログラムは別リポジトリにある mailbox server と transit relay の2つのサーバーを使用する
  • Magic Wormhole は MIT ライセンス で配布され、Python 3.10 以上に対応し、3.12 までテストされている

Magic Wormhole が提供する機能

  • Magic Wormhole は「あるコンピューターから別のコンピューターへ安全に持っていく」ことを目標にしたプロジェクトである
  • パッケージは2つの形態を提供する
    • ライブラリ

      • wormhole という コマンドラインツール
      • 転送対象には以下が含まれる
      • 任意サイズのファイル
      • ディレクトリ
      • 短いテキスト断片

wormhole code ベースの転送方式

  • 2つのエンドポイントは同じ wormhole code を使って識別される
  • 一般的な流れは次のとおり
    • 送信側デバイスがコードを生成して画面に表示する
    • 受信側デバイスでそのコードを入力する
  • コードは短く、人が発音しやすく、音声的に区別しやすい単語リストを使用する
  • 受信側ではコード語に対する タブ補完 が提供されるため、通常は数文字だけ入力すればよい
  • wormhole code は 使い捨て で、覚えておく必要はない

サーバー構成

  • このプログラムは2つのサーバーを使用し、各サーバーのソースコードは別リポジトリにある

ドキュメントと発表資料

ライセンス、互換性、インストール

  • Magic Wormhole は MIT ライセンス で配布され、詳細は LICENSE ファイルにある
  • ライブラリは Python 3.10 以上 に対応し、3.12 までテストされている
  • Magic Wormhole パッケージは複数のオペレーティングシステムに含まれている
  • OS パッケージなしでインストールするには、Installation docs に従えばよい

1件のコメント

 
GN⁺ 2024-08-18
Hacker Newsでの意見
  • 奇妙なネットワーク環境でシステム間の大容量ファイルを移すときに何年も使っているが、ほとんど常に問題なく動く
    もう少し変わったテストとして、自前でMagic Wormholeリレーを立てて、非常に大きなファイルコピーをより速く安定させるよう調整できた
    Google Driveは数十GBのファイルを投げるとあまりに頻繁に崩れるので、今でも嫌い
    https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...

    • こうしたツールが進化していないのはかなり致命的。6年ほど前にはPAKE周辺で活動が活発だったが、今でも遅いリレーサーバーなしで使うための安定したホールパンチングや、長い高帯域経路で大量データを高速に送るための複数同時TCPストリーム、または慎重に設計されたUDPプロトコルが不足している
      最後にWormholeで大量データを送ろうとしたときは、帯域遅延積のせいで20MB/sに制限され、結局は普通のHTTPにaria2cとマルチストリームを使って1Gbps回線を使い切った
      PAKEベースのツールが長距離の大容量転送で、Globusのような過度に複雑なプロプライエタリツールを完全に置き換えられない理由はないと思うが、現実は過去にとどまっている
    • リレーサーバーはNATを越えるための初期ハンドシェイクにだけ使われ、その後の転送はP2Pになるのだと思っていた
      一部のネットワーク制限がある場合だけ実データがリレーを通るはずだが、そうでないなら無料リレーの運用コストをどう賄っているのか気になる
    • scp、LocalSend、magic wormhole、sharedrop.ioを組み合わせて使っており、急ぎのときはローカルダウンロード用にpython -m http.serverもたまに使う
      このxkcdの漫画が2011年と同じように今でも有効なのが残念: https://xkcd.com/949/
  • これは一つの機能をものすごくうまくこなす単機能ユーティリティの一つで、あまりにうまく動きながらも目立たないので、完全に見過ごされがち
    こういう素晴らしい創作物にもっと感謝すべきだと感じる

  • 似たプロジェクトで、良い機能を持つcrocを使っている: https://github.com/schollz/croc

  • wormholeで70GBのファイルを一度移してみた。昔なら到底できなかったこと
    リレーサーバーの帯域を使ったのは分かっていたので、すぐにDebianへ寄付した。aptパッケージ版のリレーをDebianが運用していると理解していた

    • Magic Wormholeの作者です。リレーサーバーは私が運用していますが、Debianメンテナーがパッケージ版に代替ホスト名を入れておくことに同意してくれました
      アップストリームのgitコードが使うアドレスと同じ場所を指すCNAMEで、費用負担が発生したら簡単に切り替えられるようにするのが目的でした
      今のところ問題にはなっておらず、月に10〜15TBほど転送していますが、いずれにせよ借りている他のサーバーと帯域プールを共有しているので、超過料金を払ったのは一度だけです
      誰かが私に寄付してくれても、正直そのままDebianに送ると思います
      ときどき誰かが半テラバイトを流すと、もっと遅いが定額制のプロバイダーへ移すか、より良い速度制限コードを実装するか、クライアントが転送するデータ量を事前に明示しサーバーが拒否できるプロトコル拡張をいよいよ実装すべきだと考えます
      ただ、まだ優先度が十分に高くなったことはありません
    • ここまで来てようやく核心が少し見えてきた。これが単一サーバーや少数の寄付型リレーサーバーに依存しているのか気になる
      NAT対NATの通過が最大の動機なのは明らか。両側に壁がなければ、単にscp、rsync、sftpを使えばいいのだから
      リレーサーバーを設定できるのかも気になる。ある程度ハードコードされているように見えた
    • wormholeの転送プロトコルは直接接続を試み、リレー経由のデータ転送を避けようとする
  • 偶然これも見つけた。「新機能と改善を取り入れたMagic WormholeのRust実装」: https://github.com/magic-wormhole/magic-wormhole.rs

    • 他の実装にある機能がいくつか欠けている。たとえばzipを送って正しく展開させる機能がない
  • 作者です。質問があれば答えられます

    • wormholeはよく使うが、ssh/scpと同じくらい安全か調べるのを先延ばしにしてきたので、いつも転送するファイルをgpgで暗号化してからwormholeに入れている
      これは偏執的な行動だろうか?
    • 新しいマシンでVMをブートストラップするためだけに必要だったが、結局いろいろな用途で使い続けるようになった。素晴らしいプロジェクト
    • いくつか質問がある。アプリはあるのか、データがQRコードに収まるには大きすぎる場合にパスワードをQRコードで共有できるのか気になる
      量子コンピューティングにはどう対応する予定なのか、保存して後で復号する攻撃に備えて耐量子暗号へ移行する計画があるのかも気になる
      プロトコルをTURNサーバーのような、より一般的なプロキシ上へ拡張できるのかも知りたい
  • ほかにもいくつかツールがある
    p2pcopy https://github.com/psantosl/p2pcopy
    pcp https://github.com/dennis-tra/pcp
    wormhole-william https://github.com/psanford/wormhole-william

  • ばかな質問かもしれないけど、iPhoneとMacBookの間ではこれをどうやるのがいいだろう?
    AirDropはポリシー上無効化されていて、iCloudストレージは怠っていたせいでいっぱい、ほかのすべてのデバイスではSyncthingを使っているが、会社のiPhoneで使えるクライアントが見つからなかった

    • sharedrop.ioを使っている。オープンソースでもあり、かなりうまく動く: https://github.com/szimek/sharedrop
      特に、どのデバイスにもサードパーティーアプリをインストールする必要がないところが気に入っている
      MacのSafariではたいていChromeほどはうまく動かないようだが、WindowsからiOS、WindowsからmacOS、macOSからiOSへ、インストールなしで転送したことがある
    • 同じネットワークにいるなら、クロスプラットフォームのオープンソースなAirDrop代替であるLocalSendがある: https://github.com/localsend/localsend
    • Tailscaleのキラー機能であるTailDropがある。あらゆるデバイス間で信頼性高くファイル転送できる
    • 2台のデバイスを同じWiFiネットワークに接続して、python -m http.serverのようなHTTPサーバーを使えばいい
    • https://mobiussync.com/
  • 関連記事: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - 2021年5月、コメント178件

  • Tailscaleにも今ではTaildropがある: https://tailscale.com/kb/1106/taildrop

    • Taildropも悪くないが、コマンドラインツールで問題ないならWormholeのほうがずっと柔軟で使いやすい
      こちらではTailscaleを全般的に使っているにもかかわらず、今でもファイルはwormholeで送ることが多い