วันนี้ SingLinkLabs ทีมผู้พัฒนา SingLinkVPN ได้เผยแพร่ซอร์สโค้ดของ แอป SingLinkVPN ต้นแบบรุ่นแรก บน GitHub ภายใต้สัญญาอนุญาต Apache-2.0 นี่คือแอป VPN สไตล์สำหรับผู้ใช้ทั่วไป รองรับ Windows, macOS, Android และ iOS สร้างจากโค้ดเบสเดียวบนโปรโตคอล SingLink ที่เพิ่งเปิดเป็นโอเพนซอร์ส

แอปนี้เปิดตัวพร้อมกับตัวโปรโตคอล อ่านเพิ่มเติมได้ที่ โปรโตคอล SingLink เปิดเป็นโอเพนซอร์สแล้ว เมื่อดูทั้งสองโปรเจกต์ไปพร้อมกัน จะเห็นว่าโปรโตคอล VPN แบบเปิดกับไคลเอนต์ที่สมบูรณ์ทำงานประสานกันอย่างไร ตั้งแต่ปุ่มเชื่อมต่อไปจนถึงแพ็กเก็ตที่เข้ารหัส

คลังโค้ด: SingLinkLabs / singlink-vpn-app · สถานะ: ต้นแบบรุ่นแรก · สัญญาอนุญาต: Apache-2.0 · เทคโนโลยี: Flutter (Dart) สำหรับอินเทอร์เฟซ และ Go สำหรับแกนหลัก

นี่ไม่ใช่แอปที่คุณดาวน์โหลดจากเว็บไซต์ของเรา

แอป SingLinkVPN อย่างเป็นทางการที่คุณดาวน์โหลดจากเว็บไซต์ของเราและจาก App Store ต่าง ๆ เป็นผลิตภัณฑ์แยกต่างหาก แอปเหล่านั้นทำงานบนโปรโตคอลที่เราใช้งานจริง ซึ่งรวมถึง SingLink 2.0 และซอร์สโค้ดหลักของแอปเหล่านั้นไม่ได้อยู่ในการเปิดเผยครั้งนี้ ผู้ใช้เดิมจึงไม่มีอะไรเปลี่ยนแปลง

แอปต้นแบบนี้เป็นไคลเอนต์อ้างอิงสำหรับโปรโตคอล SingLink แบบเปิด เชื่อมต่อได้เฉพาะเซิร์ฟเวอร์ที่รองรับโปรโตคอลนั้น และไม่มีการลงชื่อเข้าใช้บัญชี คุณต้องเพิ่มเซิร์ฟเวอร์เองโดยวางลิงก์เซิร์ฟเวอร์หรือนำเข้าจากคลิปบอร์ด แอปนี้ไม่ได้เผยแพร่บน App Store ใด ๆ

แอปทำอะไรได้บ้าง

  • เชื่อมต่อและตัดการเชื่อมต่อด้วยการแตะครั้งเดียว ผ่านปุ่มวงกลมขนาดใหญ่ที่แสดงสามสถานะ: ยังไม่เชื่อมต่อ กำลังเชื่อมต่อ และเชื่อมต่อแล้ว

  • สถานะการป้องกัน ("Not protected" หรือ "Protected") และตัวจับเวลาการเชื่อมต่อ

  • IP ของคุณ: หลังเชื่อมต่อ แอปจะแสดงที่อยู่ IP ขาออกที่เว็บไซต์มองเห็น

  • เลือกตำแหน่ง: รายชื่อเซิร์ฟเวอร์แสดงพร้อมธงประเทศ โดยมี "Quick connect (auto)" อยู่ด้านบนสุด หากเปลี่ยนตำแหน่งระหว่างเชื่อมต่อ แอปจะเชื่อมต่อใหม่ให้อัตโนมัติ

  • ค่าความหน่วงตามจริง: แสดงเฉพาะค่าที่วัดได้จริง เซิร์ฟเวอร์ที่ยังไม่ได้วัดจะแสดง "—" แทนการแต่งตัวเลขขึ้นมา

  • ความเร็วแบบเรียลไทม์: ความเร็วดาวน์โหลดและอัปโหลด พร้อมปริมาณข้อมูลที่ใช้ในเซสชันปัจจุบัน

  • ข้อความแจ้งข้อผิดพลาดที่ชัดเจน บอกว่าควรทำอะไรต่อ และดูรายละเอียดทางเทคนิคได้ในแตะเดียว

  • โหมดสว่างและโหมดมืด ตามการตั้งค่าของระบบ

โหมดการเชื่อมต่อสองแบบ

บนโทรศัพท์ เป็น VPN ทั้งอุปกรณ์ Android ใช้ VpnService ของระบบ ส่วน iOS ใช้ Network Extension ทราฟฟิกของทุกแอปจะผ่านอุโมงค์ และการค้นหา DNS ก็เกิดขึ้นภายในอุโมงค์ด้วย

บนคอมพิวเตอร์ เป็นโหมดพร็อกซีระบบ เมื่อคุณเชื่อมต่อ แอปจะตั้งค่าพร็อกซีของระบบ และคืนค่าการตั้งค่าเดิมเมื่อคุณตัดการเชื่อมต่อหรือออกจากแอป หากแอปถูกบังคับปิดขณะเชื่อมต่ออยู่ แอปจะคืนค่าการตั้งค่าเดิมในครั้งถัดไปที่เปิด เบราว์เซอร์และแอปส่วนใหญ่ทำตามพร็อกซีของระบบ แต่โปรแกรมบางตัวที่ไม่สนใจการตั้งค่าพร็อกซีจะไม่ทำตาม VPN ระดับแพ็กเก็ตสำหรับเดสก์ท็อป (Network Extension บน macOS และ Wintun บน Windows) คือขั้นตอนถัดไปที่วางแผนไว้

สร้างขึ้นอย่างไร

  • โค้ดเบส Flutter เดียว สร้างแอปได้ครบทั้งสี่แพลตฟอร์ม โดยมีอินเทอร์เฟซเหมือนกันทุกแพลตฟอร์ม อินเทอร์เฟซเป็นภาษาอังกฤษ

  • แกนหลักที่เขียนด้วย Go บรรจุโปรโตคอล SingLink และถูกคอมไพล์เป็นไลบรารีเนทีฟสำหรับแต่ละแพลตฟอร์ม ซึ่งแอปเรียกใช้ได้โดยตรง

  • บนโทรศัพท์ แกนหลักจะเพิ่มสแต็กเครือข่ายแบบ user-space gVisor จาก Google (Apache-2.0) ซึ่งแปลงทราฟฟิกทั้งหมดของอุปกรณ์ให้เป็นการเชื่อมต่อ SingLink

  • เขียนขึ้นใหม่ทั้งหมด นอกจากเทมเพลตเปล่าที่ Flutter สร้างให้สำหรับโปรเจกต์ใหม่แล้ว โค้ดทั้งหมดเป็นของใหม่ ไม่มีโค้ด ไอคอน หรือรูปภาพใดที่นำมาจากแอป VPN อื่น

สถานะของแต่ละแพลตฟอร์ม

  • macOS 13 ขึ้นไป (Apple silicon): โหมดพร็อกซีระบบ สร้างแอปแล้วและทดสอบกับการเชื่อมต่อจริงแล้ว

  • Android 7 ขึ้นไป: VPN ทั้งอุปกรณ์ สร้าง APK แล้วและทดสอบกับการเชื่อมต่อจริงบน Android emulator แล้ว

  • iOS 15 ขึ้นไป: VPN ทั้งอุปกรณ์ สร้างและรันได้ใน iOS simulator แต่ simulator ไม่สามารถสร้างอุโมงค์ VPN ได้ และการรันบน iPhone จริงต้องมีบัญชี Apple Developer

  • Windows 10 และ 11 (x64): โหมดพร็อกซีระบบ สร้างไลบรารีแกนหลักแล้ว ส่วนตัวแอปต้องคอมไพล์บน Windows และในคลังโค้ดมีเวิร์กโฟลว์ GitHub Actions ที่ทำขั้นตอนนี้ให้

ข้อจำกัดตามจริง

  • นี่คือแอปต้นแบบ สร้างขึ้นสำหรับนักพัฒนา นักวิจัย และทุกคนที่อยากเห็นว่าแต่ละส่วนทำงานอย่างไร ไม่ได้มีไว้แทนแอปอย่างเป็นทางการ

  • การเผยแพร่ต้องมีขั้นตอนเพิ่มเติม การเผยแพร่สู่สาธารณะบน Mac ต้องผ่านการลงนามและการรับรอง (notarization) ของ Apple การรันบน iPhone จริงต้องมีบัญชี Apple Developer และบิลด์ Android ลงนามด้วยคีย์สำหรับทดสอบ

  • การรองรับ macOS ในตอนนี้หมายถึง macOS 13 ขึ้นไปบน Mac ที่ใช้ Apple silicon (M-series)

  • เดสก์ท็อปใช้โหมดพร็อกซีระบบ โปรแกรมที่ไม่สนใจการตั้งค่าพร็อกซีจึงยังไม่ได้รับการครอบคลุม

  • โปรโตคอลที่อยู่เบื้องหลังยังเป็นฉบับร่าง ผ่านการตรวจสอบความปลอดภัยภายในแล้ว แต่ยังไม่มีการตรวจสอบโดยบุคคลที่สาม และยังไม่ได้ทดสอบภาคสนามในจีนแผ่นดินใหญ่

  • ชื่อเซิร์ฟเวอร์แสดงตามที่เซิร์ฟเวอร์ส่งมา ตั้งชื่อเซิร์ฟเวอร์เป็นภาษาอังกฤษหากต้องการให้อินเทอร์เฟซเป็นภาษาอังกฤษทั้งหมด

สร้างแอปเองและร่วมพัฒนา

ไฟล์ README ในคลังโค้ดอธิบายวิธีสร้างแกนหลักและแอปสำหรับแต่ละแพลตฟอร์ม ส่วนแกนหลักของโปรโตคอลอยู่ในคลังโค้ดแยกต่างหาก คือ SingLinkLabs / singlink-protocol

เรายินดีรับคำถาม รายงานข้อบกพร่อง และ Pull Request บน GitHub โปรดรายงานช่องโหว่ด้านความปลอดภัยแบบส่วนตัวแทนการเปิด Issue สาธารณะ ขั้นตอนอธิบายไว้ใน SECURITY.md ในคลังโค้ดของโปรโตคอล

สัญญาอนุญาตและเครื่องหมายการค้า

โค้ดใช้สัญญาอนุญาต Apache-2.0: คุณสามารถใช้ แก้ไข และแจกจ่ายต่อได้ รวมถึงเพื่อการค้า ภายใต้เงื่อนไขของสัญญาอนุญาต ชื่อ "SingLink" และ "SingLinkVPN" ชื่อภาษาจีนของทั้งสอง และโลโก้ เป็นเครื่องหมายการค้าของ SingLinkLabs และสัญญาอนุญาตไม่ได้ให้สิทธิ์ใช้สิ่งเหล่านี้ fork ต้องใช้ชื่อและไอคอนของตนเอง แอปนี้มีสแต็กเครือข่าย gVisor อยู่ด้วย ซึ่งใช้สัญญาอนุญาต Apache-2.0 เช่นกัน

อ่านเพิ่มเติม