หลักการทำงานของ NAT Traversal

  • ปัญหาพื้นฐาน: พูดถึงปัญหาการตั้งค่าการเชื่อมต่อแบบ peer-to-peer ระหว่างเครื่องสองเครื่อง โดย Tailscale ต้องการตั้งค่า WireGuard® tunnel เทคโนโลยีนี้ถูกใช้ในโดเมนต่างๆ เช่น WebRTC, การโทร VoIP, และเกมวิดีโอ

  • โปรโตคอลบนพื้นฐาน UDP: สำหรับ NAT Traversal จำเป็นต้องใช้โปรโตคอลที่อาศัย UDP แม้ว่า TCP จะใช้งานได้ แต่จะเพิ่มความซับซ้อนและอาจต้องปรับแต่งเคอร์เนล

  • การควบคุมเครือข่าย socket โดยตรง: ต้องควบคุม socket ที่ใช้ส่งและรับแพ็กเก็ตเครือข่ายโดยตรง ไม่สามารถทะลุผ่าน NAT ได้โดยการใช้ไลบรารีเครือข่ายเดิม

  • การใช้ local proxy: หากการเข้าถึง socket โดยตรงทำได้ยาก สามารถใช้ local proxy เพื่อทำ NAT Traversal และ relay แพ็กเก็ตได้

ทำความเข้าใจไฟร์วอลล์

  • ไฟร์วอลล์แบบ stateful: อุปกรณ์ NAT ส่วนใหญ่จะมีไฟร์วอลล์แบบ stateful ซึ่งจดจำแพ็กเก็ตที่เคยเห็นมาก่อนและนำมาใช้ในการจัดการแพ็กเก็ตใหม่

  • กฎการรับส่ง UDP: ไฟร์วอลล์จะอนุญาตให้แพ็กเก็ต UDP ขาเข้าที่ตรงกับแพ็กเก็ตขาออกที่เห็นมาก่อนสามารถผ่านได้

  • การรับมือไฟร์วอลล์: หากไฟร์วอลล์ทุกตัวมีแนวทางตรงกันหมด ก็จะกลายเป็นการสื่อสารแบบ client/server แบบดั้งเดิม แต่ปัญหาจะเกิดเมื่อเครื่องทั้งสองฝั่งพยายามสื่อสารกันโดยตรง

การข้ามไฟร์วอลล์

  • แก้ปัญหาโดยไม่ต้องปรับไฟร์วอลล์: ต้องหาวิธีแก้โดยไม่ต้องปรับแต่งไฟร์วอลล์ หากแพ็กเก็ต UDP มีที่อยู่ต้นทางและปลายทางที่ถูกต้อง แพ็กเก็ตที่เป็นการตอบกลับจะถูกอนุญาตให้ผ่าน

  • การแชร์ข้อมูล: ฝั่ง peer จะต้องทราบข้อมูล ip:port ของอีกฝั่งล่วงหน้า โดยใช้เซิร์ฟเวอร์ประสานงาน (coordination server) เพื่อซิงก์ข้อมูล ip:port

แก่นแท้ของ NAT

  • อุปกรณ์ NAT: อุปกรณ์ NAT จะดัดแปลงแพ็กเก็ต และโดยเฉพาะ Source NAT (SNAT) มักเป็นแหล่งของปัญหา ใช้สำหรับเชื่อมต่ออุปกรณ์หลายเครื่องเข้ากับอินเทอร์เน็ต

  • การสำรวจ NAT: เนื่องจากอุปกรณ์ NAT มีการดัดแปลงแพ็กเก็ต ทำให้ peer ทั้งสองไม่รู้ ip:port ของกันและกัน STUN protocol ช่วยให้ทำ NAT traversal ได้

STUN และการสำรวจ NAT

  • โปรโตคอล STUN: เมื่อไคลเอนต์ที่ผ่าน NAT ติดต่อกับเซิร์ฟเวอร์บนอินเทอร์เน็ต เซิร์ฟเวอร์จะเห็น ip:port สาธารณะซึ่ง NAT สร้างขึ้น STUN server จะคืนข้อมูลนี้ให้กับไคลเอนต์

  • ข้อจำกัด: STUN ทำงานได้เฉพาะบางกรณี โดยเฉพาะอย่างยิ่งมีแนวโน้มล้มเหลวเมื่อถูกใช้กับ NAT gateway ที่โฆษณาตนเองว่าเป็นอุปกรณ์รักษาความปลอดภัย

แนวทางเพิ่มเติม

  • การใช้รีเลย์: เมื่อการเชื่อมต่อแบบตรงล้มเหลว ใช้รีเลย์ที่ทั้งสองฝั่งสื่อสารได้โดยไม่รบกวนกันเพื่อส่งต่อแพ็กเก็ต

  • โปรโตคอล DERP: Tailscale ใช้โปรโตคอล DERP (Detoured Encrypted Routing Protocol) เพื่อรีเลย์ข้อมูลและช่วย NAT traversal

  • โปรโตคอลการแมปพอร์ต: สามารถใช้โปรโตคอลการแมปพอร์ต เช่น UPnP IGD, NAT-PMP และ PCP เพื่อขอให้อุปกรณ์ NAT ทำงานได้อย่างเป็นมิตรมากขึ้น

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น