- GotaTun là một bản triển khai WireGuard được viết bằng Rust, hướng tới kết nối VPN nhanh, hiệu quả và ổn định
- Được phát triển bằng cách fork dự án BoringTun của Cloudflare, đồng thời tích hợp các tính năng quyền riêng tư của Mullvad như DAITA và Multihop
- Được áp dụng trước tiên cho phiên bản Android để giải quyết các vấn đề crash từng xảy ra ở wireguard-go, giúp tỷ lệ crash giảm từ 0,40% xuống 0,01%
- Việc chuyển sang nền tảng Rust loại bỏ các vấn đề về độ phức tạp FFI và sự bất ổn của runtime Go, đồng thời cải thiện khả năng bảo trì và hiệu quả gỡ lỗi
- Mullvad có kế hoạch mở rộng GotaTun sang mọi nền tảng vào năm 2026 cùng với kiểm toán bảo mật và cải thiện hiệu năng
Tổng quan về GotaTun
- GotaTun là bản triển khai WireGuard® dựa trên Rust do Mullvad VPN phát triển, hướng tới tốc độ cao, độ ổn định và hiệu quả
- Được phát triển bằng cách fork BoringTun của Cloudflare
- Tên gọi là sự kết hợp giữa BoringTun và đường hầm Götatunneln ở Göteborg, Thụy Điển
- Tích hợp các tính năng tăng cường quyền riêng tư của Mullvad như DAITA và Multihop
- Tối ưu hiệu năng bằng cách tận dụng đa luồng an toàn của Rust và chiến lược bộ nhớ zero-copy
- Đã được phát hành cho phiên bản Android vào cuối tháng 11 năm 2024, các nền tảng khác dự kiến ra mắt trong năm 2026
Giới hạn của wireguard-go trước đây
- Ứng dụng di động của Mullvad đã sử dụng wireguard-go dựa trên Go trong nhiều năm
- Nhiều nhà cung cấp VPN cũng dùng cùng bản triển khai này
- Từ giữa năm 2024, Mullvad đã fork và tự duy trì wireguard-go để hỗ trợ DAITA và Multihop
- Tuy nhiên, hơn 85% số crash được báo cáo trong Google Play Developer Console đều phát sinh từ wireguard-go
- Một số vấn đề đã được khắc phục, nhưng nhiều lỗi vẫn còn tồn tại
- Có sự phức tạp và bất ổn do sử dụng FFI (giao diện hàm ngoài) giữa Rust và Go
- Cách hoạt động của runtime Go không minh bạch từ phía mã Rust, và khi crash xảy ra thì rất khó khôi phục stack trace
- Điều này khiến việc gỡ lỗi và bảo trì dài hạn trở nên khó khăn
Kết quả trên Android
- Sau khi áp dụng GotaTun, không còn xảy ra bất kỳ crash nào
- Mọi crash từng phát sinh từ wireguard-go đều đã được loại bỏ
- Sau phiên bản ứng dụng Android 2025.10 (phát hành cuối tháng 11), tỷ lệ crash mà người dùng cảm nhận được đã giảm từ 0,40% xuống 0,01%
- Phản hồi từ người dùng cũng cho thấy tốc độ được cải thiện và mức tiêu thụ pin giảm
Kế hoạch sắp tới
- Dự kiến tiến hành kiểm toán bảo mật bởi bên thứ ba vào đầu năm 2026
- Dự kiến thay thế wireguard-go bằng GotaTun trên mọi nền tảng (bao gồm desktop và iOS)
- Tiếp tục thúc đẩy các công việc cải thiện hiệu năng
- Mullvad xác định năm 2026 là bước ngoặt lớn cho việc mở rộng GotaTun
1 bình luận
Ý kiến trên Hacker News
Trên Pixel 8, có thể cảm nhận rõ hiệu năng được cải thiện
Trước đây wireguard-go còn không đạt nổi 100Mbps, nhưng với phiên bản GotaTun thì vượt 500Mbps
Tuy nhiên, do lỗi mới nên máy không thể vào chế độ deep sleep, khiến pin đột nhiên tụt nhanh gấp 10 lần
Pixel 8 mạnh hơn nhiều, nên nếu gặp vấn đề này thì có khả năng cao là lỗi phía Android
Tôi thật sự rất thích WireGuard nên đã tự làm một dự án tên là WrapGuard
Tôi viết nó bằng Go để có thể chạy ứng dụng mà không cần quyền root
Tôi không rành Rust, nên khá tò mò liệu Rust có phù hợp hơn cho firmware hay phần mềm mạng hay không
Liên kết GitHub của WrapGuard
Nhờ thời gian thực thi có thể dự đoán được và hệ thống kiểu mạnh, Rust có độ tin cậy cao hơn
Nhưng với phần mềm mạng thì Go cũng đủ tốt, và cuối cùng kết luận vẫn là “dùng ngôn ngữ mình quen thuộc sẽ tốt hơn”
Tôi định thử container tool mới của Apple
Ví dụ, airVPN cho phép 5 kết nối đồng thời, nên sẽ tuyệt nếu có thể gộp chúng lại để kết hợp lưu lượng
Tôi mong GotaTun cũng được áp dụng cho ứng dụng Tailscale trên Android. Tôi dùng Tailscale để kết nối với Mullvad
Đội ngũ Tailscale rất giỏi tối ưu thư viện nền Go,
và vào tháng 4/2023 họ đã đạt hiệu năng 10Gbps với wireguard-go
Bài viết blog liên quan
Vấn đề phân trang bộ nhớ của Go và chuyện goroutine ngăn tràn stack khá thú vị
Tôi tò mò vì sao GoString lại phân trang nhiều bộ nhớ đến vậy
Tham khảo vấn đề #6727, vấn đề #7728
Tôi cũng muốn chính giao thức WireGuard được cải thiện
Hiện tại nó có hạn chế là khó vượt qua sự chặn của chính phủ hay ISP
WireGuard được thiết kế như một đường hầm UDP L3 đơn giản
nhưng sẽ tốt hơn nếu thứ đó được tích hợp ngay trong giao thức
Nếu có ai trong đội triển khai ở đây thì tôi muốn hỏi — vì sao các thay đổi này không được upstream lên BoringTun?
Càng có nhiều cách triển khai thì độ ổn định và độ tin cậy của giao thức càng cao
Cá nhân tôi tin Mullvad hơn Cloudflare
Obscura VPN đã chuyển sang fork NepTUN
Liên kết GitHub của NepTUN
Tôi tò mò vì sao Mullvad lại tạo fork mới, và liệu có kế hoạch hợp nhất với các fork hiện có hay không
Tôi nghĩ Mullvad là lựa chọn đáng tin cậy nhất trong các VPN
Nhưng mọi người lại bị hấp dẫn hơn bởi mã giảm giá của các YouTuber
NordVPN vượt qua chuyện đó khá tốt. Ví dụ như với Imgur hoặc truy cập từ Anh, Mullvad sẽ bị chặn
Tôi cứ nghĩ WireGuard trên Android là chạy trong kernel
Tôi muốn xem thêm dữ liệu phân tích nguyên nhân crash của wireguard-go
Tôi tò mò không biết là lỗi của chính thư viện hay do vấn đề FFI
Trong ứng dụng MintFlow, tôi không dùng mã proxy viết bằng Go
Thay vào đó tôi triển khai một số giao thức proxy bằng Rust
Với WireGuard, tôi dùng bản triển khai C dựa trên plugin fdio vpp
Trước đây tôi cũng từng làm với vpp khoảng 6 tháng, và thấy nó khá thú vị