1. Введение
Что такое нить?
Thread — это основанный на IP протокол маломощной беспроводной ячеистой сети, который обеспечивает безопасную связь между устройствами и между устройствами и облаком. Сети потоков могут адаптироваться к изменениям топологии, чтобы избежать единичных сбоев.
Что такое OpenThread?
OpenThread, выпущенный Google , представляет собой реализацию Thread® с открытым исходным кодом.
Что такое пограничный маршрутизатор OpenThread?
OpenThread Border Router (OTBR), выпущенный Google, представляет собой реализацию Thread Border Router с открытым исходным кодом.
NAT64
NAT64 — это механизм, который позволяет хостам в сетях только для IPv6 получать доступ к ресурсам в сетях IPv4. Шлюз NAT64 является транслятором между протоколами IPv4 и протоколами IPv6.
Транслятор NAT64 в составе OpenThread Border Router поддерживает трансляцию протоколов TCP, UDP и ICMP (ICMPv6).
Что вы будете строить
В этой лаборатории кода вы собираетесь настроить пограничный маршрутизатор OpenThread и устройство потока, а затем включить и проверить связь между устройствами потока и хостами IPv4 в Интернете через пограничный маршрутизатор OpenThread.
Что вы узнаете
- Как создать пограничный маршрутизатор OpenThread с функциями NAT64.
- Как взаимодействовать с хостами IPv4 с оконечных устройств Thread.
Что вам понадобится
- Рабочая станция Linux для создания и прошивки Thread NCP, интерфейса командной строки OpenThread и тестирования подключения IPv4.
- Raspberry Pi 4 с 4 ГБ ОЗУ для пограничного маршрутизатора Thread. Ваша рабочая станция Linux должна быть доступна по IPv4 с этого устройства.
- 2 платы Nordic Semiconductor nRF52840 DK.
Топология сети для этой кодлабы:
2. Настройте пограничный маршрутизатор OpenThread
Выполните шаг настройки OTBR в лаборатории кода Thread Border Router — двунаправленное подключение IPv6 и обнаружение служб на основе DNS, чтобы создать граничный маршрутизатор OpenThread со следующим изменением:
В разделе « Сборка и установка OTBR » вам нужно указать сценарию включить транслятор NAT64 в OpenThread, установив для переменной среды NAT64
значение 1
, а для NAT64_SERVICE
— значение openthread
. Выполните следующую команду перед шагом:
$ export NAT64=1 NAT64_SERVICE=openthread
Продолжите работу с лабораторным кодом Thread Border Router — двунаправленное подключение IPv6 и обнаружение служб на основе DNS, как написано. После Form a Thread network вы можете убедиться, что граничный маршрутизатор публикует префикс NAT64 с помощью команд интерфейса командной строки OpenThread.
Во-первых, убедитесь, что наш пограничный маршрутизатор запущен и работает, а NAT64 включен на пограничном маршрутизаторе:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
Мы должны увидеть, что OTBR выступает в качестве лидера потока, а префикс NAT64 (в нашем случае fd4c:9574:3720:2:0:0::/96
) в сетевых данных потока:
$ 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 будет использоваться устройствами Thread при обмене данными с хостом IPv4.
3. Настройка конечного устройства резьбы
Выполните шаг «Настройка FTD» в разделе «Создание сети потоков с платами nRF52840 и лабораторией кода OpenThread», чтобы создать и прошить конечное устройство CLI nRF52840, с переходом на следующий шаг:
В Build и flash вы должны добавить -DOT_DNS_CLIENT=ON
в командную строку при вызове script/build
:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON
Продолжите работу с сетью Build a Thread с платами nRF52840 и лабораторией кода OpenThread, как написано. После того как на конечное устройство будет загружен образ CLI, следуйте указаниям Thread Border Router — двунаправленное подключение IPv6 и обнаружение службы на основе DNS, чтобы настроить конечное устройство Thread.
Подождите несколько секунд после настройки конечного устройства Thread и убедитесь, что подключение к сети Thread прошло успешно. Вы должны найти префикс NAT64 в сетевых данных (в нашем случае 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
Убедитесь, что сетевые данные совпадают с данными из OTBR.
4. Общайтесь с хостами IPv4 с конечного устройства Thread.
Теперь вы можете общаться с хостами в сети IPv4 с конечного устройства, которое мы только что настроили.
Отправлять эхо-запросы ICMP на хосты IPv4
Из интерфейса командной строки нашего конечного устройства Thread:
> 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
Пограничный маршрутизатор создает элемент сопоставления NAT64 для этого устройства с помощью команды nat64 mappings
:
$ 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
должен быть IPv6-адресом вашего устройства Thread.
Запустите эту команду на пограничном маршрутизаторе в любое время, чтобы увидеть, как он считает трафик.
Отправка DNS-запросов на DNS-серверы IPv4
Используйте dns resolve4
для разрешения имени хоста в сети IPv4. Адрес DNS-сервера также может быть адресом IPv4:
> 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
Можно установить TCP-соединения между конечным устройством и хостами в сети IPv4.
Предположим, что IP-адрес вашего хоста Linux IPv4 — 192.168.0.2
.
На хосте Linux IPv4 используйте nc
для прослушивания TCP-соединений:
$ nc -l 0.0.0.0 12345
С конечного устройства Thread установите TCP-соединение и отправьте сообщения на хост Linux IPv4:
> 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 выводит:
hello
Вы также можете отправлять сообщения с хоста Linux IPv4 на конечное устройство Thread. Введите «world» и нажмите Enter на хосте Linux IPv4, на котором работает nc
, и ваше конечное устройство Thread выведет:
TCP: Received 6 bytes: world
Общайтесь по UDP
Можно обмениваться данными с помощью UDP между устройствами Thread и хостами в сети IPv4.
Предположим, что IP-адрес вашего хоста Linux IPv4 — 192.168.0.2
.
Используйте nc
для прослушивания UDP-соединений:
$ nc -u -l 0.0.0.0 12345
С конечного устройства потока установите UDP-соединение и отправьте сообщения на хост Linux IPv4:
> 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 выводит:
hello
Вы также можете отправлять сообщения с хоста Linux IPv4 на конечное устройство Thread. Введите «world» и нажмите Enter на хосте Linux IPv4, на котором работает nc
, и ваше конечное устройство Thread выведет:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. Включите NAT64 на пограничном маршрутизаторе.
Вы можете включить или отключить NAT64 в любое время. Используйте nat64 disable
, чтобы отключить NAT64. И используйте nat64 state
для проверки состояния NAT64.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
После отключения устройство больше не публикует префикс NAT64:
$ 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
Кроме того, устройства в сети Thread больше не могут получить доступ к хосту IPv4 через этот пограничный маршрутизатор.
Из интерфейса командной строки нашего конечного устройства Thread:
> ping 8.8.8.8 Error 13: InvalidState
Используйте nat64 enable
, чтобы включить NAT64. Прежде чем менеджер префиксов начнет объявлять префикс NAT64, может пройти некоторое время:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
Через несколько секунд компоненты NAT64 должны быть готовы к работе:
$ 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 очистит таблицу сопоставления:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ Done
6. Поздравления
Поздравляем, вы успешно настроили граничный маршрутизатор с поддержкой NAT64 и использовали его для предоставления доступа в Интернет конечным устройствам Thread!
дальнейшее чтение
- Руководства по OpenThread
- Справочник командной строки OpenThread
- Справочник по API OpenThread для NAT64