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

1. ข้อมูลเบื้องต้น

7299534792dd9439.png

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

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

c3cd2e081bc052fd.png

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 ได้

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

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