Erebus: 루트 권한이 필요 없는 사용자 공간 VPN 프록시

Erebus는 제한된 환경에서 루트 권한 없는 VPN 연결을 가능하게 합니다

Erebus는 루트 권한을 요구하거나 호스트의 네트워킹 스택을 수정하지 않고도 사용자가 VPN 연결을 설정할 수 있도록 하는 사용자 공간 VPN 프록시입니다. OpenVPN 프로토콜과 TCP/IP 스택을 단일 프로세스 내에서 완전히 구현함으로써, Erebus는 커널 tun/tap 인터페이스와 라우팅 테이블 수정의 필요성을 우회합니다. 이는 CI runner, sandbox, 권한이 없는 컨테이너와 같이 sudo 액세스가 불가능한 환경에 이상적입니다.

아키텍처: VPN 스택을 사용자 공간으로 이동

Erebus는 전통적인 커널 기반 라우팅 및 TCP 처리를 자체 내부 로직으로 대체합니다. 이 도구에 필요한 유일한 시스템 권한은 표준 네트워크 소켓을 열 수 있는 능력입니다.

데이터 흐름

요청이 발생하면 데이터는 다음 경로를 따릅니다:

  1. Local HTTP Client: 클라이언트 애플리케이션이 로컬 Erebus 프록시를 가리킵니다.
  2. HTTP Proxy: Erebus가 요청을 수락하고 전달합니다.
  3. User-Space TCP/IP Stack: 프로세스가 IPv4, TCP, ICMP 패킷을 직접 구축하고 파싱합니다.
  4. Encryption: 패킷은 OpenVPN static-key (wire format v1) 프로토콜을 사용하여 HMAC 및 패킷 ID를 적용하여 암호화됩니다.
  5. Transport: 암호화된 데이터는 UDP datagram 또는 TCP frame으로 OpenVPN 서버로 전송됩니다.

주요 기능 및 역량

루트 권한 없는 운영

Erebus는 sudo 권한, 설정 스크립트가 필요하지 않으며 호스트의 인터페이스, 경로 또는 DNS 설정을 건드리지 않습니다. 표준 사용자 프로세스로 시작하고 중단할 수 있습니다.

선택적 트래픽 라우팅

연결성은 시스템 전체가 아닌 명시적입니다. 사용자는 특정 애플리케이션이 VPN을 통해 트래픽을 라우팅하도록 로컬 프록시를 가리키도록 해야 합니다.

  • Outbound: 로컬 HTTP/1.x 프록시가 VPN의 리소스에 대한 요청을 전달합니다.
  • Inbound: 포트 포워딩을 통해 로컬 서비스를 VPN 피어에게 양방향으로 노출합니다.

프로토콜 지원

  • OpenVPN: UDP 또는 TCP를 통해 static-key 모드 (pre-shared key)를 지원합니다. CBC ciphers (AES, ARIA, Camellia) 및 다양한 HMAC digest를 지원합니다.
  • IPsec: IKEv2 제어 평면과 strongSwan과 상호 운용되는 ESP 데이터 평면을 포함합니다. 루트 권한 없는 프로세스는 raw ESP를 보낼 수 없으므로, 모든 트래픽은 pre-shared key를 사용하여 UDP-encapsulated (NAT-T) 방식으로 처리됩니다.

사용법 및 설치

Erebus는 Common Lisp (SBCL)로 작성되었으며 Debian/Ubuntu 계열을 위한 Debian 패키지로 배配布됩니다.

빠른 시작 설정

아웃바운드 UDP 프록시를 위한 최소 설정은 INI 파일에 정의됩니다:

[erebus]
client-ip = 10.8.0.2

[openvpn-server]
proto  = udp
 host   = vpn.example.com
port   = 1194
secret = /etc/erebus/static.key
cipher = AES-256-CBC
auth   = SHA256

[proxy-out]
address = 127.0.0.1
port    = 11023

프록시를 사용하려면 사용자는 명령줄을 통해 트래픽을 라우팅할 수 있습니다: http_proxy=http://127.0.0.1:11023 curl http://10.8.0.1/

성능 및 제한 사항

Erebus는 성능보다 정확성과 명확성을 우선시하는 초기 단계의 실험적 프로젝트입니다.

사용 사례 적합성

Ideal For Not Ideal For
권한이 없는 컨테이너 내의 내부 HTTP 서비스 시스템 전체 VPN 라우팅
프라이빗 엔드포인트를 필요로 하는 CI jobs 대용량 데이터 전송
샌드박스 또는 멀티테넌트 호스트 TLS-mode OpenVPN (certificates)
단일 로컬 포트를 VPN 피어에게 노출 HTTPS CONNECT 터널링 또는 SOCKS

성능 트레이드오프

구현 방식이 데이터를 한 번에 하나씩 보내고 다음을 보내기 전에 확인을 기다리기 때문에, 대용량 다운로드는 표준 프록시보다 현저히 느립니다. 이 설계 선택은 코드의 단순성과 상호 운용성을 보장합니다.

Sources