1. Giriş
İş Parçacığı Kenarlığı Yönlendirici nedir?
Thread, cihazlar arasında ve cihazlar arasında güvenli iletişim kurulmasına olanak tanıyan IP tabanlı, düşük güçlü bir kablosuz örgü ağ protokolüdür. Thread ağları, tek hata noktasını önlemek için topoloji değişikliklerine uyum sağlayabilir.
İş Parçacığı Sınır Yönlendiricisi, bir Thread ağını kablosuz veya Ethernet gibi IP tabanlı diğer ağlara bağlar. Thread ağı, diğer ağlara bağlanmak için Sınır Yönlendirici gerektirir. İş Parçacığı Kenarlığı Yönlendiricisi en az aşağıdaki işlevleri destekler:
- Thread ve kablosuz/Ethernet ağları arasında çift yönlü IP bağlantısı.
- mDNS (kablosuz/Ethernet bağlantısında) ve SRP (Thread ağında) üzerinden çift yönlü hizmet keşfi.
- İş parçacığı bölümlerini IP tabanlı bağlantılar üzerinden birleştiren iş parçacığı üzerinden altyapı.
- Thread cihazının kimliğini doğrulamak ve cihazı bir Thread ağına eklemek için harici Threading (ör. cep telefonu) kullanma.
Google tarafından yayınlanan OpenThread Sınır Yönlendirici (OTBR), Thread Kenarlık Yönlendirici'nin açık kaynaklı bir uygulamasıdır.
Oluşturacaklarınız
Bu codelab'de, İş Parçacığı Yönlendirici'yi kuracak ve cep telefonunuzu Sınır Yönlendirici yoluyla bir Thread End Device'a bağlayacaksınız.
Neler öğreneceksiniz?
- OTBR nasıl ayarlanır?
- OTBR ile Thread ağı oluşturma
- SRP özelliğiyle OpenThread CLI cihazı oluşturma
- SRP'ye hizmet kaydetme
- Thread bitiş cihazını bulma ve bu cihazlara erişme
Gerekenler
- Raspberry Pi 3/4 cihaz ve en az 8 GB özellikli bir SD kart.
- 2 Nordic Semiconctionor nRF52840 geliştirici kartı.
- Yönlendiricide IPv6 Yönlendirici Reklam Koruması'nın etkinleştirilmediği bir Wi-Fi AP.
- En az iOS 14 yüklü bir iOS telefon veya en az Android 8.1 yüklü Android telefon.
2. OTBR'yi kur
Raspberry Pi'yi kurun
raspberrypi.org adresindeki talimatları uygulayarak rpi-imager
aracıyla yeni bir Raspberry Pi cihazı kurmak kolaydır (araçtaki en son Raspberry Pi OS'yi kullanmak yerine 2021-05-07-raspios-buster-armhf-lite uygulamasını kendiniz indirebilirsiniz). Bu codelab'deki cep telefonu adımlarını tamamlamak için Raspberry Pi'yi kablosuz erişim noktasına bağlamanız gerekir. Kablosuz bağlantıyı kurmak için bu rehberi uygulayın. SSH ile Raspberry Pi'ye giriş yapmak kolaydır. Talimatları burada bulabilirsiniz.
OTBR kodunu al
Raspberry Pi'nıza giriş yapın ve GitHub'dan ot-br-posix
dosyasını klonlayın:
$ git clone https://github.com/openthread/ot-br-posix.git --depth 1
OTBR'yi oluşturma ve yükleme
OTBR, önyükleme yapan ve İş Parçacığı Kenarlığı Yönlendirici'yi ayarlayan iki komut dosyasına sahiptir:
$ cd ot-br-posix $ ./script/bootstrap $ INFRA_IF_NAME=wlan0 ./script/setup
OTBR, INFRA_IF_NAME
ile belirtilen hem Thread arayüzünde hem de altyapı ağ arayüzünde (ör. Wi-Fi/Ethernet) çalışır. Thread arayüzü, OTBR tarafından oluşturulur ve varsayılan olarak wpan0
olarak adlandırılır. INFRA_IF_NAME
açıkça belirtilmediği takdirde altyapı arayüzü varsayılan değeri olan wlan0
olur. Raspberry Pi'niz ethernet kablosuyla bağlandıysa Ethernet arayüz adını belirtin (ör. eth0
):
$ INFRA_IF_NAME=eth0 ./script/setup
OTBR'nin başarıyla yüklenip yüklenmediğini kontrol edin:
$ 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)
Çalışması için RCP
çipi gerektiğinden otbr-agent
hizmetinin etkin olmaması beklenir.
Değişikliklerin geçerli olması için Raspberry Pi'yi yeniden başlatın.
RCP donanım yazılımı geliştirme ve güncelleme
OTBR, Radyo Ortak İşlemci (RCP) modunda 15,4 radyo çipini destekler. Bu modda, OpenThread yığını ana makine tarafında çalışır ve kareleri IEEE802.15.4 alıcı-verici üzerinden iletir/alır.
Bir nRF52840 RCP cihazı derlemek ve yüklemek için nRF52840 anakartları ve OpenThread ile Thread ağı oluşturma codelab'i ile ilgili 4. adımı uygulayın:
$ script/build nrf52840 USB_trans
OTBR'yi başlatın ve durumu doğrulayın
nRF52840 kartını Raspberry Pi'nıza bağlayıp otbr-agent
hizmetini başlatın:
$ sudo service otbr-agent restart
otbr-agent
hizmetinin etkin olduğunu doğrulayın:
$ 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. Thread ağı oluşturma
otbr-agent
hizmetini kontrol etmek için kullanılabilecek bir ot-ctl
komutu bulunur. ot-ctl
tüm OpenThread CLI komutlarını kabul eder. Ayrıntılı bilgi için OpenThread CLI Guide (OpenThread CLI Kılavuzu) bölümüne bakın.
OTBR ile bir Thread ağı oluşturun:
$ 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
Birkaç saniye bekleyin. OTBR'nin bir İş Parçacığı leader
olarak çalıştığını ve Thread Ağ Verilerinde off-mesh-routable
(OMR) öneki olduğunu görebiliriz:
$ 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. SRP İstemci Son Cihazını Kurma
OT KSA'yı oluşturma ve güncelleme
Bir nRF52840 CLI son cihazı derlemek ve yüklemek için nRF52840 anakartları ve OpenThread ile Thread ağı oluşturma codelab'i ile ilgili 5. adımı uygulayın.
Ancak CLI düğümü, OT_COMMISSIONER
ve OT_JOINER
özelliklerini etkinleştirmek yerine OT_SRP_CLIENT
ve OT_ECDSA
özelliklerini gerektirir.
Dolayısıyla, tam derleme çağrısı şu şekilde görünmelidir:
$ script/build nrf52840 USB_trans -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
OTBR ağına katılın
otbr-agent
hizmeti tarafından oluşturulan Thread ağına katılmak için OTBR cihazından Etkin Operasyonel Veri Kümesi almamız gerekir. otbr-agent
komut satırına geri dönüp etkin veri kümesini elde edelim:
$ sudo ot-ctl dataset active -x 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
SRP istemci düğüm ekranı oturumuna dönün ve etkin veri kümesini ayarlayın:
> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
Ardından, Thread arayüzünü başlatın:
> ifconfig up Done > thread start Done
Birkaç saniye bekleyin ve Thread ağına katılma işleminin başarılı olup olmadığını doğrulayın:
> 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
Ağ verilerinin OTBR üzerinde basılı olan veriyle eşleştiğinden emin olun. Artık OTBR'nin OMR adresini pingleyebiliriz:
> 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. Hizmeti Son Cihazda Yayınlama
mDNS, link-local üzerinde DNS-SD hizmetini yayınlamak için yaygın olarak kullanılmaktadır. Ancak çoklu yayın mesajları çok fazla bant genişliği kullanır ve güç seviyesi düşük olan cihazların pilini hızlı bir şekilde tüketir. Thread, hizmetlerini Sınır Yönlendirici'ye kaydetmek için tek yayın SRP protokolünü kullanır ve hizmetlerin reklamını kablosuz ağ veya Ethernet bağlantısı üzerinden yapmak için Sınır Yönlendirici'den yararlanır.
srp client
komutuyla bir hizmeti kaydedebiliriz.
SRP istemci düğüm ekranı oturumuna gidin ve SRP istemcisini otomatik olarak başlatın:
> srp client autostart enable Done
Kablosuz/Ethernet bağlantısında reklamı yapılacak ana makine adını ayarlayın:
> srp client host name ot-host Done
Kablosuz/Ethernet bağlantısındaki bir cihazın Thread uç cihazına ulaşması için son cihazın OMR adresinin tanıtılması gerekir:
> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 Done
Sonunda sahte bir _ipps._tcp
hizmeti kaydettirin:
> srp client service add ot-service _ipps._tcp 12345 Done
Birkaç saniye bekleyin, hizmetin kayıtlı olduğunu görebileceğiz:
> srp client service instance:"ot-service", name:"_ipps._tcp", state:Registered, port:12345, priority:0, weight:0 Done
Tüm kurulum işlemlerini tamamladık. Kablosuz/Ethernet bağlantısı üzerinden _ipps._tcp
hizmetinin reklamı yapılmış olmalı. Şimdi son cihazı keşfetmenin ve ona ulaşmanın zamanı geldi.
6. Hizmeti Keşfetme
Hizmeti cep telefonuyla keşfedin
Android telefonla mDNS hizmetlerini keşfetmek için Hizmet Tarayıcısı uygulamasını kullanırız. Bu uygulama, iOS mobil cihazlar için de eşdeğer bir uygulama bulunabilir. Uygulamayı açtığınızda _ipps._tcp
hizmeti görünecektir.
Linux ana makinesiyle hizmeti keşfedin
Hizmeti başka bir Linux ana makinesinden keşfetmek isterseniz avahi-browse
komutunu kullanabilirsiniz.
avahi-daemon
ve avahi-utils
uygulamalarını yükleyin:
$ sudo apt-get install -y avahi-daemon avahi-utils
Hizmeti çözün:
$ 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 = [] ...
Hizmeti macOS ana makinesiyle keşfetme
Hizmeti çözmek için macOS'te dns-sd
aracını kullanabilirsiniz:
$ 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. Son cihazı pingleme
Cep telefonundan pingleme
Örneğin Pixel telefonu ele alalım. Daha önce kaydedilmiş olan "ot-service" hizmetinin OMR adresini bulabiliriz. kullanın.
Artık OMR adresini başka bir Network Analyzer Uygulaması ile pingleyebiliriz.
Maalesef Network Analyzer Uygulaması'nın Android sürümü, ping yardımcı programı için mDNS sorgularını desteklememektedir ve bu nedenle ot-host.local
ana makine adını doğrudan pingleyemiyoruz (ana makine adını, Uygulamanın iOS sürümüyle pingleyebiliriz).
Linux/macOS ana makinesinden pingleme
İş Parçacığı Kenarlığı Yönlendirici, Wi-Fi/Ethernet bağlantısı üzerindeki ön ekleri (Ön Ek Bilgileri Seçeneği aracılığıyla) ve rotaları (Rota Bilgisi Seçeneği aracılığıyla) tanıtmak için ICMPv6 Yönlendirici Reklamları (RA) gönderir.
Linux ana makinesini hazırlama
Barındırıcınızda RA ve RIO'nun etkinleştirildiğinden emin olmanız önemlidir:
- IP yönlendirme etkin değilse
net.ipv6.conf.wlan0.accept_ra
en az1
, aksi takdirde2
olmalıdır. net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen
,64
değerinden küçük olmamalıdır.
accept_ra
, çoğu dağıtım için varsayılan olarak 1
değerine ayarlıdır. Ancak bu seçeneği geçersiz kılacak başka ağ arka plan programları olabilir (örneğin, Raspberry Pi'deki dhcpcd
, accept_ra
ile 0
değerini geçersiz kılar). accept_ra
değerini şununla kontrol edebilirsiniz:
$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra 0
Ayrıca değeri şu şekilde 1
(veya IP yönlendirmenin etkin olması durumunda 2
) olarak ayarlayın:
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1 Net.ipv6.conf.wlan0.accept_ra = 1
Çoğu Linux dağıtımında accept_ra_rt_info_max_plen
seçeneği varsayılan olarak 0
şeklindedir. Aşağıdakilerle, bu seçeneği 64
olarak ayarlayın:
$ 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
Ana makine yeniden başlatıldıktan sonra bu değişiklik kaybolur. Örneğin, RIO'yu kalıcı olarak etkinleştirmek için /etc/sysctl.conf
öğesine aşağıdaki komutları ekleyin:
$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
OTBR zaten RA mesajları gönderiyor olduğundan ve istenmeyen iki RA mesajı arasındaki zaman aralığı birkaç yüz saniye olabileceğinden, bu yapılandırmaları değiştirmek için çok geç olabilir. Bunun bir yolu, Kablosuz erişim noktasının bağlantısını kesip yeniden bağlanarak Yönlendirici İstek mesajları göndermektir. Böylece OTBR istenen RA'larla yanıt verir. Diğer bir seçenek de Sınır Yönlendirici'de Sınır Yönlendirme işlevini yeniden başlatmaktır:
$ sudo ot-ctl br disable Done $ sudo ot-ctl br enable Done
Kablosuz ağa yeniden bağlanmaya veya Ethernet arayüzünü yeniden başlatmaya çalışıyorsanız kablosuz/Ethernet IPv6 ağınızı yönetmek için dhcpcd parametresinin kullanılmadığından emin olun. dhcpcd, arayüz her yeniden başlatıldığında accept_ra
seçeneğini her zaman geçersiz kılar ve accept_ra
yapılandırmanız kaybolur. dhcpcd biçiminde IPv6'yı açıkça devre dışı bırakmak için dhcpcd yapılandırma dosyasına (ör. /etc/dhcpcd.conf
) aşağıdaki satırları ekleyin:
noipv6 noipv6rs
Değişikliğin geçerli olması için cihazı yeniden başlatmanız gerekir.
macOS ana makinesini hazırlama
Her iki accept_ra*
seçeneği de varsayılan olarak etkindir ancak sisteminizi en az macOS Big Sur sürümüne yükseltmeniz gerekir.
Ana makine adını veya IPv6 adresini pingleme
Artık ot-host.local
ana makine adını ping -6
komutuyla (macOS için ping6
) pingleyebiliriz:
$ 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 ...
Bu komut, Linux ana makinelerinde "Name or service not known"
hatası vererek başarısız olabilir. Bunun nedeni, ping
komutunun ot-host.local.
adını mDNS sorgularıyla çözümlememesidir. /etc/nsswitch.conf
öğesini açın ve hosts
ile başlayan satıra mdns6_minimal
ekleyin:
hosts: files mdns4_minimal mdns6_minimal dns
Elbette, IPv6 adresine her zaman doğrudan ping gönderebilirsiniz:
$ 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. Son Cihaz Hizmeti Yayından Kaldırın
SRP istemci düğümünden kayıtlı adresi ve hizmeti kaldırmak için:
> srp client host remove Done
_ipps._tcp
hizmetini şu anda görülememeniz gerekir.
9. Tebrikler
Tebrikler, Thread uç cihazları için çift yönlü IP bağlantısı ve hizmet keşfi sağlamak üzere OTBR'yi İş Parçacığı Sınır Yönlendiricisi olarak başarıyla ayarladınız.
Sırada ne var?
Bu codelab'lerden bazılarına göz atın...