1. Giriş

Thread nedir?
Thread, cihazdan cihaza ve cihazdan buluta güvenli iletişimi sağlayan IP tabanlı, düşük güç tüketen kablosuz ağ protokolüdür. Thread ağları, tek nokta hatalarını ö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önlendirici nedir?
Google tarafından yayınlanan OpenThread Border Router (OTBR), Thread Border Router'ın açık kaynaklı bir uygulamasıdır.
NAT64
NAT64, yalnızca IPv6 ağlarındaki ana makinelerin IPv4 ağlarındaki kaynaklara erişmesini sağlayan bir mekanizmadır. NAT64 ağ geçidi, IPv4 protokolleri ile IPv6 protokolleri arasında çeviri yapar.
OpenThread Border Router'ın bir parçası olan NAT64 çevirici, TCP, UDP ve ICMP (ICMPv6) protokollerinin çevrilmesini destekler.
Ne oluşturacaksınız?
Bu codelab'de bir OpenThread Border Router (OTBR) ve bir Thread cihazı kuracak, ardından OpenThread Border Router 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
- Bir Thread RCP, OpenThread CLI oluşturup yanıp söndürmek ve IPv4 bağlantısını test etmek için Linux iş istasyonu.
- Thread sınır yönlendirici için Raspberry Pi. Linux iş istasyonunuza bu cihazdan IPv4 üzerinden erişilebilmelidir.
- 2 Nordic Semiconductor nRF52840 USB Dongle (bir RCP için, bir de Thread uç cihazı için).
Bu codelab'in ağ topolojisi:

2. OpenThread sınır yönlendiriciyi kurma
OTBR'yi ayarlamanın en hızlı yolu OTBR Kurulum Kılavuzu'nu takip etmektir.
OTBR kurulumu tamamlandıktan sonra, NAT64 hizmetinin sınır yönlendiricide etkinleştirildiğini doğrulamak için ot-ctl komutunu kullanın:
> nat64 state PrefixManager: Active Translator: Active Done
Thread sınır yönlendirici, NAT64 önekini Thread Ağ Verileri'nde 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 öneki, n işaretiyle bir rota girişi olarak görünür. Yukarıdaki örnekte fd16:a3d:e170:2:0:0::/96, NAT64 önekidir.
NAT64 öneki, Thread cihazları bir IPv4 ana bilgisayarıyla iletişim kurarken kullanılır.
3. Thread uç cihazını kurma
Bir nRF52840 CLI uç cihazı oluşturup yüklemek için nRF52840 kartları ve OpenThread codelab ile Thread ağı oluşturma bölümündeki FTD'leri ayarlama adımını uygulayın. Ancak aşağıdaki adımda değişiklik yapın:
Derleme ve yükleme bölümünde, script/build çağrılı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 bölümünde anlatıldığı şekilde devam edin. Uç cihaz, CLI görüntüsüyle güncellendikten sonra Thread cihazını Thread ağına eklemek için İkinci düğümü Thread ağına ekleme bölümündeki adımları uygulayın.
Thread uç cihazını kurduktan sonra birkaç saniye bekleyin ve Thread ağına katılma işleminin başarılı olup olmadığını doğrulayın. Yukarıda belirtildiği gibi, yayınlanan NAT64 önekini Thread Network Data'da 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 uç cihazdan IPv4 ağındaki ana makinelerle iletişim kurabilirsiniz.
IPv4 ana makinelerine ICMP yankı istekleri gönderme
Thread uç 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 istediğiniz zaman sınır yönlendiricide çalıştırın.
DNS sorgularını IPv4 DNS sunucularına gönderme
IPv4 ağında bir ana makine adını çözümlemek için dns resolve4 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 makineler 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 komutunu kullanın:
$ nc -l 0.0.0.0 12345
Thread uç cihazınızdan bir 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 makinenizin çıktıları:
hello
Ayrıca Linux IPv4 ana makinenizden Thread uç cihazına mesaj da gönderebilirsiniz. nc çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter tuşuna basın. Thread uç cihazınız şu çıktıyı verir:
TCP: Received 6 bytes: world
UDP üzerinden iletişim kurma
IPv4 ağındaki Thread cihazları ve 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 bir 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 makinenizin çıktıları:
hello
Ayrıca Linux IPv4 ana makinenizden Thread uç cihazına mesaj da gönderebilirsiniz. nc çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter tuşuna basın. Thread uç cihazınız şu çıktıyı 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 kısayolunu kullanın. NAT64'ün durumunu kontrol etmek için nat64 state komutunu kullanın.
> nat64 disable Done > nat64 state PrefixManager: Disabled Translator: Disabled Done
Devre dışı bırakıldıktan sonra cihaz artık NAT64 öneki yayınlamaz:
> 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önlendirici üzerinden IPv4 ana makinesine erişemez.
Thread uç cihazımızın CLI'sinden:
> ping 8.8.8.8 Error 13: InvalidState
NAT64'ü etkinleştirmek için nat64 enable seçeneğini kullanın. Önek yöneticisinin bir NAT64 önekini reklamını yapmaya başlaması biraz zaman alabilir:
> nat64 enable Done > nat64 state PrefixManager: Idle Translator: NotWorking Done
Birkaç saniye sonra NAT64 bileşenleri çalışır duruma gelir:
> 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ı yukarı akış DNS sunucularına yönlendirme
Sınır yönlendiricide NAT64 etkinleştirildiğinde OpenThread, internet alanlarıyla ilgili DNS sorgularını yukarı akış DNS sunucularına yönlendirmeye çalışır.
Uç 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 Border Router'ınızın adreslerinden biri olmalıdır.
Artık uç 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ğiyle bir sınır yönlendiriciyi başarıyla kurdunuz ve 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'si için OpenThread API Referansı
- DNS için OpenThread platform soyutlaması
Referans belgeleri
- RFC 6146: Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers (RFC 6146: Durumlu NAT64: IPv6 İstemcilerinden IPv4 Sunucularına Ağ Adresi ve Protokol Çevirisi)