1. Pengantar
Apa itu Router Pembatas 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 titik tunggal kegagalan.
Router Thread Border menghubungkan jaringan Thread ke jaringan berbasis IP lainnya, seperti Wi-Fi atau Ethernet. Jaringan Thread memerlukan Router Perbatasan untuk terhubung ke jaringan lain. Router Pembatas Thread mendukung fungsi berikut secara minimal:
- Konektivitas IP dua arah antara jaringan Thread dan Wi-Fi/Ethernet.
- Penemuan layanan dua arah melalui mDNS (di link Wi-Fi/Ethernet) dan SRP (di jaringan Thread).
- Thread-over-infrastructure yang menggabungkan partisi Thread melalui link berbasis IP.
- Pengaturan Thread Eksternal (misalnya, ponsel) untuk mengautentikasi dan menggabungkan perangkat Thread ke jaringan Thread.
OpenThread Border Router (OTBR) yang dirilis oleh Google merupakan implementasi open source dari Thread Border Router.
Yang akan Anda bangun
Dalam codelab ini, Anda akan menyiapkan Router Pembatas Thread dan menghubungkan ponsel Anda ke Perangkat Akhir Thread melalui Router Pembatas.
Yang akan Anda pelajari
- Cara menyiapkan OTBR
- Cara membentuk jaringan Thread dengan OTBR
- Cara membangun perangkat OpenThread CLI dengan fitur SRP
- Cara mendaftarkan layanan dengan SRP
- Cara menemukan dan menjangkau perangkat akhir Thread.
Yang Anda butuhkan
- Perangkat Raspberry Pi 3/4 dan kartu SD dengan kemampuan minimal 8 GB.
- 2 board developer nRF52840 Nordic Semiconductor.
- Wi-Fi AP tanpa IPv6 Router Broadcastment Guard yang diaktifkan di router.
- Ponsel iOS dengan setidaknya iOS 14 atau ponsel Android dengan setidaknya Android 8.1.
2. Siapkan OTBR
Menyiapkan Raspberry Pi
Mudah sekali menyiapkan perangkat Raspberry Pi baru menggunakan alat rpi-imager
dengan mengikuti petunjuk di raspberrypi.org (bukan menggunakan OS Raspberry Pi terbaru di alat ini, download 2021-05-07-raspios-buster-armhf-lite sendiri). Untuk menyelesaikan langkah-langkah ponsel dalam codelab ini, Anda harus menghubungkan Raspberry Pi ke Wi-Fi AP. Ikuti panduan ini untuk menyiapkan konektivitas nirkabel. Anda dapat login ke Raspberry Pi dengan SSH dengan mudah. Anda dapat menemukan petunjuknya di sini.
Dapatkan kode OTBR
Login ke Raspberry Pi dan clone ot-br-posix
dari GitHub:
$ git clone https://github.com/openthread/ot-br-posix.git --depth 1
Membangun dan menginstal OTBR
OTBR memiliki dua skrip yang melakukan bootstrap dan menyiapkan Router Pembatas Thread:
$ cd ot-br-posix $ ./script/bootstrap $ INFRA_IF_NAME=wlan0 ./script/setup
OTBR berfungsi di antarmuka Thread dan antarmuka jaringan infrastruktur (misalnya Wi-Fi/Ethernet) yang ditentukan dengan INFRA_IF_NAME
. Antarmuka Thread dibuat oleh OTBR itu sendiri dan diberi nama wpan0
secara default, dan antarmuka infrastruktur memiliki nilai default wlan0
jika INFRA_IF_NAME
tidak ditentukan secara eksplisit. Jika Raspberry Pi terhubung dengan kabel Ethernet, tentukan nama antarmuka Ethernet (misalnya, eth0
):
$ INFRA_IF_NAME=eth0 ./script/setup
Periksa apakah OTBR berhasil diinstal:
$ sudo service otbr-agent status ● otbr-agent.service - Border Router Agent Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Mon 2021-03-01 05:43:38 GMT; 2s ago Process: 2444 ExecStart=/usr/sbin/otbr-agent $OTBR_AGENT_OPTS (code=exited, status=2) Main PID: 2444 (code=exited, status=2)
Diharapkan layanan otbr-agent
tidak aktif karena memerlukan chip RCP
agar dapat berjalan.
Mulai ulang Raspberry Pi untuk menerapkan perubahan.
Membangun dan melakukan flash firmware RCP
OTBR mendukung chip radio 15,4 dalam mode Radio Co-Processor (RCP). Dalam mode ini, tumpukan OpenThread berjalan di sisi host dan mengirimkan/menerima bingkai melalui pengirim dan penerima sinyal IEEE802.15.4.
Ikuti langkah 4 Build a Thread network with nRF52840 board and OpenThread codelab untuk membangun dan mem-flash perangkat RCP nRF52840:
$ script/build nrf52840 USB_trans
Mulai OTBR dan verifikasi status
Hubungkan board nRF52840 ke Raspberry Pi Anda dan mulai layanan otbr-agent
:
$ sudo service otbr-agent restart
Pastikan bahwa layanan otbr-agent
aktif:
$ sudo service otbr-agent status ● otbr-agent.service - Border Router Agent Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-03-01 05:46:26 GMT; 2s ago Main PID: 2997 (otbr-agent) Tasks: 1 (limit: 4915) CGroup: /system.slice/otbr-agent.service └─2997 /usr/sbin/otbr-agent -I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM0 Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Stop publishing service Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [adproxy] Stopped Mar 01 05:46:26 raspberrypi otbr-agent[2997]: PSKc is not initialized Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Check if PSKc is initialized: OK Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Initialize OpenThread Border Router Agent: OK Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Border router agent started. Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-CORE----: Notifier: StateChanged (0x00038200) [NetData PanId NetName ExtPanId] Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-PLAT----: Host netif is down
3. Membentuk jaringan Thread
Ada perintah ot-ctl
yang dapat digunakan untuk mengontrol layanan otbr-agent
. ot-ctl
menerima semua perintah CLI OpenThread, lihat Panduan CLI OpenThread untuk mengetahui detail selengkapnya.
Membentuk jaringan Thread dengan OTBR:
$ sudo ot-ctl dataset init new Done $ sudo ot-ctl dataset commit active Done $ sudo ot-ctl ifconfig up Done $ sudo ot-ctl thread start Done
Tunggu beberapa detik, dan akan terlihat bahwa OTBR bertindak sebagai Thread leader
dan ada awalan off-mesh-routable
(OMR) di Data Jaringan Thread:
$ sudo ot-ctl state leader Done $ sudo ot-ctl netdata show Prefixes: Prefixes: fd76:a5d1:fcb0:1707::/64 paos med 4000 Routes: fd49:7770:7fc5:0::/64 s med 4000 Services: 44970 5d c000 s 4000 44970 01 9a04b000000e10 s 4000 Done $ sudo ot-ctl ipaddr fda8:5ce9:df1e:6620:0:ff:fe00:fc11 fda8:5ce9:df1e:6620:0:0:0:fc38 fda8:5ce9:df1e:6620:0:ff:fe00:fc10 fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9 fda8:5ce9:df1e:6620:0:ff:fe00:fc00 fda8:5ce9:df1e:6620:0:ff:fe00:4000 fda8:5ce9:df1e:6620:3593:acfc:10db:1a8d fe80:0:0:0:a6:301c:3e9f:2f5b Done
4. Menyiapkan Perangkat Akhir Klien SRP
Mem-build dan melakukan flash OT CLI
Ikuti langkah 5 Membuat jaringan Thread dengan board nRF52840 dan codelab OpenThread untuk membangun dan melakukan flash perangkat akhir CLI nRF52840.
Namun, node CLI memerlukan fitur OT_SRP_CLIENT
dan OT_ECDSA
, bukan mengaktifkan OT_COMMISSIONER
dan OT_JOINER
.
Jadi, pemanggilan build lengkap akan terlihat seperti ini:
$ script/build nrf52840 USB_trans -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
Bergabung dengan jaringan OTBR
Untuk bergabung dengan jaringan Thread yang dibuat oleh layanan otbr-agent
, kita perlu mendapatkan Set Data Operasional Aktif dari perangkat OTBR. Mari kembali ke command line otbr-agent
dan dapatkan set data aktif:
$ sudo ot-ctl dataset active -x 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
Kembali ke sesi layar node klien SRP dan atur {i>dataset<i} aktif:
> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
Kemudian, mulai antarmuka Thread:
> ifconfig up Done > thread start Done
Tunggu beberapa detik dan pastikan bahwa bergabung ke jaringan Thread berhasil:
> state child Done > netdata show Prefixes: fd76:a5d1:fcb0:1707::/64 paos med 4000 Routes: fd49:7770:7fc5:0::/64 s med 4000 Services: 44970 5d c000 s 4000 44970 01 9a04b000000e10 s 4000 Done > ipaddr fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 fda8:5ce9:df1e:6620:0:ff:fe00:4001 fda8:5ce9:df1e:6620:ed74:123:cc5d:74ba fe80:0:0:0:d4a9:39a0:abce:b02e Done
Pastikan data jaringan cocok dengan data yang tercetak di OTBR. Sekarang kita dapat melakukan ping ke alamat OMR OTBR:
> ping fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9 Done > 16 bytes from fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9: icmp_seq=1 hlim=64 time=49ms
5. Memublikasikan Layanan di Perangkat Akhir
mDNS telah digunakan secara luas untuk memublikasikan layanan DNS-SD pada link-local. Namun, pesan {i>multicast<i} mengonsumsi terlalu banyak {i>bandwidth<i} dan akan cepat kehabisan baterai untuk perangkat berdaya rendah. Thread menggunakan protokol SRP unicast untuk mendaftarkan layanannya dengan Router Perbatasan dan mengandalkan Router Batas untuk mengiklankan layanan di link Wi-Fi atau Ethernet.
Kita dapat mendaftarkan layanan dengan perintah srp client
.
Buka sesi layar node klien SRP dan mulai otomatis klien SRP:
> srp client autostart enable Done
Tetapkan nama host yang akan diiklankan di link Wi-Fi/Ethernet:
> srp client host name ot-host Done
Agar perangkat di link Wi-Fi/Ethernet dapat menjangkau perangkat akhir Thread, alamat OMR perangkat akhir harus diiklankan:
> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 Done
Terakhir, daftarkan layanan _ipps._tcp
palsu:
> srp client service add ot-service _ipps._tcp 12345 Done
Tunggu beberapa detik dan kita akan dapat melihat layanan tersebut terdaftar:
> srp client service instance:"ot-service", name:"_ipps._tcp", state:Registered, port:12345, priority:0, weight:0 Done
Kami telah menyelesaikan semua pekerjaan penyiapan dan layanan _ipps._tcp
seharusnya telah diiklankan di link Wi-Fi/Ethernet. Saatnya menemukan dan mencapai perangkat akhir sekarang!
6. Menemukan Layanan
Menemukan layanan dengan ponsel
Kami menggunakan Aplikasi Browser Layanan untuk menemukan layanan mDNS dengan ponsel Android, Aplikasi yang setara juga dapat ditemukan untuk perangkat seluler iOS. Buka Aplikasi dan layanan _ipps._tcp
akan muncul.
Menemukan layanan dengan host Linux
Jika ingin menemukan layanan dari host Linux lain, Anda dapat menggunakan perintah avahi-browse
.
Instal avahi-daemon
dan avahi-utils
:
$ sudo apt-get install -y avahi-daemon avahi-utils
Selesaikan layanan:
$ sudo service avahi-daemon start # Ensure the avahi daemon is started. $ avahi-browse -r _ipps._tcp + wlan0 IPv6 ot-service Secure Internet Printer local = wlan0 IPv6 ot-service Secure Internet Printer local hostname = [ot-host.local] address = [fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927] port = [12345] txt = [] ...
Menemukan layanan dengan host macOS
Anda dapat menggunakan dns-sd
di macOS untuk me-resolve layanan:
$ dns-sd -Z _ipps._tcp local. Browsing for _ipps._tcp.local. DATE: ---Sun 14 Mar 2021--- 21:31:42.125 ...STARTING... ; To direct clients to browse a different domain, substitute that domain in place of '@' lb._dns-sd._udp PTR @ ; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names. ; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local ; names with the correct fully-qualified (unicast) domain name of the target host offering the service. _ipps._tcp PTR ot-service._ipps._tcp ot-service._ipps._tcp SRV 0 0 12345 ot-host.local. ; Replace with unicast FQDN of target host ot-service._ipps._tcp TXT "" ...
7. Ping Perangkat Akhir
Ping dari ponsel
Ambil ponsel Pixel sebagai contoh, kita dapat mengetahui alamat OMR dari layanan yang sebelumnya terdaftar "ot-service" di halaman detail instance layanan di Aplikasi Browser Layanan.
Sekarang kita dapat melakukan ping ke alamat OMR dengan Aplikasi Network Analyzer lain.
Sayangnya, versi Android untuk Aplikasi Network Analyzer tidak mendukung kueri mDNS untuk utilitas ping dan kita tidak dapat melakukan ping ke nama host ot-host.local
secara langsung (kita dapat melakukan ping nama host dengan versi Aplikasi iOS).
Melakukan ping dari host Linux/macOS
Router Pembatas Thread mengirim Iklan Router ICMPv6 (RA) untuk memberitahukan awalan (melalui Opsi Informasi Awalan) dan rute (melalui Opsi Informasi Rute) pada link Wi-Fi/Ethernet.
Menyiapkan host Linux
Sebaiknya pastikan bahwa RA dan RIO diaktifkan di host Anda:
net.ipv6.conf.wlan0.accept_ra
minimal harus1
jika penerusan IP tidak diaktifkan, dan2
jika tidak.net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen
tidak boleh lebih kecil dari64
.
accept_ra
ditetapkan secara default ke 1
untuk sebagian besar distribusi. Namun, mungkin ada daemon jaringan lain yang akan mengganti opsi ini (misalnya, dhcpcd
di Raspberry Pi akan mengganti accept_ra
menjadi 0
). Anda dapat memeriksa nilai accept_ra
dengan:
$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra 0
Kemudian, tetapkan nilainya ke 1
(atau 2
jika penerusan IP diaktifkan) dengan:
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1 Net.ipv6.conf.wlan0.accept_ra = 1
Opsi accept_ra_rt_info_max_plen
di sebagian besar distribusi Linux ditetapkan secara default ke 0
, tetapkan ke 64
dengan:
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen=64 net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
Perubahan akan hilang setelah {i>booting<i} dimulai ulang. Misalnya, tambahkan perintah di bawah ini ke /etc/sysctl.conf
untuk mengaktifkan RIO secara permanen:
$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
Mungkin sudah terlambat untuk mengubah konfigurasi tersebut karena OTBR telah mengirim pesan RA dan interval antara dua pesan RA yang tidak diminta bisa mencapai beberapa ratus detik. Salah satu caranya adalah dengan memutuskan dan menghubungkan kembali ke Wi-Fi AP untuk mengirim pesan Permintaan Router sehingga OTBR akan merespons dengan RA yang diminta. Opsi lainnya adalah memulai ulang fungsi Border Routing pada Border Router:
$ sudo ot-ctl br disable Done $ sudo ot-ctl br enable Done
Jika Anda mencoba menghubungkan kembali Wi-Fi atau memulai ulang antarmuka Ethernet, pastikan dhcpcd tidak digunakan untuk mengelola jaringan Wi-Fi/Ethernet IPv6 Anda. Karena dhcpcd selalu mengganti opsi accept_ra
setiap kali antarmuka dimulai ulang dan konfigurasi accept_ra
Anda akan hilang. Tambahkan baris di bawah ke file konfigurasi dhcpcd (misalnya, /etc/dhcpcd.conf
) untuk menonaktifkan IPv6 secara eksplisit di dhcpcd:
noipv6 noipv6rs
Anda harus memulai ulang agar perubahan ini diterapkan.
Menyiapkan host macOS
Kedua opsi accept_ra*
diaktifkan secara default, tetapi Anda perlu mengupgrade sistem setidaknya ke macOS Big Sur.
Ping nama host atau alamat IPv6
Sekarang kita dapat melakukan ping ke nama host ot-host.local
dengan perintah ping -6
(ping6
untuk macOS):
$ ping -6 ot-host.local. PING ot-host.local.(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927)) 56 data bytes 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=1 ttl=63 time=170 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=2 ttl=63 time=64.2 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=3 ttl=63 time=22.8 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=4 ttl=63 time=37.7 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=5 ttl=63 time=28.7 ms ...
Perintah ini mungkin gagal di host Linux dengan error "Name or service not known"
. Hal ini karena perintah ping
tidak me-resolve nama ot-host.local.
dengan kueri mDNS. Buka /etc/nsswitch.conf
dan tambahkan mdns6_minimal
ke baris yang dimulai dengan hosts
:
hosts: files mdns4_minimal mdns6_minimal dns
Tentu saja, Anda selalu dapat melakukan ping ke alamat IPv6 secara langsung:
$ ping -6 fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 PING fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927) 56 data bytes 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=1 ttl=63 time=32.9 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=2 ttl=63 time=27.8 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=3 ttl=63 time=29.9 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=4 ttl=63 time=73.5 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=5 ttl=63 time=26.4 ms ...
8. Batalkan Publikasi Layanan di Perangkat Akhiri
Untuk menghapus alamat dan layanan yang terdaftar dari node klien SRP:
> srp client host remove Done
Anda tidak akan dapat menemukan layanan _ipps._tcp
sekarang.
9. Selamat
Selamat, Anda telah berhasil menyiapkan OTBR sebagai Router Pembatas Thread guna menyediakan konektivitas IP dua arah dan penemuan layanan untuk perangkat akhir Thread.
Apa selanjutnya?
Lihat beberapa codelab ini...