การทำงานของ NAT Traversal (2020)
(tailscale.com)หลักการทำงานของ 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 ทำงานได้อย่างเป็นมิตรมากขึ้น
ยังไม่มีความคิดเห็น