Router Pembatas Thread - Menyediakan akses Internet melalui NAT64

Tentang codelab ini
schedule23 menit
subjectTerakhir diperbarui 5 Mei 2025
account_circleDitulis oleh Song Guo, Jonathan Hui

1. Pengantar

7299534792dd9439.png

Apa yang dimaksud dengan Thread?

Thread adalah protokol jaringan mesh nirkabel berdaya rendah berbasis IP yang memungkinkan komunikasi perangkat ke perangkat dan perangkat ke cloud yang aman. Jaringan thread dapat beradaptasi dengan perubahan topologi untuk menghindari kegagalan titik tunggal.

Apa itu OpenThread?

OpenThread yang dirilis oleh Google adalah implementasi open source Thread®.

Apa yang dimaksud dengan Router Pembatas OpenThread?

OpenThread Border Router (OTBR) yang dirilis oleh Google adalah implementasi open source dari Thread Border Router.

NAT64

NAT64 adalah mekanisme yang memungkinkan host di jaringan khusus IPv6 mengakses resource di jaringan IPv4. Gateway NAT64 adalah penerjemah antara protokol IPv4 dan protokol IPv6.

Penerjemah NAT64, sebagai bagian dari OpenThread Border Router, mendukung penerjemahan protokol TCP, UDP, dan ICMP (ICMPv6).

Yang akan Anda build

Dalam codelab ini, Anda akan menyiapkan OpenThread Border Router (OTBR) dan perangkat Thread, lalu mengaktifkan dan memverifikasi komunikasi antara perangkat Thread dan host IPv4 di Internet melalui OpenThread Border Router.

Yang akan Anda pelajari

  • Cara mem-build OpenThread Border Router dengan fitur NAT64.
  • Cara berkomunikasi dengan host IPv4 dari perangkat akhir Thread.

Yang Anda butuhkan

  • Workstation Linux, untuk mem-build dan mem-flash Thread RCP, OpenThread CLI, dan menguji konektivitas IPv4.
  • Raspberry Pi untuk router pembatas Thread. Workstation Linux Anda harus dapat dijangkau melalui IPv4 dari perangkat ini.
  • 2 Dongle USB nRF52840 Nordic Semiconductor (satu untuk RCP dan satu untuk perangkat akhir Thread).

Topologi jaringan untuk codelab ini:

c3cd2e081bc052fd.png

2. Menyiapkan Router Pembatas OpenThread

Cara tercepat untuk menyiapkan OTBR adalah dengan mengikuti Panduan Penyiapan OTBR.

Setelah penyiapan OTBR selesai, gunakan ot-ctl untuk memvalidasi bahwa layanan NAT64 diaktifkan di router pembatas:

> nat64 state
PrefixManager: Active
Translator: Active
Done

Router pembatas Thread memublikasikan awalan NAT64 di Data Jaringan Thread:

> netdata show
Prefixes:
fd16:a3d:e170:1::/64 paros low f800
Routes:
::/0 s med f800
fd16:a3d:e170:2:0:0::/96 sn low f800
Services:
44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0
Contexts:
fd16:a3d:e170:1::/64 1 sc
Commissioning:
60365 - - -
Done

Awalan NAT64 muncul sebagai entri rute dengan tanda n. Pada contoh di atas, fd16:a3d:e170:2:0:0::/96 adalah awalan NAT64.

Awalan NAT64 akan digunakan oleh perangkat Thread saat berkomunikasi dengan host IPv4.

3. Menyiapkan perangkat ujung Thread

Ikuti langkah Menyiapkan FTD dari codelab Membuat jaringan Thread dengan board nRF52840 dan OpenThread untuk mem-build dan mem-flash perangkat akhir CLI nRF52840, dengan perubahan pada langkah berikut:

Di Build dan flash, Anda harus menambahkan -DOT_DNS_CLIENT=ON, -DOT_SRP_CLIENT=ON, dan -DOT_ECDSA=ON ke command line saat memanggil script/build:

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

Lanjutkan dengan Mem-build jaringan Thread dengan board nRF52840 dan codelab OpenThread seperti yang ditulis. Setelah perangkat akhir di-flash dengan image CLI, ikuti Bergabung ke node kedua ke jaringan Thread untuk menambahkan perangkat Thread ke jaringan Thread.

Tunggu beberapa detik setelah menyiapkan perangkat akhir Thread dan verifikasi apakah bergabung ke jaringan Thread berhasil. Seperti di atas, Anda dapat melihat awalan NAT64 yang dipublikasikan di Data Jaringan Thread.

> netdata show
Prefixes:
fd16:a3d:e170:1::/64 paros low f800
Routes:
::/0 s med f800
fd16:a3d:e170:2:0:0::/96 sn low f800
Services:
44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0
Contexts:
fd16:a3d:e170:1::/64 1 sc
Commissioning:
60365 - - -
Done

Pastikan data jaringan cocok dengan data dari OTBR.

4. Berkomunikasi dengan host IPv4 dari perangkat ujung Thread

Sekarang Anda dapat berkomunikasi dengan host di jaringan IPv4 dari perangkat akhir yang baru saja kita siapkan.

Mengirim permintaan echo ICMP ke host IPv4

Dari CLI perangkat akhir Thread:

> ping 8.8.8.8
Pinging synthesized IPv6 address: fd16:a3d:e170:2:0:0:808:808
16 bytes from fd16:a3d:e170:2:0:0:808:808: icmp_seq=1 hlim=109 time=28ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 28/28.0/28 ms.
Done

Router pembatas membuat item pemetaan NAT64 untuk perangkat ini dengan perintah nat64 mappings:

> nat64 mappings
|                  | Address                                                     | Ports or ICMP Ids |        | 4 to 6                  | 6 to 4                  |
+------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+
| ID               | IPv6                                     | IPv4             | v6      | v4      | Expiry | Pkts     | Bytes        | Pkts     | Bytes        |
+------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+
| 90b156e3cf609a23 |      fd16:a3d:e170:1:492d:bcdb:9f72:6297 |  192.168.255.254 |   N/A   |   N/A   |  7162s |        1 |           16 |        1 |           16 |
|                  |                                                                                      TCP |        0 |            0 |        0 |            0 |
|                  |                                                                                      UDP |        0 |            0 |        0 |            0 |
|                  |                                                                                     ICMP |        1 |           16 |        1 |           16 |
Done

fd16:a3d:e170:1:492d:bcdb:9f72:6297 harus berupa alamat IPv6 perangkat Thread Anda.

Jalankan perintah ini di router pembatas kapan saja untuk melihat cara menghitung traffic.

Mengirim kueri DNS ke server DNS IPv4

Gunakan dns resolve4 untuk me-resolve nama host di jaringan IPv4. Alamat server DNS juga dapat berupa alamat IPv4:

> dns resolve4 example.com 8.8.8.8
Synthesized IPv6 DNS server address: fd16:a3d:e170:2:0:0:808:808
DNS response for example.com. - fd16:a3d:e170:2:0:0:17c0:e454 TTL:295 fd16:a3d:e170:2:0:0:17d7:88 TTL:295 fd16:a3d:e170:2:0:0:17d7:8a TTL:295 fd16:a3d:e170:2:0:0:6007:80af TTL:295 fd16:a3d:e170:2:0:0:6007:80c6 TTL:295 fd16:a3d:e170:2:0:0:17c0:e450 TTL:295 
Done

Berkomunikasi melalui TCP

Anda dapat membuat koneksi TCP antara perangkat akhir dan host di jaringan IPv4.

Anggap alamat IP host IPv4 Linux Anda adalah 192.168.0.2.

Di host IPv4 Linux, gunakan nc untuk memproses koneksi TCP:

$ nc -l 0.0.0.0 12345

Dari perangkat akhir Thread, buat koneksi TCP dan kirim pesan ke host IPv4 Linux:

> tcp init
Done
> tcp connect 192.168.0.2 12345
Connecting to synthesized IPv6 address: fd16:a3d:e170:2:0:0:c0a8:2
Done
> tcp send hello

Output host IPv4 Linux Anda:

hello

Anda juga dapat mengirim pesan dari host IPv4 Linux ke perangkat akhir Thread. Ketik "world" dan tekan Enter di host IPv4 Linux yang menjalankan nc, dan output perangkat akhir Thread Anda:

TCP: Received 6 bytes: world

Berkomunikasi melalui UDP

Komunikasi menggunakan UDP dapat dilakukan antara perangkat Thread dan host di jaringan IPv4.

Anggap alamat IP host IPv4 Linux Anda adalah 192.168.0.2.

Gunakan nc untuk memproses koneksi UDP:

$ nc -u -l 0.0.0.0 12345

Dari perangkat akhir Thread, buat koneksi UDP dan kirim pesan ke host IPv4 Linux Anda:

> udp open
Done
> udp connect 192.168.0.2 12345
Connecting to synthesized IPv6 address: fd16:a3d:e170:2:0:0:c0a8:2
Done
> udp send hello
Done

Output host IPv4 Linux Anda:

hello

Anda juga dapat mengirim pesan dari host IPv4 Linux ke perangkat akhir Thread. Ketik "world" dan tekan Enter di host IPv4 Linux yang menjalankan nc, dan output perangkat akhir Thread Anda:

6 bytes from fd16:a3d:e170:2:0:0:c0a8:2 12345 world

5. Mengaktifkan/menonaktifkan NAT64 di Router Pembatas

Anda dapat mengaktifkan atau menonaktifkan NAT64 kapan saja. Gunakan nat64 disable untuk menonaktifkan NAT64. Dan gunakan nat64 state untuk memeriksa status NAT64.

> nat64 disable
Done
> nat64 state
PrefixManager: Disabled
Translator: Disabled
Done

Setelah dinonaktifkan, perangkat tidak lagi memublikasikan awalan NAT64:

> netdata show
Prefixes:
fd16:a3d:e170:1::/64 paros low f800
Routes:
::/0 s med f800
Services:
44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0
Contexts:
fd16:a3d:e170:1::/64 1 sc
Commissioning:
60365 - - -
Done

Selain itu, perangkat di jaringan Thread tidak dapat lagi mengakses host IPv4 melalui router pembatas ini.

Dari CLI perangkat akhir Thread:

> ping 8.8.8.8
Error 13: InvalidState

Gunakan nat64 enable untuk mengaktifkan NAT64. Mungkin perlu waktu beberapa saat sebelum pengelola awalan mulai mengiklankan awalan NAT64:

> nat64 enable
Done
> nat64 state
PrefixManager: Idle
Translator: NotWorking
Done

Setelah beberapa detik, komponen NAT64 akan aktif dan berjalan:

> nat64 state
PrefixManager: Active
Translator: Active
Done
> netdata show
Prefixes:
fd16:a3d:e170:1::/64 paros low f800
Routes:
::/0 s med f800
fd16:a3d:e170:2:0:0::/96 sn low f800
Services:
44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0
Contexts:
fd16:a3d:e170:1::/64 1 sc
Commissioning:
60365 - - -
Done

Perhatikan bahwa menonaktifkan NAT64 akan menghapus tabel pemetaan:

> nat64 mappings
|                  | Address                                                     | Ports or ICMP Ids |        | 4 to 6                  | 6 to 4                  |
+------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+
| ID               | IPv6                                     | IPv4             | v6      | v4      | Expiry | Pkts     | Bytes        | Pkts     | Bytes        |
+------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+
Done

6. Meneruskan kueri DNS ke server DNS upstream

Jika NAT64 diaktifkan di router pembatas, OpenThread akan mencoba meneruskan kueri DNS untuk domain internet ke server DNS upstream.

Di perangkat akhir, pastikan server DNS default adalah router pembatas:

> dns config
Server: [fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d]:53
ResponseTimeout: 6000 ms
MaxTxAttempts: 3
RecursionDesired: yes
ServiceMode: srv_txt_opt
Nat64Mode: allow
Done

Alamat IPv6 server (fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d dalam contoh di atas), harus merupakan salah satu alamat OpenThread Border Router Anda.

Sekarang Anda dapat mengirim kueri DNS untuk domain internet dari perangkat akhir:

> dns resolve example.com
DNS response for example.com. - 2600:1406:3a00:21:0:0:173e:2e65 TTL:161 2600:1406:3a00:21:0:0:173e:2e66 TTL:161 2600:1406:bc00:53:0:0:b81e:94c8 TTL:161 2600:1406:bc00:53:0:0:b81e:94ce TTL:161 2600:1408:ec00:36:0:0:1736:7f24 TTL:161 2600:1408:ec00:36:0:0:1736:7f31 TTL:161 
Done
> dns resolve4 example.com
DNS response for example.com. - fd16:a3d:e170:2:0:0:6007:80af TTL:300 fd16:a3d:e170:2:0:0:6007:80c6 TTL:300 fd16:a3d:e170:2:0:0:17c0:e450 TTL:300 fd16:a3d:e170:2:0:0:17c0:e454 TTL:300 fd16:a3d:e170:2:0:0:17d7:88 TTL:300 fd16:a3d:e170:2:0:0:17d7:8a TTL:300 
Done

7. Selamat

Selamat, Anda telah berhasil menyiapkan router pembatas dengan dukungan NAT64 dan menggunakannya untuk memberikan akses internet ke perangkat akhir Thread.

Bacaan lebih lanjut

Dokumen referensi