1. Pengantar
Apa itu 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 penerapan open source Thread®.
Apa itu Router Thread OpenThread?
OpenThread Border Router (OTBR) yang dirilis oleh Google merupakan 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 Router Thread OpenThread, mendukung penerjemahan protokol TCP, UDP, dan ICMP (ICMPv6).
Yang akan Anda bangun
Dalam codelab ini, Anda akan menyiapkan Open Border Router 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 membuat Router Border OpenThread dengan fitur NAT64.
- Cara berkomunikasi dengan host IPv4 dari perangkat akhir Thread.
Yang Anda butuhkan
- Workstation Linux, untuk mem-build dan mem-flash Thread NCP, OpenThread CLI, serta menguji konektivitas IPv4.
- Raspberry Pi 4 dengan RAM 4 GB untuk router pembatas Thread. Workstation Linux Anda harus dapat dijangkau melalui IPv4 dari perangkat ini.
- 2 papan Nordic Semiconductor nRF52840 DK.
Topologi jaringan untuk codelab ini:
2. Menyiapkan Router Border OpenThread
Ikuti langkah Penyiapan OTBR Thread Border Router - Konektivitas IPv6 Bidirectional dan Penemuan Layanan Berbasis DNS untuk mem-build router pembatas OpenThread, dengan perubahan berikut:
Pada Build and install OTBR, Anda perlu memberi tahu skrip untuk mengaktifkan penerjemah NAT64 di OpenThread dengan menetapkan variabel lingkungan NAT64
ke 1
dan NAT64_SERVICE
ke openthread
. Jalankan perintah berikut sebelum langkah:
$ export NAT64=1 NAT64_SERVICE=openthread
Lanjutkan dengan codelab Thread Border Router - Konektivitas Dua Arah IPv6 dan DNS-Based Service Discovery seperti yang ditulis. Setelah Membentuk jaringan Thread, Anda dapat memverifikasi bahwa router pembatas memublikasikan awalan NAT64 dengan perintah OpenThread CLI.
Pertama-tama, pastikan router pembatas berjalan, dan NAT64 diaktifkan di router batas:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
Kita akan dapat melihat bahwa OTBR bertindak sebagai pemimpin Thread dan ada awalan NAT64 (dalam kasus kita) fd4c:9574:3720:2:0:0::/96
di Data Jaringan Thread:
$ 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
Awalan NAT64 akan digunakan oleh perangkat Thread saat berkomunikasi dengan host IPv4.
3. Siapkan perangkat akhir Thread
Ikuti Menyiapkan langkah FTD dari jaringan Build a Thread dengan board nRF52840 dan codelab OpenThread untuk membuat dan mem-flash perangkat akhir CLI nRF52840, dengan perubahan pada langkah berikut:
Di bagian Build and 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_JOINER=ON -DOT_COMMISSIONER=ON -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 gambar CLI, ikuti Thread Border Router - Dua Arah IPv6 Connectivity dan DNS-Based Service Discovery untuk menyiapkan perangkat akhir Thread.
Tunggu beberapa detik setelah menyiapkan perangkat akhir Thread dan pastikan bahwa berhasil bergabung dengan jaringan Thread. Anda akan dapat menemukan awalan NAT64 dari data jaringan (fd4c:9574:3720:2:0:0::/96
dalam kasus kita):
> 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
Pastikan data jaringan cocok dengan data dari OTBR.
4. Berkomunikasi dengan host IPv4 dari perangkat akhir Thread
Kini Anda dapat berkomunikasi dengan host di jaringan IPv4 dari perangkat akhir yang baru saja kami siapkan.
Mengirim permintaan echo ICMP ke host IPv4
Dari CLI di perangkat akhir Thread kami:
> 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
Router batas membuat item pemetaan NAT64 untuk perangkat ini dengan perintah 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
harus berupa alamat IPv6 perangkat Thread Anda.
Jalankan perintah ini di router pembatas kapan saja untuk melihat cara traffic dihitung.
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: fd4c:9574:3720:2:0:0:808:808 DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
Berkomunikasi melalui TCP
Anda dapat membuat koneksi TCP antara perangkat akhir dan host di jaringan IPv4.
Asumsikan alamat IP host IPv4 Linux Anda adalah 192.168.0.2
.
Pada host IPv4 Linux, gunakan nc
untuk memproses koneksi TCP:
$ nc -l 0.0.0.0 12345
Dari perangkat akhir Thread Anda, 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: fd4c:9574:3720: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. Ketikkan "world" dan tekan Enter pada host IPv4 Linux yang menjalankan nc
, dan output perangkat akhir Thread Anda:
TCP: Received 6 bytes: world
Berkomunikasi melalui UDP
Anda dapat berkomunikasi menggunakan UDP antara perangkat Thread dan host di jaringan IPv4.
Asumsikan 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 Anda, buat koneksi UDP dan kirim pesan ke host 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
Output host IPv4 Linux Anda:
hello
Anda juga dapat mengirim pesan dari host IPv4 Linux ke perangkat akhir Thread. Ketikkan "world" dan tekan Enter pada host IPv4 Linux yang menjalankan nc
, dan output perangkat akhir Thread Anda:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. Tombol NAT64 di Border Router
Anda dapat mengaktifkan atau menonaktifkan NAT64 kapan saja. Gunakan nat64 disable
untuk menonaktifkan NAT64. Dan gunakan nat64 state
untuk memeriksa status NAT64.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
Setelah dinonaktifkan, perangkat tidak lagi memublikasikan awalan 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
Selain itu, perangkat di jaringan Thread tidak dapat lagi mengakses host IPv4 melalui router perbatasan ini.
Dari CLI di perangkat akhir Thread kami:
> 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:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
Setelah beberapa detik, komponen NAT64 akan aktif dan berjalan:
$ 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
Perhatikan bahwa menonaktifkan NAT64 akan menghapus tabel pemetaan:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ Done
6. Meneruskan kueri DNS ke server DNS upstream
Jika NAT64 diaktifkan di router perbatasan, OpenThread akan mencoba meneruskan kueri DNS untuk domain internet ke server DNS upstream.
Fungsi ini didukung oleh Server DNS-SD internal, sehingga Anda perlu memastikan server DNS-SD diaktifkan.
$ sudo ot-ctl srp server state running Done
Jika bukan running
, aktifkan:
$ sudo ot-ctl srp server enable Done
Pastikan proxy DNS upstream diaktifkan:
$ sudo ot-ctl dns server upstream Enabled Done
Jika bukan Enabled
, aktifkan:
$ sudo ot-ctl dns server upstream enable Done
Di perangkat akhir, pastikan klien SRP diaktifkan sehingga akan mengirimkan kueri DNS ke router batas:
> srp client state Enabled Done
Jika bukan Enabled
, aktifkan:
> srp client autostart enable Done
Di perangkat akhir Anda, pastikan server DNS default adalah router pembatas:
> dns config Server: [fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes Done
Alamat IPv6 server (fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf
pada contoh di atas), harus merupakan salah satu alamat Router Thread OpenThread Anda.
Sekarang Anda dapat mengirim kueri DNS untuk domain internet dari perangkat akhir:
> 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. Selamat
Selamat, Anda telah berhasil menyiapkan router pembatas dengan dukungan NAT64 dan menggunakannya untuk menyediakan akses internet ke perangkat akhir Thread!
Bacaan lebih lanjut
- Panduan OpenThread
- Referensi CLI OpenThread
- Referensi OpenThread API untuk NAT64
- Referensi OpenThread API untuk DNS upstream
- abstraksi platform OpenThread untuk DNS