4 คะแนน โดย GN⁺ 2025-12-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • GotaTun คือ อิมพลีเมนเทชัน WireGuard ที่เขียนด้วย Rust โดยมีเป้าหมายเพื่อการเชื่อมต่อ VPN ที่รวดเร็ว มีประสิทธิภาพ และเสถียร
  • พัฒนาขึ้นจากการ fork โปรเจกต์ BoringTun ของ Cloudflare และผสานฟีเจอร์ความเป็นส่วนตัวของ Mullvad เช่น DAITA และ Multihop
  • เพื่อนำมาจัดการปัญหาการแครชที่เกิดใน wireguard-go เดิม จึงเริ่มนำมาใช้กับเวอร์ชัน Android ก่อน ทำให้อัตราการแครช ลดจาก 0.40% → 0.01%
  • การย้ายมาใช้ Rust ช่วยขจัดปัญหา ความซับซ้อนของ FFI และ ความไม่เสถียรของ Go runtime พร้อมปรับปรุงการบำรุงรักษาและประสิทธิภาพในการดีบัก
  • Mullvad มีแผนในปี 2026 ที่จะ ขยาย GotaTun ไปยังทุกแพลตฟอร์ม พร้อมทั้ง ตรวจสอบความปลอดภัยและปรับปรุงประสิทธิภาพ

ภาพรวมของ GotaTun

  • GotaTun คือ อิมพลีเมนเทชัน WireGuard® บน Rust ที่พัฒนาโดย Mullvad VPN โดยมุ่งเน้นความเร็ว ความเสถียร และประสิทธิภาพ
    • พัฒนามาจากการ fork BoringTun ของ Cloudflare
    • ชื่อนี้เป็นการผสมระหว่าง BoringTun กับอุโมงค์ Götatunneln ในเมืองเยินเชอปิงของสวีเดน
  • ผสานฟีเจอร์เสริมความเป็นส่วนตัวของ Mullvad เช่น DAITA และ Multihop
  • ปรับแต่งประสิทธิภาพด้วย safe multithreading ของ Rust และ กลยุทธ์หน่วยความจำแบบ zero-copy
  • ปล่อยใช้งานบน Android แล้วเมื่อปลายเดือนพฤศจิกายน 2024 และแพลตฟอร์มอื่นมีกำหนดเปิดตัวในปี 2026

ข้อจำกัดของ wireguard-go เดิม

  • แอปมือถือของ Mullvad ใช้ wireguard-go ที่พัฒนาด้วย Go มาหลายปี
    • ผู้ให้บริการ VPN หลายรายก็ใช้อิมพลีเมนเทชันเดียวกันนี้
  • ตั้งแต่กลางปี 2024 Mullvad ได้ fork และดูแล wireguard-go เองเพื่อรองรับ DAITA และ Multihop
  • อย่างไรก็ตาม การแครชที่ถูกรายงานใน Google Play Developer Console มากกว่า 85% เกิดจาก wireguard-go
    • บางปัญหาได้รับการแก้ไขแล้ว แต่ยังมีอีกหลายส่วนที่คงอยู่
  • มีความซับซ้อนและความไม่เสถียรจากการใช้ FFI (foreign function interface) ระหว่าง Rust กับ Go
    • การทำงานของ Go runtime ไม่โปร่งใสเมื่อดูจากฝั่งโค้ด Rust และเมื่อแครชก็ กู้ stack trace ได้ยาก
    • ทำให้ การดีบักและการบำรุงรักษาระยะยาว เป็นเรื่องยาก

ผลลัพธ์บน Android

  • หลังนำ GotaTun มาใช้ ไม่พบการแครชแม้แต่ครั้งเดียว
    • การแครชทั้งหมดที่เคยเกิดจาก wireguard-go ถูกกำจัดออกไป
  • หลังแอป Android เวอร์ชัน 2025.10 (ออกปลายเดือนพฤศจิกายน) อัตราการแครชที่ผู้ใช้รับรู้ได้ ลดจาก 0.40% → 0.01%
  • ในฟีดแบ็กของผู้ใช้ก็มีรายงานว่า ความเร็วดีขึ้นและใช้แบตเตอรี่น้อยลง

แผนในอนาคต

  • มีแผนทำ การตรวจสอบความปลอดภัยโดยบุคคลที่สาม ในช่วงต้นปี 2026
  • มีแผนแทนที่ wireguard-go ด้วย GotaTun บน ทุกแพลตฟอร์ม (รวมเดสก์ท็อปและ iOS)
  • จะเดินหน้าทำ การปรับปรุงประสิทธิภาพ อย่างต่อเนื่อง
  • Mullvad กำหนดให้ปี 2026 เป็น จุดเปลี่ยนสำคัญของการขยาย GotaTun

1 ความคิดเห็น

 
GN⁺ 2025-12-20
ความคิดเห็นจาก Hacker News
  • บน Pixel 8 รู้สึกได้ชัดเจนเลยว่า ประสิทธิภาพดีขึ้น
    ก่อนหน้านี้ wireguard-go ดันความเร็วได้ไม่ถึง 100Mbps แต่เวอร์ชัน GotaTun ทำได้เกิน 500Mbps
    แต่มีบั๊กใหม่ทำให้เข้า โหมด deep sleep ไม่ได้ เลยมีปัญหาแบตหมดเร็วขึ้นแบบกะทันหันถึง 10 เท่า

    • บน Samsung A5 เครื่องเก่าของฉัน ถึงจะเปิด wireguard ไว้ 24/7 แบตก็ยังอยู่ได้นาน
      Pixel 8 แรงกว่ามาก ถ้ามีปัญหาแบบนี้ก็น่าจะเป็นบั๊กฝั่ง Android มากกว่า
    • ฉันก็เคยเห็นอาการคล้ายกันใน ZeroTier กับ MizuDroid ดูเหมือนจะเป็นปัญหาที่ network stack ของ Android
    • บน Raspberry Pi 5 ก็มีอาการเดียวกัน อาจเป็นเพราะ การปรับแต่งสำหรับ ARM ยังไม่ดีพอ
    • อาจเป็นปัญหา MTU 1320
    • นี่เองถึงเป็นเหตุผลที่แอป Mullvad บน Pixel 6a จู่ ๆ ก็เชื่อมต่อได้ภายใน 1 วินาที เมื่อก่อนใช้เวลา 5~10 วินาที
  • ฉันชอบ WireGuard มากจนทำโปรเจ็กต์ชื่อ WrapGuard ขึ้นมาเอง
    เขียนด้วย Go เพื่อให้รันแอปได้โดยไม่ต้องมีสิทธิ์ root
    ฉันไม่ค่อยรู้ Rust เลยสงสัยว่า Rust เหมาะกับเฟิร์มแวร์หรืองานซอฟต์แวร์เครือข่ายมากกว่ากันไหม
    ลิงก์ GitHub ของ WrapGuard

    • เฟิร์มแวร์ต้องทำงานใน สภาพแวดล้อมที่ไม่มี GC ดังนั้น Rust จึงเหมาะกว่า
      Rust มี timing ที่คาดเดาได้ และระบบ type ที่แข็งแรง เลยเชื่อถือได้สูง
      แต่สำหรับซอฟต์แวร์เครือข่าย Go ก็ถือว่าดีพอ และสุดท้ายข้อสรุปคือ “ใช้ภาษาที่คุ้นเคยดีกว่า
    • สุดท้ายก็เหมือนคำพูดที่ว่า “เลือกปีศาจที่คุณคุ้นเคย” การใช้ภาษาที่เรารู้จักจึงสมเหตุสมผลกว่า
    • Go ทำ FFI ได้ยาก เลยทำให้ Rust ได้เปรียบกว่าสำหรับการใช้เป็น ไลบรารีแบบ embedded
    • กำลังคิดอยู่ว่าอะไรจะเหมาะกว่าสำหรับ local container networking ที่ไม่ต้องใช้การเข้ารหัส
      ตั้งใจจะลองใช้ container tool ใหม่ของ Apple
    • ถ้ามีฟีเจอร์รวม VPN tunnel หลายเส้นให้เป็นเส้นเดียวได้ก็คงดี
      เช่น airVPN อนุญาตให้เชื่อมต่อพร้อมกันได้ 5 จุด ถ้าสามารถ รวมมันเข้าด้วยกันเพื่อรวมทราฟฟิก ได้ก็น่าสนใจ
  • อยากให้ GotaTun ถูกนำไปใช้กับ แอป Tailscale บน Android ด้วย ฉันใช้ Tailscale เพื่อเชื่อมต่อกับ Mullvad

    • GotaTun เป็นฟีเจอร์เฉพาะของ Mullvad เลยมีโอกาสน้อยที่ Tailscale จะนำไปใช้
      ทีม Tailscale เชี่ยวชาญในการปรับแต่งไลบรารีฝั่ง Go อยู่แล้ว
      และในเดือนเมษายน 2023 ก็ทำ ประสิทธิภาพ 10Gbps ได้ด้วย wireguard-go
      บล็อกโพสต์ที่เกี่ยวข้อง
  • ประเด็นเรื่อง memory paging ของ Go และการป้องกัน stack overflow ของ goroutine น่าสนใจมาก
    สงสัยว่าทำไม GoString ถึง page in หน่วยความจำเยอะขนาดนั้น
    ดู อีสชู #6727, อีสชู #7728

  • อยากให้โปรโตคอล WireGuard เองได้รับการปรับปรุงด้วย
    ตอนนี้มันยังมีข้อจำกัดคือทะลุ การบล็อกจากรัฐบาลหรือ ISP ได้ยาก

    • นี่ไม่ใช่หน้าที่ของ WireGuard แต่ควรเป็นงานของ โปรโตคอล encapsulation อย่าง shadowsocks
      WireGuard ถูกออกแบบมาให้เป็น L3 UDP tunnel แบบเรียบง่าย
    • ด้วยเหตุนี้จึงมีฟอร์กอย่าง amnezia-wg อยู่
    • ในแอป Mullvad มี ตัวเลือกสำหรับการหลบเลี่ยง อย่าง shadowsocks อยู่แล้ว
      แต่ถ้ามีอยู่ในตัวโปรโตคอลเลยก็น่าจะดีกว่า
    • ถ้าอยากอ่านเพิ่มเติม ให้ดูส่วน Known Limitations ในเอกสารทางการ
  • ถ้ามีทีมพัฒนาอยู่ตรงนี้ ฉันอยากถามว่า — ทำไมถึงไม่ upstream การเปลี่ยนแปลงกลับไปที่ BoringTun

    • BoringTun อยู่ระหว่างการปรับโครงสร้างมานาน 3 ปีแล้ว เลยเข้าใจได้ที่ Mullvad จะเดินต่อแบบอิสระ
      ยิ่งมีหลาย implementation ก็ยิ่งช่วยเพิ่ม ความเสถียรและความน่าเชื่อถือของโปรโตคอล
      ส่วนตัวฉันไว้ใจ Mullvad มากกว่า Cloudflare
    • BoringTun แทบจะอยู่ในสภาพ หยุดบำรุงรักษา แล้ว
      ใน Obscura VPN ได้ย้ายไปใช้ฟอร์ก NepTUN
      ลิงก์ GitHub ของ NepTUN
      ฉันสงสัยว่าทำไม Mullvad ถึงสร้างฟอร์กใหม่ขึ้นมาเอง และมีแผนจะรวมกับฟอร์กเดิมหรือไม่
  • ฉันคิดว่า Mullvad เป็นตัวเลือกที่ น่าเชื่อถือที่สุด ในบรรดา VPN
    แต่คนส่วนใหญ่มักสนใจ โค้ดส่วนลด จากยูทูบเบอร์มากกว่า

    • Mullvad ยอดเยี่ยมมากในแง่ความเป็นส่วนตัว แต่ก็มักติด รายชื่อบล็อกของ VPN ส่วนใหญ่
      NordVPN หลบเรื่องนั้นได้ดีกว่า เช่น ตอนเข้า Imgur หรือเข้าจากในสหราชอาณาจักร Mullvad จะโดนบล็อก
    • ผู้ใช้ทั่วไปต้องการ ปลดล็อกข้อจำกัดตามภูมิภาค เป็นหลัก เลยทำให้ Mullvad ไม่ค่อยน่าสนใจ
    • หลังจากยกเลิก port forwarding ก็มีหลายคนตัดตัวเลือกนี้ทิ้งไป
    • IP ของ Mullvad มักถูกบริการสตรีมมิงบล็อกบ่อย เลยไม่มีทางเลือกนอกจากใช้ Nord
    • แถมยังมีหลายกรณีที่หลายแบรนด์ VPN ถูก บริษัทเดียวเข้าซื้อแล้วรีแบรนด์ ด้วย
  • ฉันเคยนึกว่า WireGuard บน Android ทำงานอยู่ในเคอร์เนล

    • จริง ๆ แล้วต้องเปิดใช้งานเป็นโมดูล แต่ในเคอร์เนลของ Android มันถูกปิดไว้
  • อยากเห็นข้อมูลวิเคราะห์สาเหตุ การแครชของ wireguard-go มากกว่านี้
    สงสัยว่าเป็นบั๊กในไลบรารีเองหรือเป็นปัญหา FFI

    • WireGuard เป็นแค่ระบบที่อิง UDP แบบเรียบง่าย เลยแปลกใจที่ยังมีการแครชได้
  • ฉันไม่ได้ใช้โค้ดพร็อกซีที่เขียนด้วย Go ในแอป MintFlow
    แต่เลือกใช้ Rust ในการทำ โปรโตคอลพร็อกซี บางส่วน
    ส่วน WireGuard ใช้ implementation ภาษา C ที่อิงกับปลั๊กอิน fdio vpp

    • น่าทึ่งที่บน iOS ยังใช้ implementation ที่อิง vpp ได้
      ฉันเองก็เคยเล่นกับ vpp อยู่ประมาณ 6 เดือน และคิดว่ามันน่าสนใจทีเดียว