프로젝트 소개

vpnonly는 macOS용 경량 분할 터널링 도구로, 사용자가 지정한 애플리케이션만 WireGuard VPN을 통해 라우팅한다. 모든 트래픽을 터널링하는 표준 VPN 클라이언트와 달리, vpnonly는 브라우저, 뱅킹 앱, 스트리밍 서비스를 일반 인터넷 연결에 유지하고 선택한 앱만 VPN 종료점을 통해 보낸다. 이 도구는 애플리케이션이 아니라 Unix 그룹 멤버십으로 패킷을 매칭할 수 있는 macOS 내장 PF 방화벽을 활용해 작동한다. vpnonly를 통해 을 실행하면 해당 앱에 할당된 특수 그으로 애플리케이션을 실행한 다음, PF 규칙이 그 그룹의 트래을 WireGuard 인터페이스로 라우팅하고 나머지는 정상적으로 계속된다. 이 프로젝트는 약 350줄의 셸 스크립트와 작은 C 런처 파일로 구성된다. 커널 확장이나 Network Extension 엔타이틀트가 필요 없고, /etc/pf.conf나 기본 라우트를 절대 수정하지 않는다. 규칙은 전용 앵커에 존재하며, VPN을 내리면 해당 규칙만 지워진다. WireGuard 지원을 위해 Homebrew의 기본 wireguard-go를 함께 포함한다. CLI 버전은 NordVPN과 기본적으로 작동하지만, cryptokey routing을 사용하는 제공자(Mullvad, Proton, 자체 호스팅 서버)는 내부 소스 주소를 다시 쓰는 패치된 wireguard-go가 필요하다. 이 패치는 컴파일된 Mac 에는 포함되어 있지만 아직 CLI 포뮬러에는 없다. 려진 제한 사항으로는 Safari 및 기타 WebKit 앱(연결이 그룹을 절대 전달하지 않는 별도 시스템 프로세스를 통해 라우팅), DNS 쿼리(터널링되지 않아 조회가 여전히 정상적으로 나감), IPv6(그룹화된 에 대해 터널링되지 않고 차단됨)가 있다. 서버가 끊겨도 자동 재연결이 없다. 설치는 Homebrew를 통해 한다: brew tap kanishkdan/vpnonly && brew install vpnonly. 유료 Mac 앱 버전(2대의 Mac에 19달러)도 vpnonly.app에서 이용할 수 있으며, 재실행 없이 앱별 토글, 자동 업데이트, 국가 선택기 같은 추가 기능이 있다. app-engine/ 아래의 소스 코드는 체크섬과 함께 공개되어 사용자가 신뢰하기 전에 root로 실행되는 내용을 정확히 감사할 수 있다. 모든 권한 스크립트는 5분이면 읽을 수 있을 만큼 짧다.