BlogHướng dẫn dựng lab LTE ảo hóa hoàn toàn (Open5GS + srsRAN qua ZMQ)
Bố cục bài viết
Trang này
Ngày tạo
09/09/2026
Cập nhật
Lượt xem
9
Đọc
6m
Hướng dẫn dựng lab LTE ảo hóa hoàn toàn (Open5GS + srsRAN qua ZMQ)
Tài liệu này tổng hợp toàn bộ lộ trình dựng một mạng LTE (4G) ảo hóa hoàn toàn — không cần phần cứng SDR (USRP), không phát sóng RF thật — để quan sát chi tiết các luồng báo hiệu ở lớp radio: Random Access (MSG1-MSG5), RRC (Paging, Connection Setup), NAS (Attach), và trạng thái IDLE/CONNECTED.
Mục tiêu
- Dựng đầy đủ EPC + eNB + UE trên một máy duy nhất
- Quan sát toàn bộ chuỗi bản tin từ lúc UE Attach đến khi nhận dữ liệu downlink
- Bắt gói (pcap) ở cả lớp radio (UE↔eNB) và lớp lõi mạng (eNB↔MME)
- Kiểm tra chuyển trạng thái IDLE ⟷ CONNECTED
0. Yêu cầu môi trường
| Thành phần | Yêu cầu |
|---|---|
| Hệ điều hành | Ubuntu 22.04 LTS (khuyến nghị — được hầu hết tài liệu cộng đồng hỗ trợ) |
| CPU | Đa nhân (xử lý PHY qua ZMQ vẫn cần đúng nhịp thời gian thực) |
| RAM | Tối thiểu 8GB |
| Quyền | sudo/root để cài đặt và chạy |
Không cần bất kỳ phần cứng SDR (USRP) nào — toàn bộ lớp vô tuyến được thay thế bằng socket ZeroMQ.
1. Dựng lõi mạng (EPC) — Open5GS
Cài đặt
sudo add-apt-repository ppa:open5gs/latest
sudo apt update
sudo apt install open5gs
sudo apt install open5gs-webui
Cấu hình subscriber test
- Truy cập WebUI quản lý subscriber:
http://localhost:9999 - Thêm 1 subscriber test với:
- IMSI (ví dụ:
999700000000001) - Ki (khóa xác thực)
- OPc (Operator variant algorithm configuration)
- APN test (ví dụ:
internet)
- IMSI (ví dụ:
Các giá trị này phải khớp chính xác với cấu hình phía UE ảo (srsUE) ở bước sau.
Các thành phần Open5GS đang chạy
sudo systemctl status open5gs-mmed
sudo systemctl status open5gs-sgwcd
sudo systemctl status open5gs-smfd
sudo systemctl status open5gs-hssd
2. Dựng eNB ảo hóa — srsENB
Cài đặt srsRAN
sudo apt install cmake build-essential libfftw3-dev libmbedtls-dev \
libboost-program-options-dev libconfig++-dev libsctp-dev
git clone https://github.com/srsran/srsRAN_4G.git
cd srsRAN_4G
mkdir build && cd build
cmake ../
make -j$(nproc)
sudo make install
sudo ldconfig
Cấu hình eNB (enb.conf)
[enb]
mme_addr = 127.0.1.100 ; địa chỉ MME của Open5GS
gtp_bind_addr = 127.0.1.1
s1c_bind_addr = 127.0.1.1
[rf]
device_name = zmq
device_args = fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6
[pcap]
enable = true
filename = /tmp/enb_mac.pcap
s1ap_enable = true
s1ap_filename = /tmp/enb_s1ap.pcap
Lưu ý:
tx_port/rx_portphải khớp ngược lại với cấu hình phía UE ở bước 3 để 2 bên “gặp nhau” qua socket ZMQ.
3. Dựng UE ảo hóa — srsUE
Cấu hình UE (ue.conf)
[usim]
mode = soft
algo = milenage
imsi = 999700000000001 ; phải khớp với subscriber đã thêm ở Open5GS
k = <Ki đã cấu hình>
opc = <OPc đã cấu hình>
[rf]
device_name = zmq
device_args = tx_port=tcp://*:2001,rx_port=tcp://localhost:2000,id=ue,base_srate=23.04e6
[pcap]
enable = true
filename = /tmp/ue_mac.pcap
nas_enable = true
nas_filename = /tmp/ue_nas.pcap
4. Khởi chạy toàn bộ hệ thống
Chạy theo đúng thứ tự sau (mỗi lệnh 1 terminal riêng):
# Terminal 1: đảm bảo Open5GS đã chạy (thường tự khởi động dạng service)
sudo systemctl status open5gs-mmed
# Terminal 2: chạy eNB ảo
sudo srsenb enb.conf
# Terminal 3: chạy UE ảo
sudo srsue ue.conf
Xác minh Attach thành công
Theo dõi log terminal của srsue, tìm các dòng xác nhận đúng trình tự:
Random Access Complete
RRC Connected
NAS Attach/Default EPS Bearer Setup Complete
5. Kiểm tra trạng thái IDLE / CONNECTED
Quan sát trực tiếp qua log srsUE
RRC Connected → UE vừa chuyển sang CONNECTED
RRC IDLE → UE vừa chuyển về IDLE (do hết rrc-InactivityTimer)
Rút ngắn thời gian chờ để dễ quan sát
[expert]
rrc_inactivity_timer = 5000 ; đơn vị ms, giảm xuống để test nhanh
Kích hoạt lại Paging (mô phỏng dữ liệu/SMS đến khi UE đang IDLE)
ping <IP-được-cấp-cho-UE-qua-P-GW>
Lệnh này kích hoạt đúng cơ chế Downlink Data Notification → S1AP Paging → RRC Paging (PCCH) → Service Request — cùng luồng báo hiệu mà SMS/VoLTE sử dụng, chỉ khác ở payload cuối cùng.
6. Thu thập và phân tích PCAP
Các điểm bắt gói
| Điểm | Cách bắt | File/công cụ |
|---|---|---|
| Lớp radio (UE↔eNB) | Cấu hình sẵn trong enb.conf/ue.conf | enb_mac.pcap, ue_mac.pcap, ue_nas.pcap |
| S1AP (eNB↔MME) | Cấu hình sẵn hoặc bắt trực tiếp | enb_s1ap.pcap, hoặc sudo tcpdump -i lo -w s1ap.pcap sctp |
| Giao diện lõi khác (S11, S5/S8, SGi) | Bắt trực tiếp bằng tcpdump | sudo tcpdump -i <iface> -w s11.pcap gtp |
Mở bằng Wireshark
- Mở file
enb_mac.pcap - Vào Edit → Preferences → Protocols → MAC-LTE, bật
Attempt to dissect erroneous PDUs - Bật thêm preferences tương ứng cho RLC-LTE và PDCP-LTE
Wireshark sẽ tự động bóc tách lồng nhau: MAC → RLC → PDCP → RRC — hiển thị đúng cấu trúc PagingRecord, RRCConnectionSetup, RRCConnectionSetupComplete…
Lọc theo định danh cụ thể (nếu có nhiều UE)
lte-rrc.c_RNTI == 0x1001
7. Lưu ý về mã hóa khi phân tích PCAP
Sau khi SecurityModeCommand hoàn tất, nội dung RRC/NAS trong file pcap sẽ ở dạng đã mã hóa (Wireshark không hỗ trợ giải mã ciphering LTE, kể cả khi biết khóa). Có 2 cách để xem nội dung dạng rõ phục vụ học tập:
| Cách | Ghi chú |
|---|---|
| Chỉ xem bản tin trước SecurityModeCommand | RRCConnectionRequest, AttachRequest ban đầu vẫn ở dạng rõ |
Tắt mã hóa để test: đặt thuật toán = EEA0/EIA0 (null algorithm) | Cấu hình trong mme.yaml của Open5GS — chỉ dùng trong lab riêng, tuyệt đối không áp dụng với mạng thật |
8. Mở rộng (nâng cao): thêm SMSC thật để gửi SMS thật
Muốn quan sát đúng bản tin CP-DATA chứa SMS thật (không chỉ mô phỏng bằng ping), cần thêm 1 MSC giả lập kết nối với MME qua giao diện SGs:
- Dự án Osmocom (
osmo-msc) hỗ trợ việc này, nhưng đòi hỏi cấu hình thêm HLR riêng và giao diện SGsAP - Đây là bước phức tạp nhất trong toàn bộ lộ trình — cần tìm hiểu thêm theo tài liệu chính thức của Osmocom nếu muốn triển khai đầy đủ
Tóm tắt lộ trình
- Cài Open5GS → thêm subscriber test (IMSI/Ki/OPc)
- Cài srsRAN → cấu hình eNB với
device_name = zmq - Cấu hình UE khớp IMSI/Ki/OPc, cũng dùng
device_name = zmq - Chạy EPC → eNB → UE theo thứ tự, xác minh Attach qua log
- Bật pcap, kiểm tra chuyển IDLE/CONNECTED qua log và Wireshark
- Ping để kích hoạt Paging, quan sát toàn bộ chuỗi bản tin
- (Nâng cao) Thêm osmo-msc để gửi SMS thật qua SGs