1. Chuẩn bị và Cấu hình USIM cho Thiết bị IoT
Trước khi thiết bị IoT có thể kết nối vào mạng 5G, bạn cần nạp thông tin định danh (IMSI, Ki, OpC) vào thẻ SIM hoặc cấu hình eSIM. Trong môi trường Open RAN (OAI/srsRAN), chúng ta thường dùng file USIM ảo hoặc thẻ SIM vật lý nhúng vào module modem.
Cấu hình file USIM cho OAI 5G Core
Bạn cần tạo file USIM chứa thông tin đăng ký đã được định nghĩa trong cơ sở dữ liệu của OAI Core (thường là trong file nas_configuration.json hoặc subscription_db.csv ở Phần 3). Dưới đây là ví dụ tạo file USIM cho một thiết bị IoT với IMSI cụ thể.
Tạo file cấu hình USIM tại đường dẫn /root/usim_data/usim_iot_001.dat trên máy ảo hoặc container chứa modem ảo (srsUE hoặc thiết bị vật lý).
cat > /root/usim_data/usim_iot_001.dat
Kết quả mong đợi: File usim_iot_001.dat được tạo thành công, chứa đầy đủ thông tin xác thực để modem có thể thực hiện quy trình Attach.
Mount USIM vào thiết bị IoT (Modem)
Nếu bạn sử dụng srsUE (User Equipment ảo) để mô phỏng IoT, hãy chỉ định file USIM này trong cấu hình của srsUE. Nếu dùng thiết bị vật lý (như Quectel RM500Q), bạn cần dùng lệnh AT hoặc công cụ của nhà sản xuất để nạp file này vào bộ nhớ eSIM.
Dưới đây là đoạn cấu hình trong file usim_config.yaml cho srsUE để load file USIM vừa tạo:
cat > /etc/srsRAN/usim_config.yaml
Kết quả mong đợi: srsUE khởi động và nhận diện được USIM, sẵn sàng để thực hiện quá trình Attach khi có tín hiệu gNB.
2. Cài đặt và Cấu hình Ứng dụng IoT (MQTT/CoAP)
Sau khi có SIM, thiết bị IoT cần một ứng dụng để gửi dữ liệu. Trong môi trường công nghiệp, giao thức MQTT (Message Queuing Telemetry Transport) là tiêu chuẩn phổ biến nhất do nhẹ và hỗ trợ Publish/Subscribe.
Triển khai Client MQTT trên Linux Container
Cài đặt gói mosquitto-clients trên container IoT. Giả sử container này đã được cấu hình mạng để có thể truy cập vào IP của Broker MQTT (đã được deploy trong phần trước hoặc trên máy chủ nội bộ).
apt-get update && apt-get install -y mosquitto-clients curl net-tools
Kết quả mong đợi: Các gói công cụ MQTT và mạng được cài đặt thành công, không có lỗi dependency.
Cấu hình Script Gửi Dữ liệu IoT
Tạo một script shell đơn giản để mô phỏng cảm biến nhiệt độ/độ ẩm gửi dữ liệu lên broker MQTT mỗi 5 giây. Script này sẽ kết nối qua IP của Core Network (UPF) hoặc gateway nội bộ.
Tạo file script tại /opt/iot/scripts/send_sensor_data.sh:
cat > /opt/iot/scripts/send_sensor_data.sh
Cấp quyền thực thi cho script:
chmod +x /opt/iot/scripts/send_sensor_data.sh
Kết quả mong đợi: Script được tạo và có quyền thực thi. Khi chạy, nó sẽ bắt đầu gửi payload JSON định kỳ.
3. Thực hiện Quy trình Attach và Thiết lập Session
Bước này là then chốt: Thiết bị IoT (UE) phải thực hiện quy trình Attach Request lên gNB, sau đó gNB chuyển tiếp đến AMF (OAI), xác thực qua AUSF/UDM, và cuối cùng thiết lập PDU Session qua SMF/UPF.
Kích hoạt Modem và chờ tín hiệu gNB
Trên thiết bị IoT (srsUE hoặc modem vật lý), khởi động lại dịch vụ modem hoặc chạy lệnh để kích hoạt radio.
systemctl restart srsUE
# Hoặc nếu chạy trực tiếp command
srsRAN/srsUE --config /etc/srsRAN/srsUE_config.yaml
Quan sát log để xác nhận việc tìm thấy gNB (gNB Discovery) và bắt đầu quy trình Attach.
tail -f /var/log/srsRAN/srsUE.log | grep -E "Attach|PLMN|SIB1|RRC"
Kết quả mong đợi: Bạn thấy log hiển thị PLMN detected, SIB1 decoded, và Attach Request sent. Thiết bị đã nhận diện được mạng 5G.
Giám sát quy trình Attach trên OAI Core
Đồng thời, trên container OAI Core (AMF), hãy kiểm tra log để xem yêu cầu Attach từ thiết bị IoT có đến không và quá trình xác thực (Authentication) có thành công không.
tail -f /var/log/oai/amf.log | grep "IMSI: 208091000000001"
Kết quả mong đợi: Log hiển thị Registration Request received, Authentication Challenge, Authentication Success, và cuối cùng là Session Established hoặc PDU Session Setup Accept.
Xác nhận IP Address được cấp phát
Khi session thiết lập xong, thiết bị IoT sẽ nhận được một địa chỉ IP từ pool của UPF (thường là mạng riêng như 10.50.x.x).
ip addr show | grep "inet " | grep -v "127.0.0.1"
Kết quả mong đợi: Bạn thấy một địa chỉ IP mới (không phải IP quản trị của container), ví dụ: inet 10.50.0.5/24. Đây là IP của thiết bị IoT trong mạng 5G Core.
4. Kiểm tra Luồng Dữ liệu: IoT -> gNB -> UPF -> Server
Bây giờ ta kiểm tra xem dữ liệu gửi từ script MQTT có đi xuyên suốt hạ tầng 5G và đến được máy chủ đích hay không.
Kiểm tra kết nối mạng từ IoT đến Broker
Trước khi chạy script gửi dữ liệu, hãy thử ping từ thiết bị IoT đến IP của MQTT Broker (10.50.0.10) để đảm bảo định tuyến từ UPF ra mạng nội bộ đã đúng.
ping -c 4 10.50.0.10
Kết quả mong đợi: 4 packets transmitted, 4 received, 0% packet loss. Nếu ping thất bại, hãy kiểm tra cấu hình route trong UPF hoặc firewall.
Chạy ứng dụng IoT và giám sát Broker
Mở một terminal mới trên thiết bị IoT để chạy script đã tạo ở Phần 2. Sau đó, trên máy chủ MQTT Broker, dùng lệnh mosquitto_sub để lắng nghe dữ liệu.
Trên thiết bị IoT:
/opt/iot/scripts/send_sensor_data.sh &
Trên máy chủ MQTT Broker (hoặc một máy khác trong mạng nội bộ):
mosquitto_sub -h 0.0.0.0 -t "factory/zone1/#" -v
Kết quả mong đợi: Trên terminal Broker, bạn thấy liên tục xuất hiện các dòng dữ liệu JSON chứa nhiệt độ, độ ẩm và timestamp được gửi từ thiết bị IoT qua mạng 5G.
Định tuyến và Kiểm tra Luồng (Optional: Wireshark/tcpdump)
Để xác minh chính xác gói tin đi qua gNB và UPF, hãy chạy tcpdump trên giao diện mạng của UPF (thường là eth1 hoặc data_if tùy cấu hình).
tcpdump -i eth1 -n host 10.50.0.5 and port 1883
Kết quả mong đợi: Bạn thấy các gói tin TCP hoặc UDP (tùy MQTT dùng giao thức nào, thường là TCP port 1883) với nguồn IP là IP của thiết bị IoT (10.50.0.5) và đích là Broker.
5. Đo lường Chỉ số Hiệu năng (Latency, Throughput, Packet Loss)
Đối với IoT công nghiệp, các chỉ số này quyết định tính khả dụng của hệ thống. Chúng ta sẽ đo trên đường truyền thực tế qua 5G.
Đo Latency (Độ trễ)
Sử dụng lệnh ping với thời gian thực hiện dài hơn và phân tích độ trễ trung bình. Độ trễ trong mạng 5G lý tưởng nên dưới 10ms (trong mạng riêng), nhưng trong môi trường mô phỏng/container có thể cao hơn (20-50ms).
ping -c 100 10.50.0.10 | tail -1
Kết quả mong đợi: Dòng cuối cùng hiển thị thống kê, ví dụ: round-trip min/avg/max/stddev = 12.5/18.3/45.2/5.1 ms. Giá trị avg là độ trễ trung bình.
Đo Throughput (Tốc độ truyền dữ liệu)
Sử dụng iperf3 để đo băng thông. Cần cài đặt iperf3 trên cả thiết bị IoT (client) và máy chủ (server).
Trên máy chủ (chạy ở chế độ server):
iperf3 -s -p 5201
Trên thiết bị IoT (chạy client, gửi dữ liệu trong 30 giây):
iperf3 -c 10.50.0.10 -p 5201 -t 30 -P 4
Kết quả mong đợi: Kết quả hiển thị sent 1.2 GBytes và 0.00 Mbits/sec (hoặc giá trị thực tế). Ví dụ: 100.5 Mbits/sec. Giá trị này cho biết băng thông tối đa mà link 5G có thể hỗ trợ.
Đo Packet Loss (Tỷ lệ mất gói)
Trong môi trường Open RAN, packet loss thường do xung đột sóng hoặc tải cao. Chạy test trong thời gian dài (ví dụ 5 phút) để có số liệu chính xác.
ping -c 5000 10.50.0.10 | grep "packet loss"
Kết quả mong đợi: Tỷ lệ packet loss nên < 0.1% cho ứng dụng IoT thời gian thực. Nếu > 1%, cần kiểm tra lại cấu hình gNB (scheduling, power control) hoặc tải của UPF.
Tổng hợp báo cáo hiệu năng
Tạo một file log đơn giản để lưu trữ kết quả đo lường này cho báo cáo sau này.
cat > /opt/iot/reports/performance_report.txt /dev/null | grep "packet loss")
3. Throughput Test (iperf3, 30s):
$(iperf3 -c 10.50.0.10 -p 5201 -t 30 -P 4 2>/dev/null | grep "bits/sec" | tail -1)
EOF
Kết quả mong đợi: File performance_report.txt được tạo và chứa các số liệu đo lường thực tế của hệ thống 5G Private Network.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Private 5G Network (Open RAN) với OAI, srsRAN và CUPS trên hạ tầng Proxmox để kết nối IoT công nghiệp an toàn
« Phần 5: Cấu hình bảo mật mạng và định tuyến cho IoT công nghiệp
Phần 7: Giám sát hệ thống và tối ưu hóa hiệu năng mạng »