1. บทนำ
ชุดข้อความคืออะไร
เทรดเป็นโปรโตคอลเครือข่ายที่ทํางานร่วมกันแบบไร้สายแบบ IP ที่ใช้พลังงานต่ํา ซึ่งช่วยให้ติดต่อสื่อสารระหว่างอุปกรณ์กับอุปกรณ์ได้อย่างปลอดภัยกับระบบคลาวด์ เครือข่ายเทรดอาจปรับตัวตามการเปลี่ยนแปลงโทโพโลยีเพื่อหลีกเลี่ยงความล้มเหลวจากจุดเดียว
OpenThread คืออะไร
OpenThread ที่ Google เผยแพร่เป็นการใช้งานโอเพนซอร์สของ Thread®
เราเตอร์เส้นขอบของ OpenThread คืออะไร
เราเตอร์ Border Border (OTBR) เผยแพร่โดย Google เป็นการใช้งานโอเพนซอร์สของเราเตอร์ Border Border
NAT64
NAT64 เป็นกลไกที่ช่วยให้โฮสต์ในเครือข่าย IPv6 เท่านั้นสามารถเข้าถึงทรัพยากรในเครือข่าย IPv4 เกตเวย์ NAT64 คือเครื่องมือแปลระหว่างโปรโตคอล IPv4 กับโปรโตคอล IPv6
นักแปล NAT64 ซึ่งเป็นส่วนหนึ่งของเราเตอร์ OpenThread Border สนับสนุนการแปลโปรโตคอล TCP, UDP และ ICMP (ICMPv6)
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณกําลังจะตั้งค่าเราเตอร์ OpenThread Border และอุปกรณ์ Thread จากนั้นเปิดใช้และตรวจสอบการสื่อสารระหว่างอุปกรณ์ Thread และโฮสต์ IPv4 บนอินเทอร์เน็ตผ่านเราเตอร์ OpenThread Border
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างเราเตอร์ OpenThread Border ด้วยฟีเจอร์ NAT64
- วิธีสื่อสารกับโฮสต์ IPv4 จากอุปกรณ์ของผู้ใช้ปลายทางเทรด
สิ่งที่ต้องมี
- เวิร์กสเตชัน Linux สําหรับการสร้างและกะพริบ NCP เทรด, OpenThread CLI และการทดสอบการเชื่อมต่อ IPv4
- Raspberry Pi 4 พร้อม RAM 4 GB สําหรับเราเตอร์เส้นขอบ Thread เวิร์กสเตชัน Linux ควรเข้าถึงได้ผ่าน IPv4 จากอุปกรณ์นี้
- บอร์ด Nordic Semiconductor nRF52840 DK 2 ชุด
โทโพโลยีเครือข่ายสําหรับ Codelab นี้
2. ตั้งค่าเราเตอร์เส้นขอบ OpenThread
ทําตามขั้นตอน OTBR การตั้งค่าเราเตอร์ Thread Border - Bidirectional IPv6 Connectivity and DNS-based Service Discovery Codelab เพื่อสร้างเราเตอร์ OpenThread แนวเส้นขอบ โดยมีการเปลี่ยนแปลงต่อไปนี้
ในสร้างและติดตั้ง OTBR คุณต้องบอกสคริปต์เพื่อเปิดใช้เครื่องมือแปล NAT64 ใน OpenThread โดยตั้งค่าตัวแปรสภาพแวดล้อม NAT64
เป็น 1
และ NAT64_SERVICE
เป็น openthread
เรียกใช้คําสั่งต่อไปนี้ก่อนขั้นตอน
$ export NAT64=1 NAT64_SERVICE=openthread
ดําเนินการต่อด้วย Codelab ของเทรด Border Router - แบบ 2 ทิศทางของ IPv6 และการสํารวจบริการ DNS หลังจากสร้างเครือข่ายเทรด คุณจะยืนยันได้ว่าเราเตอร์เส้นขอบกําลังเผยแพร่คํานําหน้า NAT64 ด้วยคําสั่ง OpenThread CLI
ก่อนอื่น ให้ตรวจสอบว่าเราเตอร์เส้นขอบเริ่มทํางานและได้เปิดใช้ NAT64 บนเราเตอร์เส้นขอบแล้ว
$ 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 ของเครือข่าย Build a Thread ที่มีบอร์ด nRF52840 และ OpenThread codelab เพื่อสร้างและแฟลชอุปกรณ์ nRF52840 CLI ที่มีการเปลี่ยนแปลงโดยทําตามขั้นตอนต่อไปนี้
ใน Build andแฟลช คุณต้องเพิ่ม -DOT_DNS_CLIENT=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
ดําเนินการต่อด้วยสร้างเครือข่ายชุดข้อความที่มีกระดาน nRF52840 และ Codelab ของ OpenThread ตามที่เขียนไว้ หลังจากอุปกรณ์ของผู้ใช้ปลายทางแฟลชด้วยภาพ CLI แล้วให้ติดตามเราเตอร์ Border Border - Bidirectional IPv6 Connectivity and 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
เราเตอร์เส้นขอบสร้างรายการการจับคู่ 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 ของอุปกรณ์เทรด
เรียกใช้คําสั่งนี้บนเราเตอร์เส้นขอบได้ตลอดเวลาเพื่อดูว่าระบบนับการเข้าชมอย่างไร
ส่งคําขอ 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 ไปยังอุปกรณ์ปลายทางของเทรด พิมพ์ "world" แล้วกด 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 ไปยังอุปกรณ์ปลายทางของเทรด พิมพ์ "world" แล้วกด Enter ในโฮสต์ IPv4 ของ Linux ที่เรียกใช้ nc
และเอาต์พุตอุปกรณ์ Thread ของคุณ:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. เปิด/ปิด NAT64 บนเราเตอร์ Border
คุณเปิดหรือปิดใช้ 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 ผ่านเราเตอร์เส้นขอบนี้ไม่ได้อีกต่อไป
จาก 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
คอมโพเนนต์ NAT64 ควรเริ่มทํางานหลังจากผ่านไปแล้ว 2-3 วินาที ดังนี้
$ 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. ขอแสดงความยินดี
ขอแสดงความยินดี คุณได้ตั้งค่าเราเตอร์เส้นขอบด้วยการรองรับ NAT64 เรียบร้อยแล้ว และใช้เราเตอร์ดังกล่าวเข้าถึงอินเทอร์เน็ตของ End Screen ได้
อ่านเพิ่มเติม
- คําแนะนําเกี่ยวกับ OpenThread
- ข้อมูลอ้างอิง CLI เกี่ยวกับ OpenThread
- เอกสารอ้างอิง OpenThread API สําหรับ NAT64