İş Parçacığı Sınır Yönlendirici - NAT64 üzerinden internet erişimi sağlama

1. Giriş

7299534792dd9439.png

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:

c3cd2e081bc052fd.png

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

Referans belgeler