9.7. เครือข่ายส่วนตัวและ NAT

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

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

9.7.1. ช่วงที่อยู่ IP ส่วนตัว

มีช่วงที่อยู่ IPv4 สามช่วงที่สงวนไว้เป็น ที่อยู่ที่ไม่สามารถกำหนดเส้นทางบนอินเทอร์เน็ตสาธารณะ เครือข่ายท้องถิ่นใดก็ตามสามารถใช้ที่อยู่จากช่วงเหล่านี้ได้โดยไม่ต้องประสานงานกับใคร เนื่องจากเราเตอร์ภายนอกเครือข่ายท้องถิ่นจะไม่พยายามส่งแพ็กเก็ตไปยังที่อยู่เหล่านี้:

  • 10.0.0.0 -- 10.255.255.255 (16 ล้านที่อยู่ พบบ่อยในเครือข่ายองค์กรขนาดใหญ่)

  • 172.16.0.0 -- 172.31.255.255 (ประมาณหนึ่งล้านที่อยู่ พบน้อยกว่าในทางปฏิบัติ)

  • 192.168.0.0 -- 192.168.255.255 (65,000 ที่อยู่ เป็นค่าเริ่มต้นของเราเตอร์บ้านเกือบทุกรุ่น)

ในเครือข่ายบ้านทั่วไป กล้องและแล็ปท็อปที่สื่อสารกันต่างใช้ที่อยู่ IP ในรูปแบบ 192.168.x.x เนื่องจากนั่นคือช่วงที่เราเตอร์บ้านเลือกใช้สำหรับเครือข่ายที่มันดูแล

9.7.1.1. วิธีการใช้งาน netmask

หน้า ที่อยู่ IP ได้แนะนำสัญกรณ์ /24 ไปแล้ว เหตุผลที่สำคัญที่นี่คือ netmask คือสิ่งที่แต่ละอุปกรณ์ใช้ในการตัดสินใจว่าแพ็กเก็ตควรไปที่ใดต่อไป ทุกครั้งที่กล้องส่งแพ็กเก็ต มันจะนำ netmask ของตัวเองไปใช้กับที่อยู่ปลายทางและพิจารณาผลลัพธ์:

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

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

การทดสอบง่าย ๆ นั้น -- "เราใช้บิตเครือข่ายเดียวกันหรือไม่?" -- นั่นคือสิ่งที่ netmask มีไว้เพื่ออะไร นั่นคือเหตุผลที่เครือข่ายบ้านใช้ค่าเริ่มต้นเป็น /24: การจำกัดไว้ที่ 254 อุปกรณ์เหมาะสำหรับครัวเรือนและทำให้เครือข่ายเรียบง่าย

9.7.2. Network Address Translation

กล้องที่มีที่อยู่ IP 192.168.1.50 ไม่สามารถส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์บนอินเทอร์เน็ตสาธารณะได้โดยตรง เนื่องจากอินเทอร์เน็ตสาธารณะไม่รู้จักเส้นทางไปยัง 192.168.x.x เราเตอร์บ้านแก้ปัญหานี้ด้วย Network Address Translation หรือ NAT และดำเนินการอย่างโปร่งใส

A diagram with three blocks. On the left, two devices on a private network labelled "camera 192.168.1.50" and "laptop 192.168.1.51", both connected to a central box labelled "router". The router has two faces -- a private face labelled "192.168.1.1" toward the devices, and a public face labelled "203.0.113.5" toward the internet. The internet is drawn as a cloud on the right. Arrows from the devices pass through the router and emerge as if from the public address.

NAT เขียนทับที่อยู่ต้นทางของแพ็กเก็ตขาออกให้เป็นที่อยู่สาธารณะของเราเตอร์ และยกเลิกการเขียนทับเมื่อมีการตอบกลับที่เข้ามา ทำให้อุปกรณ์ส่วนตัวดูเหมือนใช้ที่อยู่สาธารณะเดียวร่วมกัน

เราเตอร์มี สอง ที่อยู่: ที่อยู่ส่วนตัวบนเครือข่ายท้องถิ่น (โดยทั่วไปคือ 192.168.1.1) และที่อยู่สาธารณะที่ผู้ให้บริการอินเทอร์เน็ตกำหนดให้ เมื่อกล้องส่งแพ็กเก็ตไปยังที่อยู่สาธารณะ เราเตอร์จะ

  1. บันทึกที่อยู่ส่วนตัว + พอร์ตของกล้องและจับคู่กับพอร์ตขาออกชั่วคราวของตัวเอง

  2. เขียนทับที่อยู่ต้นทางบนแพ็กเก็ตให้เป็นที่อยู่สาธารณะของตัวเอง (และพอร์ตต้นทางให้เป็นพอร์ตขาออกที่เลือก)

  3. ส่งแพ็กเก็ตที่เขียนทับแล้วออกทางด้านสาธารณะ

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

NAT คือสิ่งที่ทำให้เครือข่ายบ้านใช้งานได้จริง และยังมีผลที่ตามมาสองอย่างที่ควรทราบ

9.7.3. สิ่งที่ NAT เปลี่ยนแปลง

ขาออกทำได้ง่าย กล้องบนเครือข่ายส่วนตัวสามารถสื่อสาร ออกไป ได้อย่างอิสระ ทุกครั้งที่มันเปิดการเชื่อมต่อ TCP หรือส่งแพ็กเก็ต UDP ไปยังเซิร์ฟเวอร์ระยะไกล NAT จะตั้งค่าคู่โดยอัตโนมัติ แอปพลิเคชันกล้องส่วนใหญ่ทำงานในทิศทางนี้: ถ่ายภาพ ส่งไปยังเซิร์ฟเวอร์ที่ใดที่หนึ่ง แล้วรับการตอบกลับ

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

มีวิธีแก้ปัญหาสำหรับการรับขาเข้าสามวิธีที่นิยมใช้ เรียงตามความสะดวกในการใช้งาน:

  • Port forwarding กำหนดค่าเราเตอร์ให้ส่งต่อแพ็กเก็ตขาเข้าทั้งหมดบนพอร์ตสาธารณะที่เลือกไปยังอุปกรณ์ส่วนตัวที่ระบุ ต้องมีสิทธิ์ผู้ดูแลระบบในการเข้าถึงเราเตอร์ และจะหยุดทำงานเมื่อที่อยู่สาธารณะของเราเตอร์เปลี่ยนแปลง

  • VPN เรียกใช้เครือข่ายส่วนตัวเสมือนที่วางกล้องไว้บนเครือข่ายลอจิคัลเดียวกันกับผู้ที่ต้องการเข้าถึง มีความซับซ้อนสูง และอยู่นอกขอบเขตสำหรับการปรับใช้กล้องส่วนใหญ่

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

NAT มองไม่เห็นสำหรับโค้ด Python บนกล้อง สคริปต์เพียงแค่สื่อสารกับปลายทางที่ต้องการ แล้วเราเตอร์จัดการการแปลเบื้องหลัง แต่ ทิศทาง ของการเชื่อมต่อมีความสำคัญ และ NAT คือเหตุผลที่ "กล้องติดต่อออกไปยังเซิร์ฟเวอร์คลาวด์" เป็นรูปแบบที่ง่ายกว่า "เซิร์ฟเวอร์คลาวด์ติดต่อเข้ามาหากล้อง" มาก