Router Pembatas Thread - Menyediakan akses Internet melalui NAT64

1. Pengantar

7299534792dd9439.png

Apa itu Thread?

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

Apa itu OpenThread?

OpenThread yang dirilis oleh Google merupakan implementasi open source dari Thread®.

Apa itu Router Pembatas OpenThread?

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

NAT64

NAT64 adalah mekanisme yang memungkinkan {i>host <i}di jaringan IPv6-saja untuk mengakses sumber daya 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 Router Pembatas OpenThread dan perangkat Thread, lalu mengaktifkan dan memverifikasi komunikasi antara perangkat Thread dan host IPv4 di internet melalui Router Pembatas OpenThread.

Yang akan Anda pelajari

  • Cara membangun Router Perbatasan OpenThread dengan fitur NAT64.
  • Cara berkomunikasi dengan host IPv4 dari perangkat akhir Thread.

Yang Anda butuhkan

  • Workstation Linux, untuk membangun dan melakukan flash Thread NCP, OpenThread CLI, dan menguji konektivitas IPv4.
  • Raspberry Pi 4 dengan RAM 4GB 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:

c3cd2e081bc052fd.png

2. Menyiapkan Router Pembatas OpenThread

Ikuti langkah Penyiapan OTBR dari codelab Thread Border Router - Bidirectional IPv6 Connectivity and DNS-Based Service Discovery untuk membangun router pembatas OpenThread, dengan perubahan berikut:

Di Membangun dan menginstal OTBR, Anda harus memberi tahu skrip untuk mengaktifkan penerjemah NAT64 di OpenThread dengan menyetel variabel lingkungan NAT64 ke 1 dan NAT64_SERVICE ke openthread. Jalankan perintah berikut sebelum langkah:

$ export NAT64=1 NAT64_SERVICE=openthread

Lanjutkan dengan codelab Router Pembatas Thread - Konektivitas IPv6 Dua Arah dan Penemuan Layanan Berbasis DNS seperti yang ditulis. Setelah Membentuk jaringan Thread, Anda dapat memverifikasi bahwa router pembatas memublikasikan awalan NAT64 dengan perintah CLI OpenThread.

Pertama, pastikan router pembatas kita aktif dan berjalan, dan NAT64 diaktifkan di router pembatas:

$ 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. Menyiapkan perangkat akhir Thread

Ikuti Menyiapkan langkah FTD dari jaringan Build a Thread dengan board nRF52840 dan codelab OpenThread untuk membuat dan melakukan flash perangkat akhir CLI nRF52840, dengan perubahan pada langkah berikut:

Dalam 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_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

Lanjutkan dengan Membangun jaringan Thread dengan board nRF52840 dan codelab OpenThread seperti yang ditulis. Setelah perangkat akhir di-flash dengan image CLI, ikuti Thread Border Router - Bidirectional IPv6 Connectivity and DNS-Based Service Discovery untuk menyiapkan perangkat akhir Thread.

Tunggu beberapa detik setelah menyiapkan perangkat akhir Thread dan periksa apakah bergabung ke jaringan Thread berhasil. Anda akan dapat menemukan awalan NAT64 dari data jaringan (dalam kasus kita, 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

Pastikan data jaringan cocok dengan data dari OTBR.

4. Berkomunikasi dengan host IPv4 dari perangkat akhir Thread

Anda kini 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: 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 pembatas 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 perintah ini 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: 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 {i>host<i} di jaringan IPv4.

Asumsikan 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: 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. Ketik "world" (dunia) lalu tekan Enter di host IPv4 Linux yang menjalankan nc, dan output perangkat akhir Thread:

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, 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: 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. Ketik "world" (dunia) lalu tekan Enter di host IPv4 Linux yang menjalankan nc, dan output perangkat akhir Thread:

6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world

5. Mengaktifkan/menonaktifkan NAT64 di Router Batas

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 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:

$ sudo ot-ctl nat64 enable
Done
$ sudo ot-ctl nat64 state
PrefixManager: Idle
Translator: NotWorking
Done

Setelah beberapa detik, komponen NAT64 seharusnya sudah 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

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

Fungsi ini didukung oleh Server DNS-SD internal, jadi Anda perlu memastikan server DNS-SD sudah aktif.

$ 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 mengirim kueri DNS ke router pembatas:

> 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 berupa salah satu alamat Router Pembatas 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

Dokumen referensi