1. Giriş
Thread nedir?
Thread, cihazlar arası ve cihazdan buluta güvenli iletişim sağlayan IP tabanlı, düşük güç tüketimine sahip bir kablosuz örgülü ağ protokolüdür. Konu ağları, tek noktadan arızaları önlemek için topoloji değişikliklerine uyum sağlayabilir.
OpenThread nedir?
Google tarafından yayınlanan OpenThread, Thread®'in açık kaynaklı bir uygulamasıdır.
OpenThread Sınır Yönlendiricisi nedir?
Google tarafından yayınlanan OpenThread Sınır Yönlendiricisi (OTBR), Thread Sınır Yönlendiricisi'nin açık kaynaklı bir uygulamasıdır.
NAT64
NAT64, yalnızca IPv6 ağlarındaki ana makinelerin IPv4 ağlarındaki kaynaklara erişmesine olanak tanıyan bir mekanizmadır. NAT64 ağ geçidi, IPv4 protokolleri ile IPv6 protokolleri arasında bir çevirmen görevi görür.
OpenThread Sınır Yönlendiricisi'nin bir parçası olan NAT64 çevirmeni, TCP, UDP ve ICMP (ICMPv6) protokollerinin çevrilmesini destekler.
Ne oluşturacaksınız?
Bu codelab'de bir OpenThread Sınır Yönlendiricisi (OTBR) ve Thread cihazı oluşturacak, ardından OpenThread Sınır Yönlendiricisi aracılığıyla Thread cihazları ile internetteki IPv4 ana makineleri arasındaki iletişimi etkinleştirip doğrulayacaksınız.
Neler öğreneceksiniz?
- NAT64 özellikleriyle OpenThread Sınır Yönlendiricisi oluşturma.
- Thread uç cihazlarından IPv4 ana makineleriyle iletişim kurma.
İhtiyacınız olanlar
- Thread RCP, OpenThread CLI oluşturmak ve flaşlamak ve IPv4 bağlantısını test etmek için bir Linux iş istasyonu.
- Thread sınır yönlendirici için bir Raspberry Pi. Linux iş istasyonunuza bu cihazdan IPv4 üzerinden erişilebilmelidir.
- 2 Nordic Semiconductor nRF52840 USB Dongle (biri RCP, diğeri Thread uç cihaz için).
Bu codelab'in ağ topolojisi:
2. OpenThread Sınır Yönlendirici'yi kurma
OTBR oluşturmanın en hızlı yolu OTBR Kurulum Kılavuzu'nu izlemektir.
OTBR kurulumu tamamlandıktan sonra, sınır yönlendiricide NAT64 hizmetinin etkinleştirildiğini doğrulamak için ot-ctl
simgesini kullanın:
> nat64 state PrefixManager: Active Translator: Active Done
Thread sınır yönlendiricisi, NAT64 ön ekini Thread ağ verilerinde yayınlar:
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
NAT64 ön eki, n
işareti içeren bir rota girişi olarak gösterilir. Yukarıdaki örnekte fd16:a3d:e170:2:0:0::/96
, NAT64 ön ekidir.
NAT64 ön eki, Thread cihazları tarafından IPv4 ana makineyle iletişim kurarken kullanılır.
3. Thread son cihazını kurma
nRF52840 CLI uç cihazı derlemek ve flaşlamak için nRF52840 kartları ve OpenThread kod laboratuvarıyla Thread ağı oluşturma başlıklı makalenin FTD'leri ayarlama adımını uygulayın. Aşağıdaki adımda değişiklik yapın:
Derleme ve önyükleme bölümünde, script/build
'i çağırırken komut satırına -DOT_DNS_CLIENT=ON
, -DOT_SRP_CLIENT=ON
ve -DOT_ECDSA=ON
eklemeniz gerekir:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
nRF52840 kartları ve OpenThread codelab ile Thread ağı oluşturma başlıklı makaleyi, yazıldığı şekilde uygulayın. Son cihaza CLI resmi yüklendikten sonra Thread cihazını Thread ağına eklemek için İkinci düğümü Thread ağına katılma bölümünü uygulayın.
Thread uç cihazını ayarladıktan sonra birkaç saniye bekleyin ve Thread ağına katılma işleminin başarılı olup olmadığını doğrulayın. Yukarıda da belirtildiği gibi, yayınlanan NAT64 ön ekini ileti dizisi ağ verilerinde görüntüleyebilirsiniz.
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
Ağ verilerinin OTBR'deki verilerle eşleştiğinden emin olun.
4. Thread uç cihazından IPv4 ana makineleriyle iletişim kurma
Artık yeni kurduğumuz son cihazdan IPv4 ağındaki ana makinelerle iletişim kurabilirsiniz.
IPv4 ana makinelerine ICMP yankı isteği gönderme
Thread son cihazımızın CLI'sinden:
> ping 8.8.8.8 Pinging synthesized IPv6 address: fd16:a3d:e170:2:0:0:808:808 16 bytes from fd16:a3d:e170:2:0:0:808:808: icmp_seq=1 hlim=109 time=28ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 28/28.0/28 ms. Done
Sınır yönlendirici, nat64 mappings
komutuyla bu cihaz için bir NAT64 eşleme öğesi oluşturur:
> nat64 mappings | | Address | Ports or ICMP Ids | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | v6 | v4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+ | 90b156e3cf609a23 | fd16:a3d:e170:1:492d:bcdb:9f72:6297 | 192.168.255.254 | N/A | N/A | 7162s | 1 | 16 | 1 | 16 | | | TCP | 0 | 0 | 0 | 0 | | | UDP | 0 | 0 | 0 | 0 | | | ICMP | 1 | 16 | 1 | 16 | Done
fd16:a3d:e170:1:492d:bcdb:9f72:6297
, Thread cihazınızın IPv6 adresi olmalıdır.
Trafiği nasıl saydığını görmek için bu komutu sınır yönlendiricide dilediğiniz zaman çalıştırın.
IPv4 DNS sunucularına DNS sorguları gönderme
IPv4 ağında bir ana makine adını çözmek için dns resolve4
simgesini kullanın. DNS sunucusu adresi bir IPv4 adresi de olabilir:
> dns resolve4 example.com 8.8.8.8 Synthesized IPv6 DNS server address: fd16:a3d:e170:2:0:0:808:808 DNS response for example.com. - fd16:a3d:e170:2:0:0:17c0:e454 TTL:295 fd16:a3d:e170:2:0:0:17d7:88 TTL:295 fd16:a3d:e170:2:0:0:17d7:8a TTL:295 fd16:a3d:e170:2:0:0:6007:80af TTL:295 fd16:a3d:e170:2:0:0:6007:80c6 TTL:295 fd16:a3d:e170:2:0:0:17c0:e450 TTL:295 Done
TCP üzerinden iletişim kurma
Son cihaz ile IPv4 ağındaki ana bilgisayarlar arasında TCP bağlantıları kurulabilir.
Linux IPv4 ana makinenizin IP adresinin 192.168.0.2
olduğunu varsayalım.
Linux IPv4 ana makinenizde TCP bağlantılarını dinlemek için nc
kullanın:
$ nc -l 0.0.0.0 12345
Thread uç cihazınızdan TCP bağlantısı oluşturun ve Linux IPv4 ana makinenize mesaj gönderin:
> tcp init Done > tcp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd16:a3d:e170:2:0:0:c0a8:2 Done > tcp send hello
Linux IPv4 ana makineniz şu çıkışları sağlar:
hello
Linux IPv4 ana makinenizden Thread son cihazına da mesaj gönderebilirsiniz. nc
çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter tuşuna basın. Thread uç cihazınız şunu gösterir:
TCP: Received 6 bytes: world
UDP üzerinden iletişim kurma
IPv4 ağındaki Thread cihazları ile ana bilgisayarlar arasında UDP kullanılarak iletişim kurulabilir.
Linux IPv4 ana makinenizin IP adresinin 192.168.0.2
olduğunu varsayalım.
UDP bağlantılarını dinlemek için nc
'ü kullanın:
$ nc -u -l 0.0.0.0 12345
Thread uç cihazınızdan UDP bağlantısı oluşturun ve Linux IPv4 ana makinenize mesaj gönderin:
> udp open Done > udp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd16:a3d:e170:2:0:0:c0a8:2 Done > udp send hello Done
Linux IPv4 ana makineniz şu çıkışları sağlar:
hello
Linux IPv4 ana makinenizden Thread son cihazına da mesaj gönderebilirsiniz. nc
çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter tuşuna basın. Thread son cihazınız şu çıkışları verir:
6 bytes from fd16:a3d:e170:2:0:0:c0a8:2 12345 world
5. Sınır Yönlendiricide NAT64'ü açma/kapatma
NAT64'ü istediğiniz zaman etkinleştirebilir veya devre dışı bırakabilirsiniz. NAT64'ü devre dışı bırakmak için nat64 disable
simgesini kullanın. NAT64'ün durumunu kontrol etmek için nat64 state
simgesini kullanın.
> nat64 disable Done > nat64 state PrefixManager: Disabled Translator: Disabled Done
Devre dışı bırakıldıktan sonra cihaz artık NAT64 ön eki yayınlamıyor:
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
Ayrıca, Thread ağındaki cihazlar artık bu sınır yönlendiricisi üzerinden IPv4 ana makinesine erişemez.
Thread son cihazımızın CLI'sinden:
> ping 8.8.8.8 Error 13: InvalidState
NAT64'ü etkinleştirmek için nat64 enable
öğesini kullanın. Önek yöneticisinin NAT64 öneklerinin reklamını yapmaya başlaması biraz zaman alabilir:
> nat64 enable Done > nat64 state PrefixManager: Idle Translator: NotWorking Done
NAT64 bileşenleri birkaç saniye sonra çalışmaya başlar:
> nat64 state PrefixManager: Active Translator: Active Done > netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
NAT64'ün devre dışı bırakılmasının eşleme tablosunu temizleyeceğini unutmayın:
> nat64 mappings | | Address | Ports or ICMP Ids | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | v6 | v4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+ Done
6. DNS sorgularını yayın öncesi DNS sunucularına yönlendirme
Sınır yönlendiricide NAT64 etkinleştirildiğinde OpenThread, internet alan adlarına yönelik DNS sorgularını yayın öncesi DNS sunucularına yönlendirmeye çalışır.
Son cihazınızda varsayılan DNS sunucusunun sınır yönlendirici olduğundan emin olun:
> dns config Server: [fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes ServiceMode: srv_txt_opt Nat64Mode: allow Done
Sunucu IPv6 adresi (yukarıdaki örnekte fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d
), OpenThread Sınır Yönlendiricinizin adreslerinden biri olmalıdır.
Artık son cihazdan internet alanları için DNS sorguları gönderebilirsiniz:
> dns resolve example.com DNS response for example.com. - 2600:1406:3a00:21:0:0:173e:2e65 TTL:161 2600:1406:3a00:21:0:0:173e:2e66 TTL:161 2600:1406:bc00:53:0:0:b81e:94c8 TTL:161 2600:1406:bc00:53:0:0:b81e:94ce TTL:161 2600:1408:ec00:36:0:0:1736:7f24 TTL:161 2600:1408:ec00:36:0:0:1736:7f31 TTL:161 Done > dns resolve4 example.com DNS response for example.com. - fd16:a3d:e170:2:0:0:6007:80af TTL:300 fd16:a3d:e170:2:0:0:6007:80c6 TTL:300 fd16:a3d:e170:2:0:0:17c0:e450 TTL:300 fd16:a3d:e170:2:0:0:17c0:e454 TTL:300 fd16:a3d:e170:2:0:0:17d7:88 TTL:300 fd16:a3d:e170:2:0:0:17d7:8a TTL:300 Done
7. Tebrikler
Tebrikler. NAT64 desteğine sahip bir sınır yönlendiriciyi başarıyla kurup Thread uç cihazlarına internet erişimi sağlamak için kullandınız.
Daha fazla bilgi
- OpenThread Kılavuzları
- OpenThread CLI Referansı
- NAT64 için OpenThread API Referansı
- Yukarı akış DNS için OpenThread API Referansı
- DNS için OpenThread platform soyutlaması