# GotaTun – Mullvad의 Rust 기반 WireGuard 구현

> Clean Markdown view of GeekNews topic #25200. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25200](https://news.hada.io/topic?id=25200)
- GeekNews Markdown: [https://news.hada.io/topic/25200.md](https://news.hada.io/topic/25200.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-12-20T09:39:57+09:00
- Updated: 2025-12-20T09:39:57+09:00
- Original source: [mullvad.net](https://mullvad.net/en/blog/announcing-gotatun-the-future-of-wireguard-at-mullvad-vpn)
- Points: 4
- Comments: 1

## Topic Body

- **GotaTun**은 Rust로 작성된 **WireGuard 구현체**로, 빠르고 효율적이며 안정적인 VPN 연결을 목표로 함  
- Cloudflare의 **BoringTun 프로젝트를 포크**해 개발되었으며, **DAITA**와 **Multihop** 같은 Mullvad의 프라이버시 기능을 통합  
- 기존 **wireguard-go**에서 발생하던 충돌 문제를 해결하기 위해 Android 버전에 먼저 적용, **충돌률 0.40% → 0.01%** 로 감소  
- Rust 기반으로 전환하면서 **FFI 복잡성**과 **Go 런타임 불안정성** 문제를 제거, 유지보수성과 디버깅 효율 향상  
- Mullvad는 2026년에 **모든 플랫폼으로 GotaTun 확대**와 **보안 감사 및 성능 개선**을 계획  

---
### GotaTun 개요
- **GotaTun**은 Mullvad VPN이 개발한 **Rust 기반 WireGuard® 구현체**로, 빠른 속도와 안정성, 효율성을 목표로 함  
  - Cloudflare의 **BoringTun**을 포크하여 개발  
  - 이름은 BoringTun과 스웨덴 예테보리의 터널 **Götatunneln**을 결합한 형태  
- **DAITA**와 **Multihop** 같은 Mullvad의 프라이버시 강화 기능을 통합  
- **Rust의 안전한 멀티스레딩**과 **zero-copy 메모리 전략**을 활용해 성능 최적화  
- 2024년 11월 말 Android 버전에 배포 완료, 다른 플랫폼은 2026년 출시 예정  

### 기존 wireguard-go의 한계
- Mullvad의 모바일 앱은 수년간 **Go 기반 wireguard-go**를 사용해 왔음  
  - 여러 VPN 제공업체가 동일한 구현체를 사용  
- 2024년 중반부터 Mullvad는 DAITA와 Multihop 지원을 위해 wireguard-go를 포크해 유지  
- 그러나 **Google Play 개발자 콘솔**에서 보고된 충돌의 **85% 이상이 wireguard-go에서 발생**  
  - 일부 문제는 해결되었으나 다수는 여전히 남아 있음  
- **Rust와 Go 간 FFI(외부 함수 인터페이스)** 사용으로 인한 복잡성과 불안정성 존재  
  - Go 런타임의 동작이 Rust 코드에서 불투명하며, 충돌 시 **스택 추적 복구가 어려움**  
  - 이로 인해 **디버깅과 장기 유지보수**가 어려운 상황  

### Android에서의 결과
- GotaTun 도입 후 **단 한 건의 충돌도 발생하지 않음**  
  - wireguard-go에서 발생하던 모든 충돌이 제거됨  
- Android 앱 버전 **2025.10**(11월 말 출시) 이후 **사용자 체감 충돌률이 0.40% → 0.01%로 감소**  
- 사용자 피드백에서도 **속도 향상과 배터리 사용량 감소**가 보고됨  

### 향후 계획
- 2026년 초 **제3자 보안 감사** 진행 예정  
- **모든 플랫폼(데스크톱, iOS 포함)** 에서 wireguard-go를 GotaTun으로 교체 예정  
- **성능 개선 작업**을 지속 추진  
- Mullvad는 2026년을 **GotaTun 확장의 주요 전환점**으로 설정

## Comments



### Comment 48038

- Author: neo
- Created: 2025-12-20T09:39:57+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46324543) 
- Pixel 8에서 **성능 향상**이 확실히 느껴졌음  
  예전에는 wireguard-go가 100Mbps도 못 뽑았는데, GotaTun 버전에서는 500Mbps 이상 나옴  
  다만 새 버그로 인해 **딥슬립 모드**에 들어가지 못해 배터리가 갑자기 10배 빨리 닳는 문제가 생김  
  - 내 구형 Samsung A5에서는 wireguard를 24/7 켜놔도 배터리가 오래감  
    Pixel 8이 훨씬 강력한데 이런 문제가 있다면 Android 쪽 버그일 가능성이 높음  
  - 나도 ZeroTier나 MizuDroid에서 비슷한 현상을 봤음. Android 네트워크 스택 쪽 문제로 보임  
  - Raspberry Pi 5에서도 같은 현상이 있었음. 아마 **ARM 최적화 부족** 때문일 수 있음  
  - MTU 1320 문제일 가능성 있음  
  - Mullvad 앱이 Pixel 6a에서 갑자기 1초 만에 연결되기 시작한 이유가 이거였음. 예전엔 5~10초 걸렸음  

- 나는 WireGuard를 정말 좋아해서 **WrapGuard**라는 프로젝트를 직접 만들었음  
  루트 권한 없이 앱을 실행할 수 있게 Go로 작성했음  
  Rust를 잘 모르는데, 펌웨어나 네트워킹 소프트웨어에는 Rust가 더 적합한지 궁금함  
  [WrapGuard GitHub 링크](https://github.com/puzed/wrapguard)  
  - 펌웨어는 **GC 없는 환경**에서 동작해야 하므로 Rust가 더 적합함  
    Rust는 **예측 가능한 타이밍**과 강력한 타입 시스템 덕분에 신뢰성이 높음  
    하지만 네트워킹 소프트웨어에서는 Go도 충분히 좋고, 결국 “**익숙한 언어를 쓰는 게 낫다**”는 게 결론임  
  - 결국 “**익숙한 악마를 택하라**”는 말처럼, 아는 언어를 쓰는 게 현실적임  
  - Go는 FFI가 어려워서 **임베디드 라이브러리**로 쓰기엔 Rust가 더 유리함  
  - 암호화가 필요 없는 **로컬 컨테이너 네트워킹**용으로는 어떤 게 좋을지 고민 중임  
    Apple의 새로운 [container tool](https://github.com/apple/container/issues/670)을 써보려 함  
  - 여러 VPN 터널을 하나로 묶는 기능이 있으면 좋겠음  
    예를 들어 airVPN은 5개의 동시 연결을 허용하니, 이를 **병합해 트래픽을 결합**할 수 있으면 좋겠음  

- GotaTun이 **Tailscale Android 앱**에도 적용되면 좋겠음. 나는 Mullvad 접속에 Tailscale을 씀  
  - GotaTun은 Mullvad 전용 기능이라 Tailscale이 채택할 가능성은 낮음  
    Tailscale 팀은 Go 기반 라이브러리 최적화에 능숙하고,  
    2023년 4월에는 wireguard-go로 **10Gbps 성능**을 달성했음  
    [관련 블로그 글](https://tailscale.com/blog/more-throughput)  

- Go의 **메모리 페이징** 문제와 goroutine의 **스택 오버플로 방지**에 대한 이슈가 흥미로웠음  
  왜 GoString이 그렇게 많은 메모리를 페이지 인하는지 궁금함  
  [이슈 #6727](https://github.com/mullvad/mullvadvpn-app/pull/6727), [이슈 #7728](https://github.com/mullvad/mullvadvpn-app/pull/7728) 참고  

- WireGuard 프로토콜 자체도 개선되면 좋겠음  
  현재는 **정부나 ISP의 차단**을 뚫기 어렵다는 한계가 있음  
  - 이건 WireGuard의 역할이 아니라 **shadowsocks 같은 캡슐화 프로토콜**이 담당해야 함  
    WireGuard는 단순한 L3 UDP 터널로 설계됨  
  - 이런 이유로 **amnezia-wg** 같은 포크들이 존재함  
  - Mullvad 앱에는 shadowsocks 등 **우회 옵션**이 있지만,  
    프로토콜 자체에 내장되어 있으면 더 좋을 것 같음  
  - 관련 내용을 더 읽고 싶다면 공식 문서의 **Known Limitations** 섹션을 참고하면 됨  

- 구현팀이 있다면 묻고 싶음 — 왜 변경사항을 **BoringTun에 업스트림**하지 않았는지 궁금함  
  - BoringTun은 3년째 구조 개편 중이라, Mullvad가 독립적으로 진행한 게 이해됨  
    여러 구현이 존재할수록 **프로토콜의 안정성과 신뢰성**이 높아짐  
    개인적으로는 Cloudflare보다 Mullvad를 더 신뢰함  
  - BoringTun은 사실상 **유지보수 중단** 상태임  
    Obscura VPN에서는 **NepTUN** 포크로 전환했음  
    [NepTUN GitHub 링크](https://github.com/NordSecurity/NepTUN)  
    Mullvad가 왜 새로 포크했는지, 기존 포크와 통합할 계획이 있는지 궁금함  

- Mullvad가 VPN 중 **가장 신뢰할 만한 선택**이라고 생각함  
  하지만 사람들은 유튜버의 **할인 코드**에 더 끌림  
  - Mullvad는 프라이버시 면에서는 최고지만, 대부분의 **VPN 차단 리스트**에 걸림  
    NordVPN은 그걸 잘 우회함. 예를 들어 Imgur나 영국 내 접속 시 Mullvad는 막힘  
  - 일반 사용자들은 **지리적 차단 해제**가 목적이라 Mullvad는 매력적이지 않음  
  - **포트 포워딩**이 중단된 이후로 선택지에서 빠진 사람도 많음  
  - Mullvad의 IP가 스트리밍 서비스에서 자주 차단돼서 Nord를 쓸 수밖에 없음  
  - 게다가 여러 VPN 브랜드를 **한 회사가 인수해 재브랜딩**하는 경우도 많음  

- WireGuard가 Android에서 **커널 내에서 동작**하는 줄 알았음  
  - 실제로는 모듈로 활성화해야 하는데, Android 커널에서는 비활성화되어 있음  

- wireguard-go의 **크래시 원인 분석 데이터**를 더 보고 싶음  
  라이브러리 자체 버그인지, FFI 문제인지 궁금함  
  - WireGuard가 단순한 UDP 기반이라 크래시가 있다는 게 의외였음  

- 나는 MintFlow 앱에서 Go 기반 프록시 코드를 쓰지 않음  
  대신 Rust로 일부 **프록시 프로토콜**을 구현함  
  WireGuard는 **fdio vpp 플러그인** 기반의 C 구현을 사용함  
  - iOS에서 vpp 기반 구현이 가능하다는 게 놀라움  
    나도 예전에 vpp를 6개월 정도 다뤄봤는데 꽤 흥미로웠음
