0
Qanah — WireGuard 설정 그대로 쓰면서 WebRTC로 NAT 뚫는 P2P VPN
devops
요약
기사 전체 정리
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 플래그로 릴레이를 끄면 직접 피어 라우트만 사용하고 직접 연결 없는 패킷은 드롭됨. 보안이 중요한 환경에서 유용함
댓글
댓글
댓글을 불러오는 중...