วิธีตรวจสอบว่าคุณอยู่หลัง CGNAT หรือไม่
เรียนรู้วิธีดูว่าเราเตอร์มี public IPv4 จริง อยู่หลัง CGNAT ของ ISP หรือเป็นเพียง double NAT ภายในบ้าน
Carrier-Grade NAT หรือที่มักเรียกย่อว่า CGNAT เป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดที่ทำให้ port forwarding ดูเหมือนไม่มีผลอะไรเลย เราเตอร์อาจให้คุณสร้างกฎ forwarding ได้ เซิร์ฟเวอร์เกมอาจกำลังทำงาน และ firewall ภายในอาจดูถูกต้อง แต่คนที่อยู่นอกบ้านก็ยังเชื่อมต่อไม่ได้ ส่วนที่ขาดไปมักเรียบง่ายมาก คือเราเตอร์บ้านของคุณอาจไม่ได้ถือครองที่อยู่ IPv4 สาธารณะจริง ๆ
คู่มือนี้แสดงวิธีตรวจสอบ CGNAT แบบปฏิบัติได้จริงโดยไม่ต้องเดา เป้าหมายไม่ใช่การบอกว่าผล strict NAT ทุกกรณีคือ CGNAT การทดสอบ NAT type อธิบายพฤติกรรมการเชื่อมต่อ ส่วน CGNAT คือการออกแบบการแชร์ที่อยู่ใน upstream ที่ ISP ใช้ หากต้องการระบุ ให้เปรียบเทียบ public IPv4 ของคุณกับที่อยู่ WAN ของเราเตอร์ ตรวจสอบช่วงที่อยู่ แล้วตัดความเป็นไปได้ของ double NAT ปกติภายในบ้านออกก่อน
คำตอบแบบเร็ว
ถ้าที่อยู่ IPv4 WAN ของเราเตอร์ตรงกับ public IPv4 ที่เครื่องมือตรวจสอบภายนอกแสดง เราเตอร์น่าจะมี public IPv4 จริง
ถ้าที่อยู่ WAN ของเราเตอร์อยู่ใน 100.64.0.0/10 นั่นเป็นสัญญาณ CGNAT ที่ชัดเจน RFC 6598 สงวน shared address space นี้ไว้สำหรับการใช้งาน NAT ของผู้ให้บริการ
ถ้าที่อยู่ WAN ของเราเตอร์อยู่ใน 10.0.0.0/8, 172.16.0.0/12 หรือ 192.168.0.0/16 แสดงว่ามี NAT อยู่ upstream ซึ่งอาจเป็น gateway ของ ISP, modem/router หรือเราเตอร์อีกตัวในบ้าน
ถ้าที่อยู่ WAN และที่อยู่สาธารณะไม่ตรงกัน แสดงว่ามีบางอย่าง upstream กำลังแปลทราฟฟิกอยู่ ตรวจสอบ topology ในบ้านก่อนเรียกมันว่า CGNAT
ทำไม NAT type อย่างเดียวจึงพิสูจน์ CGNAT ไม่ได้
การทดสอบ NAT type สังเกตว่าเครือข่ายปัจจุบันทำงานอย่างไรเมื่อมีการสร้างการเชื่อมต่อ ผลลัพธ์อาจแสดง open internet, full cone, restricted, port restricted, symmetric, timeout หรือ blocked แล้วแต่วิธีทดสอบ สิ่งนี้มีประโยชน์สำหรับเกมและแอป peer-to-peer แต่ไม่ได้บอกว่าใครถือครอง public IPv4 ผล symmetric NAT อาจเกิดบนเราเตอร์ที่มี public IPv4 และบ้านที่อยู่หลัง CGNAT ก็ยังอาจให้บาง session ขาออกทำงานได้ตามปกติ
CGNAT เป็นอีกเรื่องหนึ่ง หมายถึง ISP วางผู้ใช้จำนวนมากไว้หลังชั้น NAT ที่ใช้ร่วมกัน เพื่อให้ลูกค้าหลายรายใช้ pool ของ public IPv4 ที่เล็กลงได้ RFC 6888 อธิบาย CGN ว่าเป็น NAT สำหรับผู้ใช้หลายราย RFC 6269 อธิบายว่าการแชร์ที่อยู่อาจทำลายสมมติฐานของแอป การบันทึก log การจัดการ abuse และการเชื่อมต่อขาเข้าได้อย่างไร อาการที่เห็นได้จริงสำหรับผู้ใช้บ้านคือทราฟฟิกขาเข้าที่ไม่ได้ร้องขอจะไปไม่ถึงเราเตอร์ แม้กฎ port forwarding ภายในจะถูกต้องแล้วก็ตาม
วิธีตรวจสอบ CGNAT
1ค้นหา public IPv4 ของคุณ
เรียกใช้ตัวตรวจสอบ public IP จากอุปกรณ์ในเครือข่ายเดียวกัน หรือเรียกใช้ NAT test บนไซต์นี้แล้วคัดลอกค่า IPv4 นี่คือที่อยู่ที่เว็บไซต์และบริการระยะไกลเห็น จดไว้ให้ถูกต้อง เพราะขั้นตอนถัดไปต้องนำไปเปรียบเทียบกับที่อยู่ WAN ของเราเตอร์
2ค้นหาที่อยู่ IPv4 WAN หรือ Internet บนเราเตอร์
เข้าสู่หน้า admin ของเราเตอร์ แล้วมองหาช่องชื่อ WAN IP, Internet IP, IPv4 address หรือ gateway status อย่าใช้ที่อยู่ภายในของโทรศัพท์หรือพีซี เช่น 192.168.1.23 คุณต้องใช้ที่อยู่ที่ถูกกำหนดให้กับ interface ของเราเตอร์ฝั่งที่หันออกสู่อินเทอร์เน็ต
3ตรวจสอบช่วงที่อยู่ WAN
ถ้าที่อยู่ WAN ของเราเตอร์อยู่ระหว่าง 100.64.0.0 ถึง 100.127.255.255 แสดงว่าอยู่ใน shared address space ที่กำหนดโดย RFC 6598 และ IANA ระบุว่าไม่สามารถเข้าถึงได้ทั่วโลก ถ้าเป็น 10.x.x.x, 172.16-31.x.x หรือ 192.168.x.x แสดงว่าเป็น private address space ทั้งสองกรณีหมายความว่าเราเตอร์ไม่ได้ถือครอง IPv4 ปกติที่เข้าถึงได้ทั่วโลกโดยตรง
4ตัด double NAT ภายในบ้านออกก่อน
หลายบ้านมีอุปกรณ์ routing สองตัว คือ modem/router ของ ISP และเราเตอร์ Wi-Fi แยกต่างหาก หากทั้งสองตัวทำ routing เราเตอร์ของคุณจะได้รับที่อยู่ WAN แบบ private แม้สาย ISP อาจยังมี public IPv4 อยู่บนอุปกรณ์ตัวแรก ให้ตั้งอุปกรณ์ ISP เป็น bridge mode หรือปรับเราเตอร์ของคุณเป็น access point mode แล้วตรวจสอบใหม่
5ใช้ port forwarding เป็นหลักฐานเสริม
port forwarding ล้มเหลวอย่างเดียวไม่พอพิสูจน์ CGNAT แต่มีประโยชน์หลังจากยืนยันแล้วว่าบริการกำลัง listening และ firewall เปิดอยู่ หากที่อยู่ WAN เป็น shared หรือ private และการตรวจพอร์ตจากภายนอกล้มเหลวเสมอ CGNAT หรือ NAT upstream อื่นน่าจะกำลังบล็อกการเข้าถึงขาเข้า
6ใช้ traceroute เป็นสัญญาณขั้นสูงเท่านั้น
Cloudflare อธิบายเทคนิคที่มองหา hop 100.64.0.0/10 ระหว่างเครือข่ายไคลเอนต์กับที่อยู่สาธารณะที่สังเกตได้ วิธีนี้ช่วยผู้ใช้เชิงเทคนิคยืนยันเส้นทาง CGN ได้ แต่ไม่ใช่ขั้นตอนแรกสำหรับคนส่วนใหญ่ เพราะ routing และ filtering ของ ISP อาจซ่อนหรือเปลี่ยนการมองเห็น hop ได้
ช่วงที่อยู่ที่สำคัญ
| ช่วง | ความหมาย |
|---|---|
| 100.64.0.0/10 | Shared Address Space สำหรับ NAT ของผู้ให้บริการ ที่อยู่ WAN ของเราเตอร์ในช่วงนี้เป็นตัวบ่งชี้ CGNAT ที่ชัดเจน |
| 10/8, 172.16/12, 192.168/16 | Private-use address space เราเตอร์ของคุณอยู่หลังอุปกรณ์ NAT อีกตัว ซึ่งอาจเป็น gateway ของ ISP หรือเราเตอร์ภายในอีกตัว |
| ช่วง IPv4 ปกติอื่น ๆ | ถ้าที่อยู่ WAN ของเราเตอร์ตรงกับผลตรวจ public IPv4 โดยทั่วไป port forwarding จะทำงานได้ หากบริการภายในและ firewall ถูกตั้งค่าอย่างถูกต้อง |
CGNAT เทียบกับ double NAT
CGNAT และ double NAT ดูคล้ายกัน เพราะทั้งคู่ทำให้อุปกรณ์อยู่หลังชั้นการแปลมากกว่าหนึ่งชั้น ความต่างคือการควบคุม คุณมักแก้ double NAT ได้ด้วยการเปลี่ยนโหมดอุปกรณ์ของคุณเอง แต่โดยปกติคุณไม่สามารถลบ CGNAT ของ ISP จากการตั้งค่าเราเตอร์บ้านได้
CGNAT
ISP แชร์ public IPv4 ให้ผู้ใช้จำนวนมาก เราเตอร์ของคุณได้รับที่อยู่ upstream แบบ shared หรือ private ดังนั้นทราฟฟิก IPv4 ขาเข้าที่ไม่ได้ร้องขอจะหยุดก่อนถึงเราเตอร์
Double NAT
อุปกรณ์สองตัวในบ้านทำ routing พร้อมกัน มักเป็น gateway ของ ISP บวกกับเราเตอร์ของคุณเอง bridge mode, access point mode หรือการเอาชั้น routing หนึ่งชั้นออกมักแก้ได้
สัญญาณหลอกที่พบบ่อย
อย่าวินิจฉัย CGNAT จากผลพอร์ตปิดเพียงอย่างเดียว พอร์ตปิดบอกแค่ว่าการตรวจจากภายนอกไปไม่ถึงบริการที่รับการเชื่อมต่อ ปัญหาภายในหลายอย่างสามารถให้ผลแบบเดียวกันได้
- firewall ของระบบปฏิบัติการหรือของเราเตอร์บล็อกพอร์ต แม้มีกฎ forwarding อยู่แล้ว
- เซิร์ฟเวอร์เกม กล้อง NAS หรือบริการ remote desktop ไม่ได้ listening ที่พอร์ตนั้นจริง ๆ
- กฎ forwarding ใช้ TCP ทั้งที่แอปต้องการ UDP หรือเครื่องมือตรวจภายนอกทดสอบผิด protocol
- VPN ชุดรักษาความปลอดภัย หรือ proxy เปลี่ยน public IP ที่สังเกตได้ ทำให้ผลเปรียบเทียบชวนเข้าใจผิด
สิ่งที่ทำได้
แก้ double NAT ภายในก่อน
หากคุณควบคุมอุปกรณ์ routing ทั้งสองตัวได้ ให้ bridge gateway ของ ISP หรือปรับเราเตอร์ตัวที่สองเป็น access point mode จากนั้นเปรียบเทียบ WAN IP กับ public IP อีกครั้ง
ขอ public IPv4 จาก ISP
ผู้ให้บริการบางรายมี public IPv4 address, ตัวเลือก static IPv4 หรือแพ็กเกจที่ไม่มี CGNAT ชื่อและราคาจะแตกต่างกันตามภูมิภาค
ใช้ IPv6 เมื่อฝั่งปลายทางรองรับ
IPv6 สามารถเลี่ยง IPv4 CGNAT ได้ แต่ firewall ของเราเตอร์ยังคุมการเข้าถึงขาเข้าอยู่ ควรทดสอบ IPv6 availability และ external reachability แยกกัน
ใช้ relay, VPS, tunnel หรือ hosted server
ถ้า ISP ไม่ให้ public IPv4 ให้ใช้โหมดเกมแบบ relay, VPS tunnel, reverse proxy หรือ hosted server ที่มี public address ที่เข้าถึงได้
ตรวจพฤติกรรม NAT ก่อน
เรียกใช้ NAT test บนเครือข่ายเดียวกันก่อนเปลี่ยนการตั้งค่าเราเตอร์ ผลลัพธ์ช่วยแยกพฤติกรรม NAT ออกจากการแชร์ที่อยู่ของ ISP และปัญหา firewall ภายใน
ตรวจสอบประเภท NAT ทันที →แหล่งข้อมูล
- RFC 6598: IPv4 prefix ที่ IANA สงวนไว้สำหรับ Shared Address Space
- ทะเบียน IANA สำหรับที่อยู่ IPv4 วัตถุประสงค์พิเศษ
- RFC 6888: ข้อกำหนดทั่วไปสำหรับ Carrier-Grade NAT
- RFC 6269: ปัญหาจากการแชร์ IP address
- Cloudflare: การตรวจจับ Carrier-Grade NAT
- TP-Link: การแก้ปัญหา port forwarding
- TP-Link: DDNS และการแก้ปัญหา private WAN IP
- Cisco: ภาพรวม Carrier-Grade NAT