21 điểm bởi GN⁺ 2025-07-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Dumbpipe là một công cụ kiểu Unix cho phép kết nối đường ống dữ liệu một cách đơn giản giữa hai máy tính
  • Cài đặt và sử dụng rất đơn giản, không cần tài khoản hay thiết lập riêng
  • Trên một máy tính, có thể chờ ở chế độ nhận và nhận khóa bí mật cùng lệnh kết nối
  • Trên máy tính còn lại, có thể gửi và kết nối chỉ bằng một dòng lệnh để truyền dữ liệu
  • Công cụ hoạt động bất kể môi trường mạng, nên có thể dùng ở mọi nơi

Giới thiệu về Dumbpipe

  • Công cụ mã nguồn mở cho phép trao đổi dữ liệu trực tiếp giữa hai máy tính theo cách giống Unix pipe
  • Có thể cài đặt và chạy chỉ với một dòng lệnh mà không cần cấu hình phức tạp, nên rất thực dụng và dễ tiếp cận

Các tính năng chính

  • Sau khi cài trên một máy tính, có thể vào chế độ chờ (nhận) bằng lệnh ./dumbpipe listen
    • Khi chạy, công cụ sẽ tự động tạo khóa bí mật và cung cấp lệnh kết nối chuyên dụng để máy tính khác có thể truy cập
  • Bên gửi có thể gửi dữ liệu dễ dàng theo dạng echo "hello" | ./dumbpipe connect ...
  • Không cần tạo tài khoản riêng
    • Có thể dùng ngay mà không cần đăng ký, đăng nhập hay khai báo thông tin thành viên
  • Hoạt động ngay không cần cấu hình bổ sung
    • Có thể sử dụng ngay mà không cần biến môi trường, tệp cấu hình hay thiết lập tường lửa riêng
  • Truyền nhận dữ liệu giữa hai thiết bị từ bất kỳ đâu trên thế giới
    • Hoạt động không bị giới hạn bởi môi trường mạng như mạng riêng, đám mây hay mạng cục bộ

Tóm tắt ví dụ sử dụng

  • Bên nhận chạy dumbpipe ở chế độ listen để sao chép và gửi khóa cùng các thông tin cần thiết cho kết nối
  • Bên gửi dùng lệnh connect có chứa khóa đó để truyền dữ liệu dưới dạng stream

Hàm ý ứng dụng

  • Ngay cả người dùng mới hoặc ít kinh nghiệm cũng có thể dễ dàng xây dựng pipeline truyền dữ liệu mạng
  • Có thể nhanh chóng áp dụng cho nhiều mục đích như truyền tệp hoặc thông điệp đơn giản, chuyển tiếp dữ liệu giữa các thiết bị, phát triển và tự động hóa triển khai
  • Quy trình trực quan và chỉ cần một lệnh giúp nâng cao năng suất cho kỹ sư

1 bình luận

 
GN⁺ 2025-07-28
Ý kiến Hacker News
  • Giới thiệu cách dùng ssh với socat hoặc mkfifo để trao đổi lệnh từ xa

    # bên nhận
    socat UNIX-RECV:/tmp/foobar - | my-command
    
    # bên gửi
    my-command | ssh host socat - UNIX-SENDTO:/tmp/foobar
    

    Nếu phía đích bị chặn bởi firewall hoặc NAT, có thể dùng một máy chủ SSH công khai như ssh-j.com làm relay để truyền nhận dữ liệu an toàn (dùng SSH tunneling kép)

    # bên nhận
    ssh top-secret@ssh-j.com -N -R ssh:22:localhost:22
    socat UNIX-RECV:/tmp/foobar - | my command
    
    # bên gửi
    my-command | ssh -J top-secret@ssh-j.com ssh socat - UNIX-SENDTO:/tmp/foobar
    

    Đây là nội dung từng được đăng lần đầu trong thread liên quan đến beam liên kết

    • Nếu dùng công cụ spiped thì có thể triển khai đơn giản hơn mà không cần giả định phải có ssh trang chính thức của spiped
    • Cách này không đáp ứng được các mục tiêu chính mà dumbpipe mô tả. Ví dụ, nó không dùng QUIC, cũng không cố tránh relay nếu có thể, không có chọn relay tự động và cũng không duy trì kết nối khi điều kiện mạng thay đổi. Ngoài ra, người dùng vẫn phải tự quản lý SSH key, trong khi dumbpipe cung cấp key bằng một chuỗi ASCII tùy ý. WireGuard giống dumbpipe hơn
    • Câu đầu tiên trong trang giới thiệu dumbpipe:
      Dumb pipe punches through NATs, using on-the-fly node identifiers. It even keeps your machines connected as network conditions change.
      
    • Nếu dựng một máy chủ wg để nối hai client thì vẫn có thể truyền dữ liệu theo IP riêng của mỗi bên, nhưng rốt cuộc relay trung tâm vẫn đóng vai trò trung chuyển dữ liệu (bất kể có NAT hay không)
    • Giờ mới biết đến ssh-j.com, khá thú vị
  • Tò mò vì sao việc hai PC chỉ cần một cáp USB để trao đổi file đơn giản lại không trở thành chuẩn. Nếu mọi OS chỉ cần hỗ trợ cùng một giao thức thì có vẻ đây phải là tính năng có từ rất sớm. Dù về lý thuyết cáp USB A-A không tồn tại, chính điều đó lại càng cho thấy nhu cầu là có thật. Với USB C thì đáng lẽ hoàn toàn làm được; giữa Android và PC thì phần nào làm được, nhưng giữa hai laptop với nhau thì không

    • Khi nối hai thiết bị qua USB-C (USB4/Thunderbolt), một kết nối mạng sẽ được tạo ra. Mặc định chỉ nhận địa chỉ Link-Local nên khi dùng SSH v.v. hơi bất tiện, nhưng nếu có tự động khám phá mạng thì hoạt động khá mượt. Tham khảo: Thunderbolt Networking on Linux, câu trả lời trên SuperUser
    • Ngay cả Nintendo DS cũng từng có công nghệ cho phép làm việc này không dây, không cần cáp và cũng không cần LAN. Trong 40 năm qua, bài toán truyền file đã được giải theo vô số cách, nhưng có cảm giác một số người không bao giờ muốn nó được giải dứt điểm nếu không dùng dịch vụ đám mây. dumbpipe thì thú vị thật, nhưng có thể cũng sẽ va phải những rào cản thực tế giống vô số giải pháp trước đó. Ví dụ, nếu người dùng Linux muốn gửi một file 50MB cho người dùng Windows thì phía Windows sẽ không có cách nhận nếu không cài thêm chương trình riêng
    • USB về mặt cấu trúc là bất đối xứng, phân thành host và device. Device hoạt động như slave theo kiểu polling. Việc nối dây trực tiếp giữa hai PC thực ra đã được giải quyết từ trước thời USB bằng Ethernet rồi
    • Trước khi TCP/IP trở thành chuẩn phổ quát, người ta từng dùng cáp Ethernet crossover để chuyển file lớn. Ngày nay nhiều PC đang dần bỏ cổng Ethernet; đó là một thay đổi gắn với góc nhìn muốn chủ sở hữu tải file của mình lên máy tính Internet của bên thứ ba (đám mây). Theo thời gian, các cách truyền file đã đa dạng hơn, nhưng cách dùng cáp crossover vẫn hoạt động rất tốt và chỉ cần thêm adapter USB to Ethernet là xong. Không cần phần mềm đặc biệt, router, Internet hay bên thứ ba. Chỉ cần TCP/IP là đủ
    • Trên Linux, có thể làm được bằng cách tạo một endpoint MTP giống như thiết bị di động uMTP-Responder
      MS cũng từng phát hành công cụ hỗ trợ việc này, nhưng có vẻ chỉ cung cấp cho Windows CE liên kết chính thức của MS
  • Liên quan đến chủ đề này, tôi có một danh sách các công cụ truyền file đã tổng hợp (chủ yếu dựa trên trình duyệt + một ít CLI). Mỗi khi có dịp tôi lại chia sẻ và tiếp tục tìm thêm công cụ hay để bổ sung danh sách công cụ của tôi

    • Tôi thích LocalSend. Nó rất mạnh trong việc truyền nhanh giữa các thiết bị cá nhân và hoạt động tốt trên mọi OS GitHub của LocalSend
    • Đội ngũ làm dumbpipe cũng tạo ra Sendme, và nó được thiết kế đúng với mục đích này hơn nhiều GitHub của Sendme
  • Tò mò không biết giữa dumbpipe và Tailscale có bao nhiêu phần bị triển khai trùng lặp. Có vẻ cả hai đều cần khá nhiều tính năng chung, như NAT traversal, nên hẳn đã có nhiều thư viện low-level dùng được sẵn. Hoặc cũng có thể đây chính là thư viện đầu tiên kiểu đó

    • Nếu nói cho cùng, bản thân Tailscale cũng chỉ là lần triển khai thứ 600 của cùng một ý tưởng. Trước đó đã có nebula, tinc v.v. Chỉ là nó xuất hiện đúng lúc WireGuard đang lên, lại có quảng bá quy mô lớn và cả vốn VC hỗ trợ
    • Iroh phù hợp hơn nhiều ở tầng ứng dụng. Bạn có thể multiplex nhiều QUIC stream theo từng mục đích khác nhau trên cùng một kết nối. Chỉ cần có quyền truy cập QUIC, không cần interface mạng ảo. Một ví dụ tương tự là gRPC, nhưng ở đây bạn kiểm soát byte stream tự do hơn: một stream có thể dùng cho cuộc gọi thoại, stream khác cho truyền file, stream nữa cho RPC đơn giản, tất cả đều được chia tách theo thời gian thực. Nó giống WebRTC nhất, nhưng cung cấp nhiều tùy chọn hơn SCTP hay RTMP
    • Đây là thứ được xây bằng iroh, hướng tới một framework low-level cho phần mềm phân tán. Ngoài networking, nó còn bao gồm nhiều cấu trúc dữ liệu cần cho việc sao chép dữ liệu và duy trì tính nhất quán
    • Việc kết nối điện thoại qua Tailscale trong môi trường mobile/cgnat là một trải nghiệm "à ha" về phần mềm mà tôi rất hiếm khi gặp
    • Tôi xem tailscale là một lớp bọc dựa trên WireGuard có thêm một ít khả năng hole-punch
  • Trên pico.sh, họ cũng đã triển khai một tính năng truyền file tương tự bằng SSH pipe.pico.sh

    • Tò mò nếu benchmark trực tiếp với dumbpipe thì kết quả về hiệu năng hoặc trải nghiệm sử dụng sẽ ra sao
  • Nếu quan tâm đến hệ sinh thái các công cụ tunneling tương tự, có một danh sách awesome khá đáng tham khảo awesome-tunneling

  • iroh thực sự là một công nghệ tuyệt vời. Hai tuần trước tôi đã tham dự workshop của Rüdiger (N0) tại web3 summit ở Berlin và thấy cực kỳ truyền cảm hứng. Mã nguồn để xây một dịch vụ tương tự cũng được công khai ở đây mã workshop iroh, rất nên xem cả slide nữa

  • Nếu muốn một pipe nâng cao hơn, tôi cũng có một CLI quản lý tunnel đang xây dựa trên Iroh. Hỗ trợ TCP, UDP, và port forwarding cho UNIX socket qtm trên GitLab

  • Những giải pháp kiểu này cứ một hai lần mỗi năm lại xuất hiện. Nếu cần một mã nguồn mở ổn chuyên về orchestration kết nối, tôi đề xuất Spacebrew tài liệu chính thức của Spacebrew

    • Xét ở khía cạnh đó thì đúng thật, nhưng branding của dự án này thực sự rất độc đáo. Theo đúng nghĩa đen là một nhân vật người ống ngu ngơ với cánh tay ngộ nghĩnh. Và hơn nữa là nó đơn giản là chạy tốt
    • "Năm 2023 thì..."
  • Tôi luôn thấy cách này đặc biệt thú vị GitHub của pwnat
    Nó không bao phủ được mọi trường hợp và phức tạp hơn một chút, nhưng ưu điểm lớn nhất là không cần bên trung gian

    • Đây là một giải pháp khá cũ và hiện nay có thể gặp vấn đề với một số router đời mới liên kết issue
    • GitHub của slipstream là phiên bản mới hơn
    • Tôi mới biết đến các công cụ kiểu này lần đầu và chúng có vẻ thực sự hữu ích. Tuy nhiên, do giới hạn của cấu trúc NAT, cách tiếp cận này cũng có nhược điểm là cho phép phần mềm độc hại mở kết nối inbound khá dễ bằng cách bỏ qua các quy tắc firewall
    • Trên hết, Samy đúng là một người hùng đối với tôi