1. Giriş
İleti Dizisi Kenarlık Yönlendirici nedir?
Thread, IP'ye dayalı ve düşük güçle çalışan kablosuz örgü ağ iletişimi protokolüdür. Bu şekilde, cihazlar arası ve cihazlar arası güvenli iletişimlere olanak tanır. İş parçacığı ağları, tek hata noktasını önlemek için topoloji değişikliklerine uyum sağlayabilir.
İş Parçacık Sınırlayıcı, bir İş Parçacığını Kablosuz veya Ethernet gibi diğer IP tabanlı ağlara bağlar. İleti dizisi ağının diğer ağlara bağlanması için Kenarlık Yönlendirici gerekir. İş parçacığı Kenarlık Yönlendirici'nin aşağıdaki işlevleri en az düzeyde desteklenir:
- İş parçacığı ve kablosuz/Ethernet ağları arasında çift yönlü IP bağlantısı.
- mDNS (Kablosuz/Ethernet bağlantısında) ve SRP (İleti dizisi ağında) aracılığıyla çift yönlü hizmet keşfi.
- İş parçacığı bölümlerini IP tabanlı bağlantılar üzerinden birleştiren alt ağ üzerinden altyapı.
- Kimlik doğrulama ve bir Thread ağına Thread cihazı ekleme için Harici İş Parçacığı Komisyonu (örneğin, cep telefonu).
Google tarafından yayınlanan OpenThread Kenarlık Yönlendiricisi (OTBR), Thread Border Router'ın açık kaynaklı bir uygulamasıdır.
Neler geliştireceksiniz?
Bu codelab'de İş Parçacık Sınır Yönlendiricisi kuracak ve cep telefonunuzu Sınır Yönlendirici üzerinden bir İş Parçacık Sonlandırma Cihazı'na bağlayacaksınız.
Neler öğreneceksiniz?
- OTBR'yi ayarlama
- OTBR ile İleti Dizisi ağı oluşturma
- SRP özelliğiyle OpenThread CLI cihazı oluşturma
- SRP ile hizmet kaydetme
- İş parçacığı bitiş cihazını bulma ve cihaza erişme.
Gerekenler
- Raspberry Pi 3/4 cihaz ve en az 8 GB kapasitesi olan bir SD kart.
- 2 Nordic Semiconductor nRF52840 geliştirici kartları.
- Yönlendiricide IPv6 Yönlendirici Reklam Koruyucusu etkin olmayan bir Kablosuz Erişim Noktası.
- En az iOS 14 yüklü bir iOS telefon veya en az Android 8.1 yüklü Android telefon.
2. OTBR'yi ayarla
Raspberry Pi kurulumu
raspberrypi.org sitesindeki talimatları uygulayarak rpi-imager
aracıyla yeni bir Raspberry Pi cihazı kurmak kolaydır (araçta en yeni Raspberry Pi OS yerine, indir 2021-05-07-raspios-buster-armhf-lite). Bu codelab'de cep telefonu adımlarını tamamlamak için Raspberry Pi'yi bir Kablosuz AP'ye bağlamanız gerekir. Kablosuz bağlantı kurmak için bu kılavuzu izleyin. SSH ile Raspberry Pi'ye giriş yapmak kolaydır. Talimatları burada bulabilirsiniz.
OTBR kodunu al
Raspberry Pi'nize giriş yapıp GitHub'dan ot-br-posix
adlı cihazı klonlayın:
$ git clone https://github.com/openthread/ot-br-posix.git --depth 1
OTBR derleme ve yükleme
OTBR'nin önyükleme yapan ve İş Parçacık Kenarlık Yönlendiricisi'ni kuran iki komut dosyası vardır:
$ cd ot-br-posix $ ./script/bootstrap $ INFRA_IF_NAME=wlan0 ./script/setup
OTBR, hem INFRA_IF_NAME
ile belirtilen bir İş Parçacığı arayüzü hem de altyapı ağı arayüzü (ör. Kablosuz/Ethernet) ile çalışır. İş parçacığı arayüzü, OTBR'nin kendisi 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 olarak wlan0
değerine sahiptir. Raspberry Pi cihazınız bir Ethernet kablosuyla bağlı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)
RCP
hizmetinin çalışması için otbr-agent
hizmetinin etkin olmaması beklenir.
Değişikliklerin etkili olması için Raspberry Pi'yi yeniden başlatın.
RCP donanım yazılımını derleme ve flash
OTBR, Radyo Ortak İşlemci (RCP) modunda 15.4 radyo çipini destekler. Bu modda, OpenThread yığını ana makine tarafında çalışır ve IEEE802.15.4 alıcı-verici üzerinden kareleri aktarır/alır.
Bir nRF52840 RCP cihazı derlemek ve yanıp sönmek için nRF52840 kartları ve OpenThreading ile laboratuvar ağı oluşturma codelab'inin 4. adımını uygulayın:
$ script/build nrf52840 USB_trans
OTBR'yi başlat ve durumu doğrula
nRF52840 kartını Raspberry Pi'ye bağlayın ve 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. İleti dizisi ağı oluşturma
otbr-agent
hizmetini kontrol etmek için kullanılabilecek bir ot-ctl
komutu vardır. ot-ctl
, tüm OpenThread CLI komutlarını kabul eder. Daha fazla ayrıntı için OpenThread CLI Kılavuzu'na bakın.
OTBR ile bir Mesaj Dizisi 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 leader
Mesaj Dizisi olarak davrandığını ve Mesaj Dizisi Ağ Verilerinde off-mesh-routable
(OMR) öneki olduğunu görebilmelidir:
$ 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 İstemcisi Son Cihazı Kurulumu
OT KSA'sını derleyip flash
Bir nRF52840 CLI uç cihazı oluşturmak ve yanıp sönmek için nRF52840 kartları ve OpenThreading ile iş parçacığı ağı oluşturma codelab'inin 5. adımını uygulayın.
Ancak, CLI düğümü OT_COMMISSIONER
ve OT_JOINER
etkinleştirilmiş durumdayken, OT_SRP_CLIENT
ve OT_ECDSA
özelliklerini gerektirir.
Bu nedenle, tam derleme çağrısı aşağıdaki gibi 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 İş Parçacığının ağına katılmak için OTBR cihazından Aktif Operasyonel Veri Kümesini almamız gerekir. otbr-agent
komut satırına geri dönelim ve etkin veri kümesini alalım:
$ sudo ot-ctl dataset active -x 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
SRP istemci düğümü ekran oturumuna geri dönün ve etkin veri kümesini ayarlayın:
> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
Ardından, Mesaj Dizisi arayüzünü başlatın:
> ifconfig up Done > thread start Done
Birkaç saniye bekleyin ve İleti Dizisi ağına katılmanın 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'de basılı olanla eşleştiğinden emin olun. Artık OTBR'nin OMR adresine ping gönderebiliriz:
> 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'da DNS-SD hizmeti yayınlamak için yaygın şekilde kullanılmaktadır. Ancak çok noktaya yayın mesajları çok fazla bant genişliği tüketir ve düşük güç tüketen cihazların pilini hızla tüketir. İş parçacığı, hizmetlerini Sınır Yönlendirici'ye kaydetmek için tek noktaya yayın SRP protokolünü kullanır ve kablosuz veya Ethernet bağlantısında hizmetlerin reklamını yapmak için Sınır Yönlendirici'yi kullanır.
srp client
komutuyla bir hizmet kaydedebiliriz.
SRP istemcisi 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 bir İş Parçacığı bitiş cihazına ulaşması için bitiş cihazın OMR adresinin reklamının yapılması gerekir:
> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 Done
Son olarak, sahte bir _ipps._tcp
hizmeti kaydedin:
> srp client service add ot-service _ipps._tcp 12345 Done
Birkaç saniye bekleyin. Hizmetin kaydedildiğini görebiliriz:
> 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 ve _ipps._tcp
hizmetinin, kablosuz ağ/Ethernet bağlantısında tanıtılmış olması gerekiyor. Şimdi bitiş cihazını keşfedip onlara ulaşma zamanı!
6. Hizmeti Keşfedin
Hizmeti cep telefonuyla keşfetme
Android telefonla mDNS hizmetlerini keşfetmek için Hizmet Tarayıcı Uygulamasını kullanırız. iOS mobil cihazlar için eşdeğer bir Uygulama da bulunur. Uygulamayı açtığınızda _ipps._tcp
hizmeti hemen görünecektir.
Hizmeti bir Linux ana makinesiyle keşfedin
Hizmeti başka bir Linux ana makinesinden keşfetmek istiyorsanız avahi-browse
komutunu kullanabilirsiniz.
avahi-daemon
ve avahi-utils
'nu yükleyin:
$ sudo apt-get install -y avahi-daemon avahi-utils
Hizmeti çözümleme:
$ 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 barındırıcısıyla keşfetme
Hizmeti çözmek için macOS'te dns-sd
adresini 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 ping gönderme
Örnek olarak Pixel telefonu ele alalım. Daha önce kaydedilmiş hizmetin "ot-service"inin OMR adresini, Service Browser App'taki hizmet örneğinin ayrıntılar sayfasında bulabiliriz.
Artık OMR adresini başka bir Network Analiz Uygulaması ile pingleyebiliriz.
Maalesef Ağ Analizcisi Uygulamasının Android sürümü, ping yardımcı programı için mDNS sorgularını desteklemez ve ot-host.local
ana makine adını doğrudan pingleyemeyiz (ana makine adını Uygulamanın iOS sürümüyle pingleyebiliriz).
Linux/macOS ana makinesinden ping gönderme
İş Parçacığı Kenarlık Yönlendiricisi, kablosuz bağlantı/Ethernet bağlantısında öneklerin (Önek Bilgileri Seçeneği ile) ve rotaların (Rota Bilgileri Seçeneği ile) tanıtılması için ICMPv6 Yönlendirici Reklamları'nı (RA) gönderir.
Linux ana makinesini hazırlama
Barındırıcınızda RA ve RIO'nun etkinleştirildiğinden emin olmak ö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 ayarlanı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
değerini 0
geçersiz kılar). accept_ra
değerini şunlarla kontrol edebilirsiniz:
$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra 0
Ayrıca, değeri 1
(veya IP yönlendirmesi etkinleştirilmişse 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ı için accept_ra_rt_info_max_plen
seçeneği varsayılan olarak 0
değerine ayarlıdır. 64
değerine ayarlanır.
$ 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 değişiklik kaybolacak. Örneğin, RIO'yu kalıcı olarak etkinleştirmek için aşağıdaki komutları /etc/sysctl.conf
öğesine ekleyin:
$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
OTBR zaten RA iletileri gönderiyor olduğundan ve iki istenmeyen RA iletisi arasındaki aralık birkaç saniye olabileceğinden, bu yapılandırmaları değiştirmek için çok geç olabilir. Bunun bir yolu, Yönlendirici Talebi verilerini göndermek amacıyla APBR'nin istenen RA'lar ile yanıt vermesi için kablosuz erişim noktasının bağlantısını kesip yeniden bağlanmaktır. Diğer bir seçenek de Sınır Yönlendirici'deki Kenarlık 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 öğesinin kullanılmadığından emin olun. dhcpcd, arayüz her yeniden başlatıldığında her zaman accept_ra
seçeneğini geçersiz kılar ve accept_ra
yapılandırmanız kaybolur. dhcpcd'de 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 yeniden başlatmanız gerekir.
macOS ana makinesi hazırlama
Her iki accept_ra*
seçeneği de varsayılan olarak etkindir, ancak sisteminizi en azından macOS Big Sur'a yükseltmeniz gerekir.
Ana makine adını veya IPv6 adresini pingleme
Artık ping -6
ana makine adına (macOS için ping6
) ot-host.local
ana makine adını 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, "Name or service not known"
hatasına sahip Linux ana makinelerinde başarısız olabilir. Bunun nedeni, ping
komutunun mDNS sorgularıyla ot-host.local.
adını çözümlememesidir. /etc/nsswitch.conf
uygulamasını açın ve hosts
ile başlayan satıra mdns6_minimal
değerini ekleyin:
hosts: files mdns4_minimal mdns6_minimal dns
Elbette, istediğiniz zaman IPv6 adresini doğrudan pingleyebilirsiniz:
$ 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. Cihazı Sona Erdirme Hizmeti
SRP istemci düğümünden kaydedilen adresi ve hizmeti kaldırmak için:
> srp client host remove Done
_ipps._tcp
hizmetini artık keşfedemezsiniz.
9. Tebrikler
Tebrikler! OTBR'yi, İş Parçacığı bitiş cihazları için çift yönlü IP bağlantısı ve hizmet keşfi sağlamak amacıyla İş Ortağı 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...