본문으로 건너뛰기
0
r/jeffnews HN 약 4분

Qanah — WireGuard 설정 그대로 쓰면서 WebRTC로 NAT 뚫는 P2P VPN

devops

요약

WireGuard 설정 파일을 그대로 사용하면서 UDP 대신 WebRTC 데이터 채널로 IP 패킷을 터널링하는 P2P VPN. CGNAT 뒤에서도 동작하고, WireGuard가 차단된 네트워크에서도 사용 가능.

기사 전체 정리

  • Qanah(قَناة, 아랍어로 "터널")은 WireGuard 설정 파일을 그대로 쓰면서 WebRTC 데이터 채널 위에 VPN 터널을 만드는 P2P VPN임. 전통적인 WireGuard UDP 전송 대신 TUN 디바이스를 만들어서 raw IP 패킷을 WebRTC로 터널링하는 방식

  • 이게 왜 의미가 있냐면:

    • CGNAT 뒤에 있어도 됨 — ICE/STUN으로 NAT 통과하니까 공인 IP도, 포트 포워딩도, 업스트림 네트워크 제어도 필요 없음
    • WireGuard/UDP가 차단된 네트워크에서도 동작 — ISP나 국가 방화벽이 WireGuard 프로토콜이나 아웃바운드 UDP를 막아도 WebRTC/ICE 경유로 표준 포트를 통해 빠져나감
    • 메시 네트워킹 지원 — 여러 피어가 동시 연결 가능하고, 직접 연결 안 되는 피어로의 트래픽은 다른 연결된 피어를 경유해 1홉 릴레이
sequenceDiagram
    participant 피어A as 피어 A (CGNAT 뒤)
    participant MQTT as MQTT 시그널링 서버
    participant STUN as STUN 서버
    participant 피어B as 피어 B (CGNAT 뒤)
    피어A->>MQTT: SDP offer 전송
    MQTT->>피어B: SDP offer 전달
    피어B->>MQTT: SDP answer 전송
    MQTT->>피어A: SDP answer 전달
    피어A->>STUN: ICE candidate 수집
    피어B->>STUN: ICE candidate 수집
    피어A->>피어B: WebRTC 데이터 채널 (ChaCha20-Poly1305 암호화)
    피어B->>피어A: 양방향 IP 패킷 터널링
  • 암호화는 X25519 키 교환 + ChaCha20-Poly1305. WireGuard 설정의 PrivateKey/PublicKey로 공유 비밀을 유도하고, PresharedKey가 있으면 포스트 퀀텀 저항을 위해 혼합함. 방향별로 독립된 키를 사용

  • 시그널링은 기본적으로 MQTT 브로커(broker.emqx.io:1883)로 자동 교환하지만, offer/answer 서브커맨드로 수동 복붙 방식도 가능. 일회성 세션(페어 프로그래밍, 서포트 접근, 데모)에 유용함

  • Rust로 작성됐고, Linux에서만 동작(TUN 디바이스 필요), root/sudo 권한 필요. 설정 파일명이 TUN 인터페이스 이름이 되는 건 wg-quick 컨벤션과 동일 (wg0.conf → wg0)

💡

> --no-relay 플래그로 릴레이를 끄면 직접 피어 라우트만 사용하고 직접 연결 없는 패킷은 드롭됨. 보안이 중요한 환경에서 유용함

핵심 포인트

  • WireGuard 설정 파일 호환, UDP 대신 WebRTC 데이터 채널 사용
  • ICE/STUN으로 NAT 통과 — 공인 IP, 포트 포워딩 불필요
  • 메시 네트워킹 + 1홉 릴레이 지원
  • ChaCha20-Poly1305 + X25519 암호화, PresharedKey로 포스트 퀀텀 저항

인사이트

WireGuard의 설정 편의성과 WebRTC의 NAT 통과 능력을 결합한 영리한 접근. CGNAT이나 방화벽 뒤에서 VPN이 막히는 상황에 실용적인 해결책

댓글

댓글

댓글을 불러오는 중...

devops

살면서 몰랐던 셸 트릭 모음 — 터미널에서 Backspace 꾹 누르기 이제 그만

대부분의 개발자가 ls, cd, grep 이후로 터미널 학습을 멈추는데, 셸에는 1989년부터 존재하던 생산성 트릭들이 가득함. POSIX 범용 단축키부터 Bash/Zsh 전용 기능까지, 하루 하나씩 익히면 터미널 생활이 완전히 달라짐.

devops

Wine 11, 드디어 커널 수준에서 Windows 동기화 재설계 — FPS 678% 상승 레전드

Wine 11이 출시됐는데 이거 그냥 버전업이 아님. **NTSYNC**라는 커널 레벨 동기화 드라이버가 탑재되면서 일부 게임 FPS가 최대 678% 폭등했고, **WoW64** 아키텍처도 완성돼서 32비트 앱 실행에 더 이상 삽질 안 해도 됨. Proton이랑 Steam Deck도 혜택 받는 구조라 Linux 게이밍 역사상 손꼽히는 업데이트임.

devops

NixOS 찬양글 - 이게 바로 OS가 나아가야 할 방향 아님?

NixOS 유저가 왜 NixOS에 진심인지 열변을 토하는 글임. 핵심은 NixOS 자체보다 **Nix 패키지 매니저**의 선언적·재현 가능한 철학에 있고, LLM 코딩 에이전트 시대에 특히 더 찰떡이라고 함. Docker보다 낫다는 주장도 ㄹㅇ 공감 포인트.

devops

Nix on Windows PoC: ValidationOS VM에 Nix 패키지 매니저 탑재

Windows ValidationOS VM 이미지에 크로스 컴파일된 Nix를 사전 설치하는 PoC. 빌드 중 VM 기동 없이 guestfish로 파일을 주입하며, shell32.dll 부재 문제는 환경변수를 읽는 스텁 DLL로 해결함.

devops

GitHub, 최근 연이은 장애에 대한 상세 포스트모템 공개

GitHub이 2~3월 대규모 장애 3건에 대한 포스트모템을 공개. 트래픽 폭증, 캐시 TTL 변경, Redis 설정 문제 등이 근본 원인이었고 격리 부족과 로드 셰딩 미비가 장애를 확산시킴. Azure 마이그레이션 가속화와 모놀리스 분해로 대응 중.