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

Bu codelab hakkında
schedule23 dakika
subjectSon güncelleme 5 Mayıs 2025
account_circleYazan: Song Guo, Jonathan Hui

1. Giriş

7299534792dd9439.png

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:

c3cd2e081bc052fd.png

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

Referans dokümanları