1P by GN⁺ 12시간전 | ★ favorite | 댓글 1개
  • Dumbpipe는 두 컴퓨터 간에 간편하게 데이터 파이프 연결을 가능하게 하는 유닉스 스타일 도구
  • 설치와 사용이 매우 간단하며, 계정이나 별도의 설정이 필요 없음
  • 한 컴퓨터에서는 수신자 모드로 대기하고 비밀 키와 연결 명령어를 제공함
  • 다른 컴퓨터에서는 명령어 한 줄로 송신 및 연결해 데이터를 전달할 수 있음
  • 네트워크 환경에 관계없이 동작하므로 위치와 관계없이 활용 가능함

Dumbpipe 소개

  • 두 대의 컴퓨터 사이에 유닉스 파이프와 같은 방식으로 직접 데이터를 주고받을 수 있는 오픈 소스 도구
  • 복잡한 설정 없이 한 줄로 설치 및 실행 가능함으로, 실용적이고 접근성이 높음

주요 특징

  • 한 컴퓨터에 설치 후 ./dumbpipe listen 명령어로 대기(수신) 모드 진입 가능
    • 실행 시 자동으로 생성된 비밀 키와 함께, 다른 컴퓨터에서 접속할 수 있는 전용 연결 명령어가 제공됨
  • 송신자는 echo "hello" | ./dumbpipe connect ... 형태로 간편하게 데이터 송신 가능
  • 별도의 계정 생성 필요 없음
    • 가입, 로그인, 회원 정보 등록 없이 바로 이용 가능
  • 추가 설정 없이 즉시 동작
    • 별도 환경 변수, 구성 파일, 방화벽 세팅 없이 곧바로 활용 가능
  • 전 세계 어디에서나 두 기기 간 데이터 송수신
    • 사설망, 클라우드, 로컬 네트워크 등 네트워크 환경에 제한 없이 동작함

사용 예시 요약

  • 수신자는 dumbpipe를 listen 모드로 실행해 연결에 필요한 키 등을 복사해 전달함
  • 송신자는 해당 키가 포함된 connect 명령어를 이용해 데이터를 스트림 형태로 전송함

활용의 시사점

  • 신규 사용자나 비숙련자도 쉽게 네트워크 데이터 전송 파이프라인 구성이 가능해짐
  • 파일이나 간단한 메시지 전송, 기기간 데이터 중계, 개발 및 배포 자동화 등 다양한 용도에 빠르게 활용 가능함
  • 단일 명령 및 직관적 워크플로우로 엔지니어 생산성에 기여
Hacker News 의견
  • ssh와 socat 또는 mkfifo를 활용해서 원격으로 커맨드를 주고받는 방법에 대해 소개함

    # 수신자
    socat UNIX-RECV:/tmp/foobar - | my-command
    
    # 송신자
    my-command | ssh host socat - UNIX-SENDTO:/tmp/foobar
    

    만약 대상이 방화벽이나 NAT에 가로막혀 있다면 ssh-j.com과 같은 퍼블릭 SSH 서버를 릴레이 삼아 안전하게 데이터를 송수신할 수 있음 (이중 SSH 터널링 활용)

    # 수신자
    ssh top-secret@ssh-j.com -N -R ssh:22:localhost:22
    socat UNIX-RECV:/tmp/foobar - | my command
    
    # 송신자
    my-command | ssh -J top-secret@ssh-j.com ssh socat - UNIX-SENDTO:/tmp/foobar
    

    beam 관련 쓰레드에 처음 올렸던 내용임 링크

    • spiped라는 툴을 사용하면 ssh를 전제하지 않아도 더 간단하게 구현 가능함 spiped 공식 사이트
    • 이 방식은 dumbpipe가 설명하는 주요 목표를 충족시키지 못함. 예를 들어, QUIC을 쓰지 않고, 가능하면 릴레이를 피하지도 않으며, 자동 릴레이 선택 및 네트워크 변화에 따라 연결 유지 기능이 없음. 게다가 SSH 키 관리는 사용자가 별도로 해야 하고 dumbpipe는 임의의 ASCII 문자열로 키를 제공함. WireGuard가 dumbpipe와 더 유사함
    • dumbpipe 소개 링크에 첫 문장:
      Dumb pipe punches through NATs, using on-the-fly node identifiers. It even keeps your machines connected as network conditions change.
      
    • wg 서버를 구축해서 두 클라이언트를 연결하면 각자의 IP로 데이터를 전달할 수 있지만, 결국 중앙 릴레이가 데이터 중계 역할을 함 (NAT 여부 상관 없음)
    • ssh-j.com을 이제서야 알게 되었는데, 꽤 흥미로움
  • 두 PC가 USB 케이블만으로 간단히 파일을 주고받는 것이 표준이 아닌 이유가 궁금함. 모든 OS에서 동일한 프로토콜만 지원하면 아주 처음부터 제공됐어야 할 기능 같음. USB A-A 케이블 이론상 존재하지 않는 건 알지만 그런 점이야말로 필요성의 근거가 됨. USB C라면 충분히 가능할 텐데, Android와 PC 간에는 어느 정도 가능하지만 두 대의 노트북끼리는 안됨

    • USB-C (USB4/Thunderbolt)로 두 기기를 연결하면 네트워크 연결이 생성됨. 기본으로는 Link-Local 주소만 받아 SSH 등 쓸 땐 조금 번거롭지만 자동 네트워크 검색 기능이 있으면 꽤 원활하게 동작함. 참고: Thunderbolt Networking on Linux, SuperUser 답변
    • 무선으로 케이블 없이도 LAN 없이도 가능했던 기술이 이미 Nintendo DS에도 구현돼 있었음. 지난 40년간 파일 전송 문제는 셀 수 없이 다양한 방법으로 해결됐지만, 일부 사람들은 클라우드 서비스 없이 이 문제가 영원히 해결되길 원하지 않는 느낌임. dumbpipe가 흥미롭기는 하지만 기존 수많은 솔루션과 같은 현실적 벽에 부딪힐 수 있음. 예를 들어, 50MB 파일을 리눅스 유저가 윈도우즈 유저에게 주고싶어도, 윈도우즈 쪽에서 별도 프로그램을 설치하지 않으면 받을 방법이 없음
    • USB는 구조적으로 비대칭이기 때문에, 호스트와 디바이스가 나눠짐. 디바이스는 폴링 방식의 슬레이브로 동작. 두 PC간 유선 직접 연결은 이미 USB 이전에 이더넷으로 해결된 문제임
    • TCP/IP가 범용 표준이 되기 전에는 이더넷 크로스오버 케이블로 대형 파일을 전송했음. 요즘은 많은 PC에서 이더넷 포트를 없애는 추세인데, 소유자가 자신의 파일을 제3자의 인터넷 컴퓨터(클라우드)에 올리게 하려는 관점과 연관된 변경임. 세월이 지나며 파일 전송 방법이 다양해졌지만, 크로스오버 케이블 방식은 여전히 잘 동작하고 USB to Ethernet 어댑터만 있어도 가능함. 특별한 소프트웨어, 라우터, 인터넷, 제3자 불필요. TCP/IP만 있으면 충분함
    • 리눅스에서는 모바일 디바이스처럼 MTP 엔드포인트를 생성하면 가능함 uMTP-Responder
      MS도 이를 지원하는 도구를 냈지만 Windows CE에서만 제공했던 모양임 MS 공식 링크
  • 관련해서, 내가 정리한 (주로 브라우저 기반 + 약간의 CLI) 파일 전송 툴 목록이 있음. 상황 나올 때마다 공유하며 좋은 툴을 추가로 찾고 있음 나의 툴 리스트

    • LocalSend를 선호함. 자체 기기 간 빠른 전송에 탁월하고 모든 OS에서 잘 작동함 LocalSend 깃허브
    • dumbpipe 만든 팀이 Sendme도 만들었는데, 이 용도에 훨씬 가깝게 설계됨 Sendme 깃허브
  • dumbpipe와 Tailscale 간에 얼마나 중복 구현이 많은지 궁금함. 서로 공통적으로 필요로 하는 기능이 많아 보이는데, NAT 통과처럼 저수준에서 이미 사용할 수 있는 라이브러리가 많을 것 같음. 아니면 이게 최초의 그런 라이브러리일 수도 있음

    • 굳이 따지자면, Tailscale 자체도 같은 아이디어의 600번째 구현임. 그 이전에도 nebula, tinc 등이 있었음. 단지 WireGuard가 부상하는 시점에 등장해서 대규모 홍보에 VC 자금까지 더해진 효과임
    • Iroh는 애플리케이션 계층에 훨씬 적합함. 여러 개의 QUIC 스트림을 하나의 연결에서 목적별로 멀티플렉싱할 수 있음. QUIC 접근권만 있으면 돼서 가상 네트워크 인터페이스도 필요 없음. 비슷한 예로는 gRPC가 있지만 byte stream 제어가 자유롭고, 한 스트림은 음성 통화, 다른 건 파일 전송, 또 다른 건 단순 RPC 등으로 실시간 분할해서 쓸 수 있음. WebRTC와 가장 비슷하지만 SCTP나 RTMP보다 더 많은 옵션 제공함
    • 이건 iroh로 만든 것으로, 분산 소프트웨어를 위한 저수준 프레임워크를 목표로 함. 네트워킹 외에도 데이터 복제 및 일관성 유지에 필요한 다양한 자료구조를 포함함
    • 모바일/cignat에서 Tailscale로 폰 연결해본 게 정말 드문 소프트웨어 "아하" 경험이었음
    • tailscale은 WireGuard 기반에 일부 hole-punch 기능을 더한 래퍼라고 생각함
  • pico.sh에서는 유사한 파일 전송 기능을 SSH를 활용해 구현했음 pipe.pico.sh

    • dumbpipe와 직접 벤치마크한다면 성능이나 사용성에서 어떤 결과가 나올지 궁금함
  • 이와 유사한 터널링 툴 생태계에 관심 있다면, 참고할 만한 awesome 리스트가 있음 awesome-tunneling

  • iroh는 정말 환상적인 기술임. 2주 전 베를린 web3 summit에서 Rüdiger(N0)의 워크샵에 참석했는데, 엄청난 영감을 받았음. 이와 유사한 서비스 만드는 코드가 여기에 공개돼 있음 iroh-workshop 코드 슬라이드도 꼭 둘러보길 추천함

  • 좀 더 발전된 pipe를 원한다면, 내가 Iroh 기반으로 빌드 중인 터널 매니저 CLI도 있음. TCP, UDP, UNIX 소켓 포트 포워딩 지원 qtm 깃랩

  • 이런 솔루션은 1년에 한두 번씩은 출시됨. 연결 오케스트레이션에 특화된 괜찮은 오픈소스로 Spacebrew를 추천함 Spacebrew 공식 문서

    • 그런 면에선 사실이지만, 이 프로젝트의 브랜딩은 정말 독특함. 말 그대로 덤파이프 사람 캐릭터에 우스꽝스러운 팔 컨셉임. 게다가 그냥 잘 동작함
    • "2023년에는..."
  • 항상 이 방법이 특히 흥미로웠음 pwnat 깃허브
    모든 경우를 커버하진 못하고 좀 더 복잡하지만, 중간 매개체가 필요없다는 최대 장점 있음

    • 이건 꽤 오래된 솔루션이고, 요즘 라우터 일부에서 문제를 겪는 경우도 있음 이슈 링크
    • slipstream 깃허브가 새로 나온 버전임
    • 이런 툴을 처음 알았는데 정말 쓸만해 보임. 단, NAT 구조의 한계로 인해서 이 접근은 방화벽 규칙을 무시하고 악성 프로그램이 인바운드 연결을 쉽게 열 수 있다는 단점도 있음
    • 무엇보다 Samy는 나에게 영웅 같은 존재임