Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Bộ định tuyến biên luồng – Cung cấp quyền truy cập Internet qua NAT64

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

1. Giới thiệu

7299534792dd9439.pngs

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:

c3cd2e081bc052fd.png.

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 1NAT64_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

Tài liệu tham khảo