▲GN⁺ 4달전 | parent | ★ favorite | on: GotaTun – Mullvad의 Rust 기반 WireGuard 구현(mullvad.net)Hacker News 의견들 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 링크 펌웨어는 GC 없는 환경에서 동작해야 하므로 Rust가 더 적합함 Rust는 예측 가능한 타이밍과 강력한 타입 시스템 덕분에 신뢰성이 높음 하지만 네트워킹 소프트웨어에서는 Go도 충분히 좋고, 결국 “익숙한 언어를 쓰는 게 낫다”는 게 결론임 결국 “익숙한 악마를 택하라”는 말처럼, 아는 언어를 쓰는 게 현실적임 Go는 FFI가 어려워서 임베디드 라이브러리로 쓰기엔 Rust가 더 유리함 암호화가 필요 없는 로컬 컨테이너 네트워킹용으로는 어떤 게 좋을지 고민 중임 Apple의 새로운 container tool을 써보려 함 여러 VPN 터널을 하나로 묶는 기능이 있으면 좋겠음 예를 들어 airVPN은 5개의 동시 연결을 허용하니, 이를 병합해 트래픽을 결합할 수 있으면 좋겠음 GotaTun이 Tailscale Android 앱에도 적용되면 좋겠음. 나는 Mullvad 접속에 Tailscale을 씀 GotaTun은 Mullvad 전용 기능이라 Tailscale이 채택할 가능성은 낮음 Tailscale 팀은 Go 기반 라이브러리 최적화에 능숙하고, 2023년 4월에는 wireguard-go로 10Gbps 성능을 달성했음 관련 블로그 글 Go의 메모리 페이징 문제와 goroutine의 스택 오버플로 방지에 대한 이슈가 흥미로웠음 왜 GoString이 그렇게 많은 메모리를 페이지 인하는지 궁금함 이슈 #6727, 이슈 #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 링크 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개월 정도 다뤄봤는데 꽤 흥미로웠음
Hacker News 의견들
Pixel 8에서 성능 향상이 확실히 느껴졌음
예전에는 wireguard-go가 100Mbps도 못 뽑았는데, GotaTun 버전에서는 500Mbps 이상 나옴
다만 새 버그로 인해 딥슬립 모드에 들어가지 못해 배터리가 갑자기 10배 빨리 닳는 문제가 생김
Pixel 8이 훨씬 강력한데 이런 문제가 있다면 Android 쪽 버그일 가능성이 높음
나는 WireGuard를 정말 좋아해서 WrapGuard라는 프로젝트를 직접 만들었음
루트 권한 없이 앱을 실행할 수 있게 Go로 작성했음
Rust를 잘 모르는데, 펌웨어나 네트워킹 소프트웨어에는 Rust가 더 적합한지 궁금함
WrapGuard GitHub 링크
Rust는 예측 가능한 타이밍과 강력한 타입 시스템 덕분에 신뢰성이 높음
하지만 네트워킹 소프트웨어에서는 Go도 충분히 좋고, 결국 “익숙한 언어를 쓰는 게 낫다”는 게 결론임
Apple의 새로운 container tool을 써보려 함
예를 들어 airVPN은 5개의 동시 연결을 허용하니, 이를 병합해 트래픽을 결합할 수 있으면 좋겠음
GotaTun이 Tailscale Android 앱에도 적용되면 좋겠음. 나는 Mullvad 접속에 Tailscale을 씀
Tailscale 팀은 Go 기반 라이브러리 최적화에 능숙하고,
2023년 4월에는 wireguard-go로 10Gbps 성능을 달성했음
관련 블로그 글
Go의 메모리 페이징 문제와 goroutine의 스택 오버플로 방지에 대한 이슈가 흥미로웠음
왜 GoString이 그렇게 많은 메모리를 페이지 인하는지 궁금함
이슈 #6727, 이슈 #7728 참고
WireGuard 프로토콜 자체도 개선되면 좋겠음
현재는 정부나 ISP의 차단을 뚫기 어렵다는 한계가 있음
WireGuard는 단순한 L3 UDP 터널로 설계됨
프로토콜 자체에 내장되어 있으면 더 좋을 것 같음
구현팀이 있다면 묻고 싶음 — 왜 변경사항을 BoringTun에 업스트림하지 않았는지 궁금함
여러 구현이 존재할수록 프로토콜의 안정성과 신뢰성이 높아짐
개인적으로는 Cloudflare보다 Mullvad를 더 신뢰함
Obscura VPN에서는 NepTUN 포크로 전환했음
NepTUN GitHub 링크
Mullvad가 왜 새로 포크했는지, 기존 포크와 통합할 계획이 있는지 궁금함
Mullvad가 VPN 중 가장 신뢰할 만한 선택이라고 생각함
하지만 사람들은 유튜버의 할인 코드에 더 끌림
NordVPN은 그걸 잘 우회함. 예를 들어 Imgur나 영국 내 접속 시 Mullvad는 막힘
WireGuard가 Android에서 커널 내에서 동작하는 줄 알았음
wireguard-go의 크래시 원인 분석 데이터를 더 보고 싶음
라이브러리 자체 버그인지, FFI 문제인지 궁금함
나는 MintFlow 앱에서 Go 기반 프록시 코드를 쓰지 않음
대신 Rust로 일부 프록시 프로토콜을 구현함
WireGuard는 fdio vpp 플러그인 기반의 C 구현을 사용함
나도 예전에 vpp를 6개월 정도 다뤄봤는데 꽤 흥미로웠음