1. Giriş
Thread 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 noktalı hataları önlemek için topoloji değişikliklerine uyum sağlayabilir.
OpenThread nedir?
Google tarafından yayınlanan OpenThread, Thread® uygulamasının açık kaynaklı bir uygulamasıdır.
OpenThread Sınır Yönlendirici nedir?
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.
NAT64
NAT64, yalnızca IPv6 ağlardaki 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 yapan bir çevirmendir.
OpenThread Sınır Yönlendirici'nin bir parçası olarak NAT64 çevirmeni TCP, UDP ve ICMP (ICMPv6) protokollerinin çevrilmesini destekler.
Neler oluşturacaksınız?
Bu codelab'de, bir OpenThread Sınır Yönlendirici ve Thread cihazı kuracak, ardından OpenThread Sınır Yönlendiricisi aracılığıyla Thread cihazları ile IPv4 ana makineleri arasındaki iletişimi etkinleştirip doğrulayacaksınız.
Neler öğreneceksiniz?
- NAT64 özellikleriyle OpenThread Sınır Yönlendirici oluşturma.
- Thread son cihazlardan IPv4 ana makineleri ile nasıl iletişim kurulacağı.
Gerekenler
- Thread NCP, OpenThread CLI oluşturup yüklemek ve IPv4 bağlantısını test etmek için kullanılan Linux iş istasyonu.
- Thread sınır yönlendiricisi için 4 GB RAM'e sahip bir Raspberry Pi 4. Linux iş istasyonunuza bu cihazdan IPv4 üzerinden erişilebilmelidir.
- 2 Nordic Semiconctionor nRF52840 DK kart.
Bu codelab için ağ topolojisi:
2. OpenThread Sınır Yönlendiriciyi Kurma
Aşağıdaki değişikliği yaparak OpenThread sınır yönlendiricisini oluşturmak için Thread Kenarlık Yönlendiricisi - Çift Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi codelab'i için Kurulum OTBR adımını uygulayın:
OTBR'yi derle ve yükle bölümünde, NAT64
ortam değişkenini 1
ve NAT64_SERVICE
değerini de openthread
olarak ayarlayarak komut dosyasına OpenThread'deki NAT64 çevirmenini etkinleştirmesini bildirmeniz gerekir. Adımdan önce aşağıdaki komutu çalıştırın:
$ export NAT64=1 NAT64_SERVICE=openthread
Yazıldığı şekilde İş Parçacığı Yönlendirici - Çift Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi codelab'i ile devam edin. Thread a Thread ağı oluşturduktan sonra OpenThread CLI komutlarını kullanarak sınır yönlendiricisinin bir NAT64 öneki yayınladığını doğrulayabilirsiniz.
Öncelikle sınır yönlendiricimizin çalışır durumda olduğundan ve sınır yönlendiricisinde NAT64'ün etkin olduğundan emin olun:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
OTBR'nin iş parçacığı lideri olarak davrandığını ve Thread Network Data (İş Parçacığı Ağı Verileri) için NAT64 öneki (bizim durumumuzda fd4c:9574:3720:2:0:0::/96
) olduğunu görmemiz gerekir:
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
NAT64 öneki, IPv4 ana makinesiyle iletişim kurarken Thread cihazları tarafından kullanılır.
3. Thread bitiş cihazını kurun
Aşağıdaki adımda değişiklik yaparak bir nRF52840 CLI son cihazı derlemek ve yüklemek için nRF52840 anakartları ve OpenThread codelab ile bir Thread ağı oluşturma adımının FTD'ler adımını uygulayın:
Build and flash (Derleme ve flash) bölümünde, script/build
yöntemini çağırırken komut satırına -DOT_DNS_CLIENT=ON
, -DOT_SRP_CLIENT=ON
ve -DOT_ECDSA=ON
öğelerini eklemeniz gerekir:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
Yazıldığı şekilde nRF52840 panoları ve OpenThread codelab ile Thread ağı oluşturma işlemiyle devam edin. Son cihaz CLI görüntüsü ile yanıp söndükten sonra Thread son cihazını ayarlamak için Thread Kenarlık Yönlendirici - Çift Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi bölümündeki talimatları uygulayın.
Thread bitiş cihazını ayarladıktan sonra birkaç saniye bekleyin ve Thread ağına katılmanın başarılı olup olmadığını doğrulayın. Ağ verilerinden bir NAT64 öneki bulabilirsiniz (bizim örneğimizde fd4c:9574:3720:2:0:0::/96
):
> netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
Ağ verilerinin OTBR'deki verilerle eşleştiğinden emin olun.
4. Thread son cihazından IPv4 ana makineleri ile iletişim kurma
Artık yeni kurulumu yaptığımız son cihazdan, IPv4 ağındaki ana makinelerle iletişim kurabilirsiniz.
IPv4 ana makinelerine ICMP yankı istekleri gönderme
Thread son cihazının KSA'sından:
> ping 8.8.8.8 Pinging synthesized IPv6 address: fd4c:9574:3720:2:0:0:808:808 16 bytes from fd4c:9574:3720:2:0:0:808:808: icmp_seq=15 hlim=119 time=48ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 48/48.0/48 ms. Done
Sınır yönlendiricisi, nat64 mappings
komutunu kullanarak bu cihaz için bir NAT64 eşleme öğesi oluşturur:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ | 377ee63dd3127f1a | fd4c:9574:3720:1:1d61:b4c1:494f:f975 | 192.168.255.254 | 7190s | 1 | 16 | 1 | 16 | | | TCP | 0 | 0 | 0 | 0 | | | UDP | 0 | 0 | 0 | 0 | | | ICMP | 1 | 16 | 1 | 16 | Done
fd4c:9574:3720:1:1d61:b4c1:494f:f975
, Thread cihazınızın IPv6 adresi olmalıdır.
Trafiği nasıl saydığını görmek için dilediğiniz zaman sınır yönlendiricide bu komutu çalıştırın.
IPv4 DNS sunucularına DNS sorguları gönder
IPv4 ağında bir ana makine adını çözümlemek için dns resolve4
kullanın. DNS sunucusu adresi de bir IPv4 adresi olabilir:
> dns resolve4 example.com 8.8.8.8 Synthesized IPv6 DNS server address: fd4c:9574:3720:2:0:0:808:808 DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
TCP üzerinden iletişim kurma
Son cihaz ile IPv4 ağındaki ana makineler arasında TCP bağlantıları kurmak mümkündür.
Linux IPv4 ana makinenizin IP adresinin 192.168.0.2
olduğunu varsayalım.
Linux IPv4 ana bilgisayarınızda TCP bağlantılarını dinlemek için nc
komutunu kullanın:
$ nc -l 0.0.0.0 12345
Thread son cihazınızdan bir TCP bağlantısı kurun ve Linux IPv4 ana makinenize mesaj gönderin:
> tcp init Done > tcp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd4c:9574:3720:2:0:0:c0a8:2 Done > tcp send hello
Linux IPv4 ana makine çıkışlarınız:
hello
Ayrıca, Linux IPv4 ana makinenizden Thread bitiş cihazına mesaj gönderebilirsiniz. "world" yazın ve nc
çalıştıran Linux IPv4 ana makinenizde Enter tuşuna basın. Thread son cihazınız çıkışlıdır:
TCP: Received 6 bytes: world
UDP üzerinden iletişim kurma
Thread cihazları ile IPv4 ağındaki ana makineler arasında UDP kullanarak 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
cihazını kullanın:
$ nc -u -l 0.0.0.0 12345
Thread son 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: fd4c:9574:3720:2:0:0:c0a8:2 Done > udp send hello Done
Linux IPv4 ana makine çıkışlarınız:
hello
Ayrıca, Linux IPv4 ana makinenizden Thread bitiş cihazına mesaj gönderebilirsiniz. "world" yazın ve nc
çalıştıran Linux IPv4 ana makinenizde Enter tuşuna basın. Thread son cihazınız çıkışlıdır:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. NAT64'ü Sınır Yönlendirici'de aç/kapat
NAT64'ü istediğiniz zaman etkinleştirebilir veya devre dışı bırakabilirsiniz. NAT64'ü devre dışı bırakmak için nat64 disable
kullanın. NAT64'ün durumunu kontrol etmek için nat64 state
komutunu kullanın.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
Devre dışı bıraktıktan sonra cihaz artık NAT64 öneki yayınlamaz:
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
Ayrıca, Thread ağındaki cihazlar artık bu sınır yönlendiricisi aracılığıyla IPv4 ana makinesine erişemez.
Thread son cihazının KSA'sından:
> ping 8.8.8.8 Error 13: InvalidState
NAT64'ü etkinleştirmek için nat64 enable
kullanın. Önek yöneticisinin bir NAT64 önekini tanıtmaya başlaması biraz zaman alabilir:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
Birkaç saniye sonra NAT64 bileşenleri çalışır hale gelir:
$ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done $ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
NAT64'ü devre dışı bıraktığınızda eşleme tablosunu temizleyeceğini unutmayın:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | 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ı için DNS sorgularını yukarı akış DNS sunucularına yönlendirmeyi dener.
Bu işlev dahili DNS-SD sunucusu tarafından desteklendiğinden, DNS-SD sunucusunun etkinleştirildiğinden emin olmanız gerekir.
$ sudo ot-ctl srp server state running Done
running
değilse etkinleştirin:
$ sudo ot-ctl srp server enable Done
Yukarı akış DNS proxy'sinin etkinleştirildiğinden emin olun:
$ sudo ot-ctl dns server upstream Enabled Done
Enabled
değilse etkinleştirin:
$ sudo ot-ctl dns server upstream enable Done
Son cihazlarda, SRP istemcisinin etkinleştirildiğinden emin olun. Böylece istemci, DNS sorgularını sınır yönlendiricisine gönderir:
> srp client state Enabled Done
Enabled
değilse etkinleştirin:
> srp client autostart enable Done
Son cihazınızda, varsayılan DNS sunucusunun sınır yönlendirici olduğundan emin olun:
> dns config Server: [fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes Done
Sunucunun IPv6 adresi (yukarıdaki örnekte fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf
), 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. - 2606:2800:220:1:248:1893:25c8:1946 TTL:8720 Done > dns resolve4 example.com DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
7. Tebrikler
Tebrikler, NAT64 desteğiyle sınır yönlendiriciyi başarıyla ayarladınız ve Thread uç cihazlarına internet erişimi sağlamak için bu yönlendiriciyi 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 soyutlama