1. Giới thiệu
Chuỗi là gì?
Luồng là một giao thức mạng lưới không dây công suất thấp dựa trên IP, giúp cho việc giao tiếp an toàn giữa các thiết bị với nhau. Mạng luồng có thể thích ứng với các thay đổi về cấu trúc liên kết để tránh lỗi một điểm.
OpenThread là gì?
OpenThread do Google phát hành là một phương thức triển khai nguồn mở của Thread®.
Bộ định tuyến biên luồng OpenThread là gì?
OpenThread Border Router (OTBR) do Google phát hành là phương thức triển khai nguồn mở của Bộ định tuyến Đường viền Chuỗi.
NAT64
NAT64 là cơ chế cho phép các máy chủ trong mạng chỉ IPv6 truy cập vào tài nguyên trong mạng IPv4. Cổng NAT64 là công cụ dịch giữa giao thức IPv4 và giao thức IPv6.
Trình biên dịch NAT64, là một phần của Bộ định tuyến đường viền OpenThread, hỗ trợ dịch các giao thức TCP, UDP và ICMP (ICMPv6).
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ thiết lập một Bộ định tuyến đường viền OpenThread và một thiết bị Luồng, sau đó bật và xác minh thông tin giao tiếp giữa các thiết bị Luồng và máy chủ IPv4 trên Internet thông qua Bộ định tuyến đường viền OpenThread.
Kiến thức bạn sẽ học được
- Cách xây dựng Bộ định tuyến Openthread Border với các tính năng NAT64.
- Cách giao tiếp với các máy chủ IPv4 từ thiết bị kết thúc Luồng.
Những gì bạn cần
- Một máy trạm Linux, để xây dựng và cài đặt ROM NCP, OpenThread CLI và kiểm tra kết nối IPv4.
- Raspberry Pi 4 có RAM 4 GB cho bộ định tuyến đường viền Thread. Máy trạm Linux của bạn phải có thể truy cập được qua IPv4 từ thiết bị này.
- 2 bảng DRF bán dẫn nRF52840.
Cấu trúc liên kết mạng cho lớp học lập trình này:
2. Thiết lập bộ định tuyến đường viền OpenThread
Làm theo bước Thiết lập OTBR của Bộ định tuyến đường viền luồng – Lớp học lập trình kết nối IPv6 hai chiều và Khám phá dịch vụ dựa trên DNS để tạo bộ định tuyến đường viền OpenThread, với thay đổi sau:
Trong phần Tạo và cài đặt OTBR, bạn cần yêu cầu tập lệnh để bật trình biên dịch NAT64 trong OpenThread bằng cách đặt biến môi trường NAT64
thành 1
và NAT64_SERVICE
thành openthread
. Chạy lệnh sau trước bước:
$ export NAT64=1 NAT64_SERVICE=openthread
Tiếp tục với lớp học lập trình Bộ định tuyến đường viền – Kết nối IPv6 hai chiều và Khám phá dịch vụ dựa trên DNS như đã viết. Sau khi Tạo mạng Thread, bạn có thể xác minh rằng bộ định tuyến biên đang phát hành một tiền tố NAT64 bằng các lệnh OpenThread CLI.
Trước tiên, hãy đảm bảo bộ định tuyến biên của chúng tôi được thiết lập và chạy, cũng như bật NAT64 trên bộ định tuyến biên:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
Chúng ta sẽ thấy rằng OTBR đang hoạt động như một biến thể dẫn đầu và có tiền tố NAT64 (trong trường hợp của chúng ta là fd4c:9574:3720:2:0:0::/96
) trong Dữ liệu mạng luồng:
$ 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
Tiền tố NAT64 sẽ được các thiết bị Luồng sử dụng khi giao tiếp với một máy chủ IPv4.
3. Thiết lập thiết bị kết thúc Luồng
Làm theo bước Thiết lập FTD của mạng Xây dựng luồng với bảng nRF52840 và lớp học lập trình OpenThread để tạo và cài đặt ROM nRF52840 CLI, với thay đổi đối với bước sau:
Trong Bản dựng và flash, bạn phải thêm -DOT_DNS_CLIENT=ON
vào dòng lệnh khi gọi script/build
:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON
Tiếp tục với bài viết Xây dựng mạng Luồng có bảng mạch nRF52840 và lớp học lập trình OpenThread. Sau khi thiết bị cuối được nhấp nháy với hình ảnh CLI, hãy làm theo Bộ định tuyến đường viền - Kết nối IPv6 hai chiều và Khám phá dịch vụ dựa trên DNS để thiết lập thiết bị cuối Luồng.
Đợi vài giây sau khi thiết lập thiết bị kết thúc Luồng và xác minh xem việc tham gia Mạng chuỗi có thành công hay không. Bạn có thể tìm thấy tiền tố NAT64 từ dữ liệu mạng (trong trường hợp này là 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
Đảm bảo rằng dữ liệu mạng khớp với dữ liệu của OTBR.
4. Giao tiếp với các máy chủ IPv4 từ thiết bị cuối Chuỗi
Giờ đây, bạn có thể giao tiếp với các máy chủ trên mạng IPv4 từ thiết bị cuối mà chúng ta vừa thiết lập.
Gửi yêu cầu ICMP tới máy chủ IPv4
Từ CLI của thiết bị kết thúc Chuỗi của chúng tôi:
> 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
Bộ định tuyến biên sẽ tạo một mục ánh xạ NAT64 cho thiết bị này bằng lệnh 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
phải là địa chỉ IPv6 của thiết bị Luồng.
Hãy chạy lệnh này trên bộ định tuyến biên bất cứ lúc nào để xem cách hệ thống tính lưu lượng truy cập.
Gửi truy vấn DNS đến máy chủ DNS4
Sử dụng dns resolve4
để phân giải tên máy chủ trên mạng IPv4. Địa chỉ máy chủ DNS cũng có thể là địa chỉ 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
Giao tiếp qua TCP
Bạn có thể thiết lập kết nối TCP giữa thiết bị cuối và máy chủ lưu trữ trong mạng IPv4.
Giả sử địa chỉ IP của máy chủ IPv4 của Linux là 192.168.0.2
.
Trên máy chủ Linux IPv4 của bạn, hãy sử dụng nc
để nghe các kết nối TCP:
$ nc -l 0.0.0.0 12345
Từ thiết bị kết thúc Thread của bạn, hãy thiết lập kết nối TCP và gửi tin nhắn tới máy chủ Linux IPv4 của bạn:
> 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
Máy chủ Linux IPv4 của bạn có thể xuất ra:
hello
Bạn cũng có thể gửi tin nhắn từ máy chủ Linux IPv4 tới thiết bị kết thúc Thread. Nhập "world" và nhấn Enter trên máy chủ Linux IPv4 của bạn đang chạy nc
và thiết bị đầu ra của Thiết bị đầu ra đầu ra của bạn:
TCP: Received 6 bytes: world
Giao tiếp qua UDP
Bạn có thể giao tiếp bằng UDP giữa các thiết bị Luồng và máy chủ trong mạng IPv4.
Giả sử địa chỉ IP của máy chủ IPv4 của Linux là 192.168.0.2
.
Sử dụng nc
để nghe các kết nối UDP:
$ nc -u -l 0.0.0.0 12345
Từ thiết bị kết thúc Thread của bạn, hãy thiết lập kết nối UDP và gửi thông báo đến máy chủ Linux IPv4 của bạn:
> 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
Máy chủ Linux IPv4 của bạn có thể xuất ra:
hello
Bạn cũng có thể gửi tin nhắn từ máy chủ Linux IPv4 tới thiết bị kết thúc Thread. Nhập "world" và nhấn Enter trên máy chủ Linux IPv4 của bạn đang chạy nc
và thiết bị đầu ra của Thiết bị đầu ra đầu ra của bạn:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. Bật/tắt NAT64 trên Bộ định tuyến biên
Bạn có thể bật hoặc tắt NAT64 bất cứ lúc nào bạn muốn. Sử dụng nat64 disable
để vô hiệu hoá NAT64. Và sử dụng nat64 state
để kiểm tra trạng thái của NAT64.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
Sau khi tắt, thiết bị không còn xuất bản tiền tố NAT64 nữa:
$ 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
Ngoài ra, các thiết bị trong mạng Thread không còn truy cập được vào máy chủ IPv4 thông qua bộ định tuyến biên này.
Từ CLI của thiết bị kết thúc Chuỗi của chúng tôi:
> ping 8.8.8.8 Error 13: InvalidState
Sử dụng nat64 enable
để bật NAT64. Có thể mất một chút thời gian trước khi trình quản lý tiền tố bắt đầu quảng cáo tiền tố NAT64:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
Sau vài giây, các thành phần NAT64 sẽ được thiết lập và chạy:
$ 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
Lưu ý rằng việc tắt NAT64 sẽ xoá bảng ánh xạ:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ Done
6. Xin chúc mừng
Xin chúc mừng! Bạn đã thiết lập thành công bộ định tuyến biên với hỗ trợ NAT64 và sử dụng bộ định tuyến này để cấp quyền truy cập Internet vào các thiết bị đầu cuối!
Đọc thêm
- Hướng dẫn về OpenThread
- Tài liệu tham khảo về CLI OpenThread
- Tài liệu tham khảo về OpenThread API cho NAT64