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는 미러입니다).
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트