Mesaj Dizisi Sınır Yönlendiricisi - NAT64 üzerinden internet erişimi sağlama

1. Giriş

7299534792dd9439.png

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:

c3cd2e081bc052fd.png

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

Referans dokümanlar