การปรับปรุง WireGuard ของ Fly.io
- Fly.io แปลงคอนเทนเนอร์เป็น VM แล้วรันบนฮาร์ดแวร์ทั่วโลกโดยใช้พลังของ Firecracker
- ใช้งาน WireGuard อย่างมาก และตอนนี้มันกลายเป็นส่วนหนึ่งของ API สำหรับลูกค้าแล้ว
- ทุกครั้งที่รัน CLI
flyctl ระบบจะสร้างสแตก TCP/IP และสื่อสารกับ Fly Machines โดยตรงด้วยที่อยู่ IPv6 เฉพาะ
- แนวทางนี้มีทั้งข้อดีและข้อเสีย และมีการปรับปรุงบางอย่าง
สถานการณ์ก่อนหน้านี้
- เซิร์ฟเวอร์ "gateway" ที่อยู่ทั่วโลกทำหน้าที่รับการเชื่อมต่อ WireGuard และเชื่อมต่อไปยังเครือข่ายส่วนตัวที่เหมาะสม
- ทุกครั้งที่รัน
flyctl จะสร้างหรือเชื่อมต่อกับโปรเซสเอเจนต์เบื้องหลัง
- เอเจนต์สร้างการตั้งค่า WireGuard peer ใหม่จาก GraphQL API
- API ส่งการตั้งค่า peer ไปยัง gateway ที่เหมาะสมผ่านระบบส่งข้อความ NATS
- บริการ
wggwd บน gateway รับการตั้งค่า เก็บไว้ในฐานข้อมูล SQLite และเพิ่มเข้าไปในเคอร์เนล
- API ตอบกลับคำขอ GraphQL พร้อมส่งการตั้งค่า และ
flyctl จะเชื่อมต่อกับ WireGuard peer
- NATS แม้จะรวดเร็ว แต่ไม่รับประกันการส่งถึง และไม่จัดการล้าง peer เก่าที่ค้างอยู่บน gateway
วิธีที่ดีกว่า
- การเก็บ WireGuard peer ไม่จำเป็นต้องใช้ฐานข้อมูลที่ซับซ้อน
- เปลี่ยนให้ gateway ดึงการตั้งค่าจาก API ทุกครั้งที่ต้องการ
- เพิ่ม peer เข้าเคอร์เนลเฉพาะตอนที่ไคลเอนต์ต้องการเชื่อมต่อ และลบออกได้เมื่อไม่จำเป็น
ทำให้ WireGuard peer แบบ JIT เป็นไปได้
- อินเทอร์เฟซการตั้งค่า WireGuard ของเคอร์เนล Linux ใช้ Netlink
- สามารถระบุและดักจับแพ็กเก็ตคำขอเชื่อมต่อ WireGuard ได้ด้วย BPF filter และ packet socket
- WireGuard ไม่มีแนวคิดเรื่อง "client" และ "server" แต่เป็นโปรโตคอลแบบ point-to-point
- เมื่อ
flyctl ส่งแพ็กเก็ต UDP ไปยัง gateway นั่นคือ handshake initiation
- สามารถใช้ BPF filter เพื่อจับการเชื่อมต่อขาเข้าได้
- เนื่องจากอิงกับเฟรมเวิร์กโปรโตคอล Noise จึงต้องถอดรหัสเพื่อระบุคำขอ
- สามารถสร้าง event feed เพื่อรับ public key ของผู้ใช้ทุกคนที่พยายามเชื่อมต่อกับ gateway
- ทุกครั้งที่พบ peer ใหม่ จะดึงข้อมูลของ peer นั้นผ่านคำขอ HTTP API ภายในแล้วติดตั้ง
เปิดแอปได้ในระดับนาที
- บน Fly.io สามารถดีพลอยแอปได้อย่างรวดเร็วและรับ JIT WireGuard peer ของตัวเองได้
มาดูกราฟกัน
- หลังจากรันระบบนี้มาหลายสัปดาห์ จำนวน WireGuard peer เก่าที่ค้างอยู่บน gateway ลดลงอย่างชัดเจน
- gateway คงสถานะน้อยลง และการตั้งค่า peer ทำได้เร็วขึ้น
- มีการแชร์ผลลัพธ์ที่ประสบความสำเร็จในวันเปลี่ยนผ่านผ่านกราฟ Grafana
ความเห็นของ GN⁺
- การปรับปรุง WireGuard ของ Fly.io เป็นตัวอย่างที่ดีของการยกระดับประสิทธิภาพและความเสถียรของเครือข่ายอย่างมาก
- แนวทางนี้อาจช่วยเสริมการจัดการทราฟฟิกเครือข่ายและความปลอดภัยได้ โดยเฉพาะในบริการบนคลาวด์
- โปรเจ็กต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ Tailscale และ ZeroTier ซึ่งต่างก็เป็นทางเลือก VPN สำหรับผู้ใช้ส่วนบุคคลและองค์กร
- เมื่อนำ WireGuard มาใช้ ควรพิจารณาเรื่องการตั้งค่าเครือข่าย นโยบายความปลอดภัย และความเข้ากันได้
- ข้อดีของการเลือกเทคโนโลยีนี้คือประสิทธิภาพที่รวดเร็วและการตั้งค่าที่เรียบง่าย แต่ก็อาจมีความท้าทายในด้านการผสานเข้ากับโครงสร้างพื้นฐานเดิมหรือการดูแลจัดการ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News