mmalmi/nostr-vpn

Private mesh VPN for humans and agents. Local keys, signed enrollment, no provider account. Native apps and CLI.

그것이 무엇인가

nostr-vpn은 Tailscale과 같은 프라이빗 메시 VPN으로, 자신의 기기, 서버, 에이전트를 프라이빗 네트워크에 연결할 수 있습니다. Nostr ID(공개/개인 키 쌍)와 서명된 기기 명단을 사용하여 참여자를 제어합니다. 이메일, 전화번호, VPN 제공업체 계정이 필요 없습니다.

데이터 플레인은 원래 FIPS 프로젝트를 기반으로 독립적으로 발전된 FIPS 프로토콜(VPN 터널링 프로토콜) 구현으로 구동됩니다. 이 프로젝트에는 바이트 단위로 가격이 책정되고 Cashu를 통해 비트코인으로 지불되는 공용 출구 노드 대역폭을 사고팔 수 있는 실험적 마켓플레이스도 포함되어 있습니다.

작동 방식

  • 등록: 기기가 키 쌍을 생성하고 서명된 가입 요청을 보내면 관리자가 명시적으로 승인해야 합니다. 관리자의 앱이 업데이트된 명단에 서명하고 배포합니다. 승인은 절대 자동으로 이루어지지 않습니다.
  • 연결: 가능한 경우 피어가 직접 연결합니다(UDP). 직접 UDP를 사용할 수 없으면 트래픽이 FIPS 이웃을 통해 라우팅됩니다.
  • 내장 기능: MagicDNS(이름 확인), 서브넷 경로, 출구 노드, WireGuard 업스트림 이그레스.
  • 성능: 이 포크는 고속 VPN 트래픽에 최적화되어 있습니다. 비교 가능한 직접 경로 벤치마크에서 패킷 소유권, 버퍼, 세션 상태를 함께 유지하고 I/O 및 암호화를 일괄 처리하며 패킷 저장소를 재사용하고 패킷별 큐 홉, 할당, 복사, 반복 조회를 피함으로써 원래 구현의 약 3배 처리량을 제공합니다. FIPS 프로토콜 표면을 유지합니다.

유료 출구(마켓플레이스)

  • 제공자는 Nostr를 통해 바이트 단위 가격을 광고합니다. 구매자는 Cashu Spilman 채널에 자금을 지원하고 대역폭을 사용할 때 결제 업데이트에 서명합니다.
  • 업로드는 전송으로 계산됩니다. UDP 응답과 확인된 TCP 다운로드도 계산되지만 TCP 재전송에 대해 이중 청구되지는 않습니다.
  • 제공자 선택은 수동 또는 자동(연결 품질, 신뢰할 수 있는 평점, 가격 기준)일 수 있습니다.
  • 채널은 12시간 서비스 중단 전에 갱신됩니다. 제공자는 그 후 자동 수금을 시작합니다. 구매자는 24시간 후에 미수금 자금을 회수할 수 있습니다.
  • DNS는 기본적으로 암호화되지만 출구 노드는 여전히 대상 IP와 암호화되지 않은 트래픽을 볼 수 있습니다. README는 민감한 데이터에 HTTPS를 사용할 것을 권장합니다.

구성 요소 및 플랫폼

  • CLI 및 데몬: nvpn(cargo install nvpn 또는 사전 빌드된 아카이브로 설치 가능).
  • 네이티브 앱: macOS(Apple Silicon), Linux(x64), Windows(x64), Android(arm64), iOS(arm64). Intel macOS는 소스 전용입니다.
  • 서버 패키지: 서명된 StartOS(Start9) .s9pk 패키지 및 다중 아키텍처 Umbrel 이미지.
  • 다운로드: git.iris.to 릴리스 또는 GitHub 미러; iOS는 App Store/TestFlight, Android는 APK 또는 Zapstore.

빠른 시작(두 기기)

첫 번째 기기(네트워크 생성):

nvpn init
DEVICE_ID='<nvpn init의 nostr_pubkey 붙여넣기>'
nvpn set --device "$DEVICE_ID"
nvpn start --daemon --connect

두 번째 기기(가입):

nvpn init
nvpn start --daemon --connect
nvpn join-request

관리자가 앱에서 승인: 기기 → 가입 요청 추가에서 요청을 스캔/붙여넣고 세부 정보를 확인한 후 기기 추가를 확인합니다. 가입 데몬은 승인을 받을 때까지 계속 실행되어야 합니다.

데몬 수명 주기: nvpn start --daemon --connect → nvpn status → nvpn stop.

부팅 서비스: sudo nvpn service install --config <경로>(Linux/macOS). status, set, service status 명령에 동일한 --config 경로를 사용합니다. 서비스가 구성/상태 파일을 소유하는 경우 sudo로 실행합니다. Windows에서는 관리자 셸에서 실행합니다.

컨테이너 및 헤드리스 노드

  • 컨테이너 아키텍처와 일치하는 Linux CLI 아카이브를 사용합니다. 구성 디렉터리(키 사이드카 포함)를 유지하고 모든 명령에 동일한 --config 경로를 전달합니다.
  • 요구 사항: root, /dev/net/tun, NET_ADMIN, iproute2, 그리고 nftables(출구 보호) 및 iptables(출구 전달 및 레거시 규칙 정리).
  • 컨테이너 제한으로 인해 경로 정리가 차단될 수 있습니다(예: 읽기 전용 /proc/sys/net/ipv4/route/flush로 인해 ip route flush cache가 실패). 권한 모드는 격리된 테스트 컨테이너의 해결 방법이며 보편적인 프로덕션 요구 사항은 아닙니다.
  • systemd-resolved가 없으면 분할 MagicDNS는 로그에 인쇄된 로컬 주소/포트(일반적으로 127.0.0.1:1053)에서만 사용할 수 있습니다. 이는 이름이 시스템 리졸버를 통해 자동으로 해석된다는 의미는 아닙니다.
  • 상태 확인에는 nvpn start --daemon --connect를 사용하고 nvpn status --json에서 status_source == "daemon"을 요구합니다. 포그라운드 nvpn connect 세션은 데몬 상태를 게시하지 않습니다.

빌드 및 검증

just build
just run
just verify-fast

(특정 데스크톱 대상에는 just run-macos / just run-linux 사용; 더 광범위한 검사는 docs/verification-tiers.md 참조.)

문서 링크

  • 프로토콜 세부 정보: docs/protocol.md(등록, 명단 동기화, 라우팅, DNS 개인 정보 보호)
  • StartOS 패키징: CONTRIBUTING.md
  • 변경 로그: CHANGELOG.md
  • 보안 보고서: SECURITY.md
  • 성능 실험: docs/EXPERIMENTS.md
  • 플랫폼 구현 상태: docs/native-ui-parity-matrix.md

정식 저장소: git.iris.to(GitHub는 미러입니다).

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트