เราเตอร์ Thread Border - ให้การเข้าถึงอินเทอร์เน็ตผ่าน NAT64

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

1. บทนำ

7299534792dd9439.png

ชุดข้อความคืออะไร

เทรดเป็นโปรโตคอลเครือข่ายที่ทํางานร่วมกันแบบไร้สายแบบ 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 นี้

c3cd2e081bc052fd.png

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&quot แล้วกด 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&quot แล้วกด 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 ได้

อ่านเพิ่มเติม

เอกสารอ้างอิง