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

1. Giriş

7299534792dd9439.png

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:

c3cd2e081bc052fd.png

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

Referans belgeleri