1. บทนำ
Thread คืออะไร
Thread เป็นโปรโตคอลเครือข่ายที่ทำงานร่วมกันแบบไร้สายและใช้พลังงานต่ำแบบ IP ซึ่งช่วยให้การสื่อสารระหว่างอุปกรณ์และอุปกรณ์กับระบบคลาวด์มีความปลอดภัย เครือข่ายเทรดสามารถปรับให้เข้ากับการเปลี่ยนแปลงโทโพโลยีเพื่อหลีกเลี่ยงความล้มเหลวจากจุดเดียว
OpenThread คืออะไร
OpenThread ที่ Google เปิดตัวเป็นการใช้งาน Thread® แบบโอเพนซอร์ส
Border Router ของ OpenThread คืออะไร
OpenThread Border Router (OTBR) ที่ Google เปิดตัวเป็นโอเพนซอร์สสำหรับ Thread Border Router
NAT64
NAT64 เป็นกลไกที่ทำให้โฮสต์ในเครือข่ายที่ใช้ IPv6 เท่านั้นเข้าถึงทรัพยากรในเครือข่าย IPv4 ได้ เกตเวย์ NAT64 คือเครื่องมือแปลค่าระหว่างโปรโตคอล IPv4 และโปรโตคอล IPv6
เครื่องมือแปล NAT64 ซึ่งเป็นส่วนหนึ่งของ OpenThread Border Router รองรับการแปลโปรโตคอล TCP, UDP และ ICMP (ICMPv6)
สิ่งที่คุณจะสร้าง
ใน Codelab นี้คุณจะตั้งค่า OpenThread Border Router และอุปกรณ์เทรด จากนั้นเปิดใช้และยืนยันการสื่อสารระหว่างอุปกรณ์ Thread และโฮสต์ IPv4 บนอินเทอร์เน็ตผ่าน OpenThread Border Router
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้าง Border Router ของ OpenThread พร้อมฟีเจอร์ NAT64
- วิธีสื่อสารกับโฮสต์ IPv4 จากอุปกรณ์ปลายทางเทรด
สิ่งที่ต้องมี
- เวิร์กสเตชันของ Linux สำหรับการสร้างและแฟลช Thread NCP, OpenThread CLI และการทดสอบการเชื่อมต่อ IPv4
- Raspberry Pi 4 พร้อม RAM 4 GB สำหรับ Border Router เทรด เวิร์กสเตชันของ Linux ของคุณควรเข้าถึงได้ผ่าน IPv4 จากอุปกรณ์เครื่องนี้
- Nordic เซมิคอนดักเตอร์ nRF52840 DK 2 แผ่น
โทโพโลยีเครือข่ายสำหรับ Codelab นี้:
2. ตั้งค่า Border Router ของ OpenThread
ทำตามขั้นตอนตั้งค่า OTBR ของ Thread Border Router - Bidirectional IPv6 Connectivity และ DNS-Based Service Discovery Codelab เพื่อสร้าง Border Router ของ OpenThread โดยมีการเปลี่ยนแปลงต่อไปนี้
ในสร้างและติดตั้ง OTBR คุณต้องบอกสคริปต์ให้เปิดใช้เครื่องมือแปล NAT64 ใน OpenThread โดยการตั้งค่าตัวแปรสภาพแวดล้อม NAT64
เป็น 1
และ NAT64_SERVICE
เป็น openthread
เรียกใช้คำสั่งต่อไปนี้ก่อนขั้นตอน
$ export NAT64=1 NAT64_SERVICE=openthread
ดำเนินการต่อด้วย Codelab ของ Thread Border Router - Bidirectional IPv6 Connectivity and DNS-Based Service Discovery ตามที่เขียนไว้ หลังจากสร้างเครือข่ายเทรดแล้ว คุณสามารถยืนยันได้ว่า Border Router กำลังเผยแพร่คำนำหน้า NAT64 ด้วยคำสั่ง OpenThread CLI
ก่อนอื่น ให้ตรวจสอบว่า Border Router เปิดอยู่และมีการเปิดใช้ NAT64 ใน Border Router โดยทำดังนี้
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
เราควรจะเห็นว่า OTBR ทำหน้าที่เป็นผู้นำเทรด และมีคำนำหน้า NAT64 (fd4c:9574:3720:2:0:0::/96
ในกรณีของเรา) ในข้อมูลเครือข่ายเทรด
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
อุปกรณ์เทรดจะใช้คำนำหน้า NAT64 เมื่อสื่อสารกับโฮสต์ IPv4
3. ตั้งค่าอุปกรณ์สิ้นสุดเทรด
ทําตามตั้งค่าขั้นตอน FTD ของเครือข่ายสร้างเทรดด้วยบอร์ด nRF52840 และ OpenThread codelab เพื่อสร้างและแฟลชอุปกรณ์ปลายทาง nRF52840 CLI โดยมีการเปลี่ยนแปลงขั้นตอนต่อไปนี้
ใน Build and Flash คุณต้องเพิ่ม -DOT_DNS_CLIENT=ON
, -DOT_SRP_CLIENT=ON
และ -DOT_ECDSA=ON
ต่อท้ายบรรทัดคำสั่งเมื่อเรียก script/build
:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
ดำเนินการต่อด้วย Build a Thread network with nRF52840 boards and OpenThread codelab ตามที่เขียนไว้ หลังจากอุปกรณ์ปลายทางกะพริบด้วยอิมเมจ CLI ให้ทำตาม Thread Border Router - การเชื่อมต่อ IPv6 แบบสองทิศทางและ DNS-Based Service Discovery เพื่อตั้งค่าอุปกรณ์ปลายทางเทรด
รอสักครู่หลังจากตั้งค่าอุปกรณ์ปลายทางของเทรด แล้วตรวจสอบว่าเข้าร่วมเครือข่ายเทรดสำเร็จหรือไม่ คุณควรเห็นคำนำหน้า NAT64 จากข้อมูลเครือข่าย (ในกรณีของเรา fd4c:9574:3720:2:0:0::/96
)
> netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
ตรวจสอบว่าข้อมูลเครือข่ายตรงกับจาก OTBR
4. สื่อสารกับโฮสต์ IPv4 จากอุปกรณ์ปลายทางเทรด
ตอนนี้คุณสามารถสื่อสารกับโฮสต์ในเครือข่าย IPv4 จากอุปกรณ์ปลายทางที่เราเพิ่งตั้งค่าได้
ส่งคำขอเสียงสะท้อน ICMP ไปยังโฮสต์ IPv4
จาก CLI ของอุปกรณ์ปลายทางของเทรด ให้ทำดังนี้
> ping 8.8.8.8 Pinging synthesized IPv6 address: fd4c:9574:3720:2:0:0:808:808 16 bytes from fd4c:9574:3720:2:0:0:808:808: icmp_seq=15 hlim=119 time=48ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 48/48.0/48 ms. Done
Border Router สร้างรายการการแมป NAT64 สำหรับอุปกรณ์นี้โดยใช้คำสั่ง nat64 mappings
ดังนี้
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ | 377ee63dd3127f1a | fd4c:9574:3720:1:1d61:b4c1:494f:f975 | 192.168.255.254 | 7190s | 1 | 16 | 1 | 16 | | | TCP | 0 | 0 | 0 | 0 | | | UDP | 0 | 0 | 0 | 0 | | | ICMP | 1 | 16 | 1 | 16 | Done
fd4c:9574:3720:1:1d61:b4c1:494f:f975
ควรเป็นที่อยู่ IPv6 ของอุปกรณ์ Thread
เรียกใช้คำสั่งนี้บน Border Router ได้ทุกเมื่อเพื่อดูวิธีนับจำนวนการเข้าชม
ส่งคำขอ DNS ไปยังเซิร์ฟเวอร์ DNS แบบ IPv4
ใช้ dns resolve4
เพื่อแก้ไขชื่อโฮสต์ในเครือข่าย IPv4 ที่อยู่เซิร์ฟเวอร์ DNS จะเป็นที่อยู่ IPv4 ได้ด้วย ดังนี้
> dns resolve4 example.com 8.8.8.8 Synthesized IPv6 DNS server address: fd4c:9574:3720:2:0:0:808:808 DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
สื่อสารผ่าน TCP
คุณสามารถสร้างการเชื่อมต่อ TCP ระหว่างอุปกรณ์ปลายทางและโฮสต์ในเครือข่าย IPv4
สมมติว่าที่อยู่ IP ของโฮสต์ IPv4 ของ Linux คือ 192.168.0.2
ในโฮสต์ IPv4 ของ Linux ให้ใช้ nc
เพื่อรอการเชื่อมต่อ TCP ดังนี้
$ nc -l 0.0.0.0 12345
จากอุปกรณ์ปลายทางเทรด ให้สร้างการเชื่อมต่อ TCP และส่งข้อความไปยังโฮสต์ IPv4 ของ Linux ดังนี้
> tcp init Done > tcp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd4c:9574:3720:2:0:0:c0a8:2 Done > tcp send hello
เอาต์พุตของโฮสต์ IPv4 ของ Linux:
hello
คุณยังส่งข้อความจากโฮสต์ IPv4 ของ Linux ไปยังอุปกรณ์ปลายทางเทรดได้ด้วย พิมพ์ "โลก" และกด Enter บนโฮสต์ IPv4 ของ Linux ที่ใช้ nc
และเอาต์พุตของอุปกรณ์ Thread จะแสดงดังนี้
TCP: Received 6 bytes: world
สื่อสารผ่าน UDP
คุณสามารถสื่อสารโดยใช้ UDP ระหว่างอุปกรณ์เทรดและโฮสต์ในเครือข่าย IPv4
สมมติว่าที่อยู่ IP ของโฮสต์ IPv4 ของ Linux คือ 192.168.0.2
ใช้ nc
เพื่อฟังการเชื่อมต่อ UDP:
$ nc -u -l 0.0.0.0 12345
จากอุปกรณ์ปลายทางเทรด ให้สร้างการเชื่อมต่อ UDP และส่งข้อความไปยังโฮสต์ IPv4 ของ Linux ดังนี้
> udp open Done > udp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd4c:9574:3720:2:0:0:c0a8:2 Done > udp send hello Done
เอาต์พุตของโฮสต์ IPv4 ของ Linux:
hello
คุณยังส่งข้อความจากโฮสต์ IPv4 ของ Linux ไปยังอุปกรณ์ปลายทางเทรดได้ด้วย พิมพ์ "โลก" และกด Enter บนโฮสต์ IPv4 ของ Linux ที่ใช้ nc
และเอาต์พุตของอุปกรณ์ Thread จะแสดงดังนี้
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. เปิด/ปิด NAT64 บน Border Router
คุณสามารถเปิดหรือปิดใช้ NAT64 ได้ทุกเมื่อที่ต้องการ ใช้ nat64 disable
เพื่อปิดใช้ NAT64 และใช้ nat64 state
เพื่อตรวจสอบสถานะ NAT64
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
หลังจากปิดใช้แล้ว อุปกรณ์จะไม่เผยแพร่คำนำหน้า NAT64 อีกต่อไป
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
นอกจากนี้ อุปกรณ์ในเครือข่ายเทรดจะเข้าถึงโฮสต์ IPv4 ผ่าน Border Router นี้ไม่ได้อีกต่อไป
จาก CLI ของอุปกรณ์ปลายทางของเทรด ให้ทำดังนี้
> ping 8.8.8.8 Error 13: InvalidState
ใช้ nat64 enable
เพื่อเปิดใช้ NAT64 อาจใช้เวลาสักครู่ก่อนที่เครื่องมือจัดการคำนำหน้าจะเริ่มโฆษณาคำนำหน้า NAT64:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
หลังจากผ่านไป 2-3 วินาที คอมโพเนนต์ NAT64 ควรพร้อมทำงาน:
$ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done $ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
โปรดทราบว่าการปิดใช้ NAT64 จะล้างตารางการแมป ดังนี้
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ Done
6. ส่งต่อคำขอ DNS ไปยังเซิร์ฟเวอร์ DNS อัปสตรีม
เมื่อเปิดใช้ NAT64 ใน Border Router OpenThread จะพยายามส่งต่อคำค้นหา DNS สำหรับโดเมนอินเทอร์เน็ตไปยังเซิร์ฟเวอร์ DNS ต้นทาง
เซิร์ฟเวอร์ DNS-SD ภายในรองรับฟังก์ชันนี้ ดังนั้นคุณต้องตรวจสอบว่าเซิร์ฟเวอร์ DNS-SD เปิดใช้อยู่
$ sudo ot-ctl srp server state running Done
หากไม่ใช่ running
ให้เปิดใช้ตามขั้นตอนต่อไปนี้
$ sudo ot-ctl srp server enable Done
ตรวจสอบว่าได้เปิดใช้พร็อกซี DNS ต้นทางแล้ว
$ sudo ot-ctl dns server upstream Enabled Done
หากไม่ใช่ Enabled
ให้เปิดใช้ตามขั้นตอนต่อไปนี้
$ sudo ot-ctl dns server upstream enable Done
ในอุปกรณ์ปลายทาง ให้ตรวจสอบว่าไคลเอ็นต์ SRP เปิดใช้อยู่เพื่อให้ส่งคำขอ DNS ไปยัง Border Router โดยทำดังนี้
> srp client state Enabled Done
หากไม่ใช่ Enabled
ให้เปิดใช้ตามขั้นตอนต่อไปนี้
> srp client autostart enable Done
ในอุปกรณ์ปลายทาง ให้ตรวจสอบว่าเซิร์ฟเวอร์ DNS เริ่มต้นเป็น Border Router
> dns config Server: [fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes Done
ที่อยู่ IPv6 ของเซิร์ฟเวอร์ (fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf
ในตัวอย่างข้างต้น) ควรเป็นหนึ่งในที่อยู่ของ Border Router ของ OpenThread
ตอนนี้คุณสามารถส่งคำขอ DNS สำหรับโดเมนอินเทอร์เน็ตจากอุปกรณ์ปลายทางได้แล้ว โดยทำดังนี้
> dns resolve example.com DNS response for example.com. - 2606:2800:220:1:248:1893:25c8:1946 TTL:8720 Done > dns resolve4 example.com DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
7. ขอแสดงความยินดี
ขอแสดงความยินดี คุณตั้งค่า Border Router ที่มีการรองรับ NAT64 เรียบร้อยแล้วและใช้เพื่อให้การเข้าถึงอินเทอร์เน็ตแก่อุปกรณ์ปลายทางเทรด
อ่านเพิ่มเติม
- คำแนะนำเกี่ยวกับ OpenThread
- ข้อมูลอ้างอิง CLI ของ OpenThread
- เอกสารอ้างอิง OpenThread API สำหรับ NAT64
- เอกสารอ้างอิง OpenThread API สำหรับ DNS ต้นทาง
- การจัดการแพลตฟอร์ม OpenThread สำหรับ DNS