1. ข้อมูลเบื้องต้น
ชุดข้อความคืออะไร
เทรดคือโปรโตคอลเครือข่ายที่ทํางานร่วมกันแบบไร้สายและมี IP เป็น IP ที่ทําให้การสื่อสารระหว่างอุปกรณ์กับอุปกรณ์กับระบบคลาวด์ปลอดภัย เครือข่ายเธรดสามารถปรับให้เข้ากับการเปลี่ยนแปลงโทโพโลยีเพื่อหลีกเลี่ยงความล้มเหลวจากจุดเดียว
OpenThread คืออะไร
OpenThread ที่เผยแพร่โดย Google เป็นการใช้งาน Thread® แบบโอเพนซอร์ส
เราเตอร์ชายแดน OpenThread คืออะไร
เราเตอร์ Thread Border (OTBR) ที่ Google ออกให้นั้นเป็นการใช้งาน Thread Border Router แบบโอเพนซอร์ส
NAT64
NAT64 เป็นกลไกที่ทําให้โฮสต์ในเครือข่ายที่ใช้ IPv6 เท่านั้นเข้าถึงทรัพยากรในเครือข่าย IPv4 ได้ เกตเวย์ NAT64 คือเครื่องมือแปลระหว่างโปรโตคอล IPv4 กับโปรโตคอล IPv6
นักแปล NAT64 ซึ่งเป็นส่วนหนึ่งของเราเตอร์ OpenThread Border สนับสนุนการแปลโปรโตคอล TCP, UDP และ ICMP (ICMPv6)
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะต้องตั้งค่าเราเตอร์ OpenThread Border และอุปกรณ์เทรด จากนั้นเปิดใช้งานและยืนยันการสื่อสารระหว่างอุปกรณ์เทรดและโฮสต์ IPv4 บนอินเทอร์เน็ตผ่านเราเตอร์ OpenThread Border Router
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างเราเตอร์ Border Router ที่มีฟีเจอร์ NAT64
- วิธีสื่อสารกับโฮสต์ IPv4 จากอุปกรณ์สิ้นสุดเทรด
สิ่งที่ต้องมี
- เวิร์กสเตชัน Linux สําหรับการสร้างและกะพริบ NCP, OpenThread CLI และการทดสอบการเชื่อมต่อ IPv4
- Raspberry Pi 4 พร้อม RAM 4 GB สําหรับเราเตอร์ Thread เวิร์กสเตชัน Linux ควรสามารถเข้าถึงได้ผ่าน IPv4 จากอุปกรณ์นี้
- บอร์ด Nordic เซมิคอนดักเตอร์ nRF52840 DK 2 ตัว
โทโพโลยีเครือข่ายสําหรับ Codelab นี้
2. ตั้งค่าเราเตอร์เส้นขอบ OpenThread
ทําตามขั้นตอนตั้งค่า OTBR ของ Thread Border Router - 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 ของ Thread Border Router - การเชื่อมต่อ IPv6 แบบ 2 ทิศทางและ DNS Service Discovery ตามที่เขียนไว้ หลังจากสร้างเครือข่ายเทรด คุณตรวจสอบได้ว่าเราเตอร์เส้นขอบเผยแพร่คํานําหน้า NAT64 ด้วยคําสั่ง OpenThread CLI
ขั้นตอนแรก โปรดตรวจสอบให้แน่ใจว่าเราเตอร์ Border ของเรากําลังทํางานอยู่ และ 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 เพื่อสร้างและแฟลชอุปกรณ์ nRF52840 CLI ที่มีการเปลี่ยนแปลงขั้นตอนต่อไปนี้
ในบิวด์และ 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
ดําเนินการต่อด้วยสร้างเครือข่ายเทรดด้วยบอร์ด nRF52840 และโค้ดแล็บ OpenThread ตามที่เขียนไว้ หลังจากที่อุปกรณ์ปิดท้ายกะพริบด้วยรูปภาพ CLI ให้ทําตามเราเตอร์ Border Border - IPv6 Connectivity และ DNS-Service Service Discovery เพื่อตั้งค่าอุปกรณ์ Thread
รอ 2-3 วินาทีหลังจากตั้งค่าอุปกรณ์สิ้นสุดของชุดข้อความ และตรวจสอบว่าการเข้าร่วมเครือข่ายของชุดข้อความนั้นสําเร็จหรือไม่ คุณควรพบคํานําหน้า 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 ของอุปกรณ์เทรด
เรียกใช้คําสั่งนี้บน 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 และส่งข้อความไปยังโฮสต์ Linux IPv4 ของคุณ
> 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
และเอาต์พุตอุปกรณ์เทรดของคุณ:
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
และเอาต์พุตอุปกรณ์เทรดของคุณ:
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 ผ่านเราเตอร์เส้นขอบนี้ไม่ได้อีกต่อไป
จาก 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 ควรเริ่มทํางานได้
$ 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 บนเราเตอร์เส้นขอบ 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 แล้ว ดังนี้
> 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
ในตัวอย่างด้านบน) ควรเป็นที่อยู่ใดที่อยู่หนึ่งของเราเตอร์เส้นขอบ 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. ขอแสดงความยินดี
ขอแสดงความยินดี คุณได้ตั้งค่าเราเตอร์เส้นขอบกับทีมสนับสนุนของ NAT64 เรียบร้อยแล้ว และได้ใช้เราเตอร์ดังกล่าวเพื่อเข้าถึงอินเทอร์เน็ตใน Thread ได้
อ่านเพิ่มเติม
- คู่มือ OpenThread
- ข้อมูลอ้างอิง COP ของ OpenThread
- ข้อมูลอ้างอิง OpenThread API สําหรับ NAT64
- เอกสารอ้างอิง OpenThread API สําหรับอัปสตรีม DNS
- กระบวนการของแพลตฟอร์ม OpenThread สําหรับ DNS