1. Giriş
Thread nedir?
Thread, cihazlar arası ve cihazlar arası güvenli iletişim olanağı sağlayan IP tabanlı düşük güçlü kablosuz örgü ağ protokolüdür. Mesaj dizisi ağları, tek noktadan kaynaklanan hataları önlemek için topolojideki değişikliklere 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), İleti Dizisi Sınır Yönlendiricisinin açık kaynak 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 çevirmendir.
OpenThread Sınır Yönlendirici'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önlendirici ve Thread cihaz oluşturacak, ardından OpenThread Sınır Yönlendirici üzerinden internetteki Thread cihazları ile IPv4 ana makineleri arasındaki iletişimi etkinleştirip doğrulayacaksınız.
Neler öğreneceksiniz?
- NAT64 özelliklerine sahip bir OpenThread Sınır Yönlendiricisi oluşturma.
- Thread bitiş cihazlarından IPv4 ana makineleri ile iletişim kurma.
Gerekenler
- Bir Thread NCP'si, OpenThread KSA'sı oluşturup IPv4 bağlantısını test etmek için kullanılan bir Linux iş istasyonu.
- Thread sınır yönlendirici için 4 GB RAM'e sahip bir Raspberry Pi 4. Linux iş istasyonunuza bu cihazdan IPv4 üzerinden erişilebilmelidir.
- 2 Nordic Semiconputor nRF52840 DK kart.
Bu codelab için ağ topolojisi:
2. OpenThread Sınır Yönlendirici'yi kurma
Aşağıdaki ileti dizisiyle OpenThread sınır yönlendiricisini oluşturmak için İleti Dizisi Sınır Yönlendiricisi - Çift Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi codelab'inin OTBR adımını uygulayın:
OTBR oluştur ve yükle bölümünde, NAT64
ortam değişkenini 1
ve NAT64_SERVICE
openthread
olarak ayarlayarak komut dosyasına OpenThread'de NAT64 çevirmenini etkinleştirmesini söylemeniz gerekiyor. Adımdan önce aşağıdaki komutu çalıştırın:
$ export NAT64=1 NAT64_SERVICE=openthread
Thread Limit Router - İki Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi codelab'ini yazıldığı şekilde devam edin. Thread Thread ağı oluşturduktan sonra sınır yönlendiricisinin OpenThread CLI komutlarıyla bir NAT64 öneki yayınladığını doğrulayabilirsiniz.
İlk olarak, sınır yönlendiricimizin çalışır durumda olduğundan ve sınır yönlendiricide 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 Thread lider konumda olduğunu ve Thread Ağ Verilerinde NAT64 önekinin (sizin örneğimizde fd4c:9574:3720:2:0:0::/96
) bulunduğunu görebiliyoruz:
$ 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ılacaktır.
3. Thread son cihazı kurun
Aşağıdaki adımları uygulayarak nRF52840 panolar ve OpenThread codelab ile Thread Thread ağı derlemenin FTD adımını ayarlama adımlarını uygulayın:
Build and flash kampanyasında script/build
, çağrılırken -DOT_DNS_CLIENT=ON
, -DOT_SRP_CLIENT=ON
ve -DOT_ECDSA=ON
komut satırına 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ılan nRF52840 panolar ve OpenThread codelab ile bir Thread ağı oluşturmaya devam edin. Son cihaz KSA görüntüsüyle yanıp söndükten sonra Thread bitiş cihazını ayarlamak için Thread Sınır Yönlendirici - İki Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Keşfi adımlarını uygulayın.
Thread son cihazını kurduktan sonra birkaç saniye bekleyin ve Thread ağına katılmanın başarılı olup olmadığını doğrulayın. Ağ verilerinden (bu örnekte fd4c:9574:3720:2:0:0::/96
) bir NAT64 öneki bulabilirsiniz.
> 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 barındırıcılarıyla iletişim kurma
Artık az önce oluşturduğumuz son cihazdan, IPv4 ağındaki ana makinelerle iletişim kurabilirsiniz.
IPv4 ana makinelerine ICMP yankı istekleri gönderme
Thread son cihazımı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önlendirici, nat64 mappings
komutuyla 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.
Bu komutu, trafiği nasıl saydığını görmek için istediğiniz zaman sınır yönlendiricide çalıştırın.
DNS sorgularını IPv4 DNS sunucularına gönderme
IPv4 ağındaki bir ana makine adını çözümlemek için dns resolve4
kullanın. DNS sunucu adresi bir IPv4 adresi de 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 kurun
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
kullanın.
$ nc -l 0.0.0.0 12345
Thread son cihazınızdan bir TCP bağlantısı oluşturun ve Linux IPv4 barındırıcınıza 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 barındırıcınızdan Thread son cihazına mesaj da gönderebilirsiniz. nc
komutunu çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter'a basın. Böylece Thread bitiş cihazınız şu sonuçları elde eder:
TCP: Received 6 bytes: world
UDP üzerinden iletişim kurma
Thread cihazları ile IPv4 ağındaki ana makineler 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 son cihazınızdan bir UDP bağlantısı oluşturun ve Linux IPv4 barındırıcınıza 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 barındırıcınızdan Thread son cihazına mesaj da gönderebilirsiniz. nc
komutunu çalıştıran Linux IPv4 ana makinenizde "world" yazıp Enter'a basın. Böylece Thread bitiş cihazınız şu sonuçları elde eder:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. Sınır Yönlendirici'de NAT64'ü aç/kapat
NAT64'ü istediğiniz zaman etkinleştirebilir veya devre dışı bırakabilirsiniz. NAT64'ü devre dışı bırakmak için nat64 disable
kullanın. Ayrıca, NAT64'ün durumunu kontrol etmek için nat64 state
kullanın.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
Devre dışı bırakıldıktan sonra, cihaz artık NAT64 ön eki 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 bu sınır yönlendiricisi üzerinden IPv4 ana makinesine artık erişemez.
Thread son cihazımın KSA'sından:
> ping 8.8.8.8 Error 13: InvalidState
NAT64'ü etkinleştirmek için nat64 enable
kullanın. Ön ek yöneticisinin NAT64 ön ekinin reklamını yapmaya 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 durumda olmalıdır:
$ 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ırakıldığında eşleme tablosunun temizleneceğ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önlendirmeye çalışır.
Bu işlev dahili DNS-SD Sunucusu tarafından desteklendiği için DNS-SD sunucusunun etkin olduğundan emin olmanız gerekir.
$ sudo ot-ctl srp server state running Done
running
değilse etkinleştirin:
$ sudo ot-ctl srp server enable Done
Yayın öncesi DNS proxy'sinin etkin olduğundan 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, sınır yönlendiriciye DNS sorguları göndermesi için etkinleştirildiğinden emin olun:
> 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önlendiricisi olduğundan emin olun:
> dns config Server: [fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes Done
Sunucu 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 başarılı bir sınır yönlendirici oluşturdunuz ve Thread son cihazlarına internet erişimi sağlamak için bu yönlendiriciyi kullandınız.
Daha fazla bilgi
- OpenThread Rehberler
- OpenThread KSA Referansı
- NAT64 için OpenThread API Referansı
- Yukarı akış DNS için OpenThread API Referansı
- DNS için OpenThread platform soyutlaması