Cài đặt và Cấu hình srsRAN trên VM riêng biệt
Chúng ta sẽ triển khai phần mềm srsRAN trên một máy ảo (VM) Linux riêng biệt để đóng vai trò là gNB (Next Generation NodeB) vật lý. Bước này bao gồm việc cài đặt các thư viện phụ thuộc và build mã nguồn từ repository chính thức.
Trên VM đã chuẩn bị ở phần trước (cài Ubuntu 22.04 LTS, cấp quyền root), thực hiện lệnh cập nhật và cài đặt các công cụ build cần thiết.
apt update && apt install -y git cmake build-essential libboost-all-dev libfftw3-dev libgmp-dev libmpfr-dev libgsl-dev libsqlite3-dev libmbedtls-dev libmbedtls-dev libmbedtls-dev python3-pip
Kết quả mong đợi: Hệ thống báo cáo không có lỗi, tất cả package được cài đặt thành công.
Tiếp theo, clone mã nguồn srsRAN từ GitHub. Chúng ta cần chọn đúng version ổn định (release) để đảm bảo tính tương thích với phần cứng SDR.
git clone --recursive https://github.com/srsRAN/srsRAN.git
Kết quả mong đợi: Thư mục srsRAN được tạo và nội dung code được tải về đầy đủ, bao gồm các submodule.
Di chuyển vào thư mục srsRAN, tạo thư mục build và cấu hình CMake để chỉ định đường dẫn cài đặt và bật các tính năng cần thiết cho 5G NR.
cd srsRAN
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/srsRAN -DENABLE_5G=ON -DENABLE_4G=OFF -DENABLE_SRSRAN_RAN=ON -DENABLE_SRSRAN_DUSK=OFF -DENABLE_SRSRAN_RRC=ON
Kết quả mong đợi: CMake hoàn tất cấu hình, báo cáo "Configuring done" và "Generating done" mà không có lỗi.
Thực hiện build và cài đặt srsRAN vào hệ thống.
make -j$(nproc)
make install
ldconfig
Kết quả mong đợi: Quá trình compile chạy xong, các binary file (srs_gnb, srs_ues) được cài vào /opt/srsRAN/bin và /opt/srsRAN/sbin.
Bước quan trọng nhất là cấu hình giao diện RF (SDR). Giả sử bạn đang sử dụng USRP hoặc ADALM-Pluto. Chúng ta cần cấu hình file để nhận diện thiết bị này.
Tạo file cấu hình chính cho srsRAN gNB. File này sẽ định nghĩa tham số vật lý và địa chỉ IP.
cat > /opt/srsRAN/etc/srsRAN/srs_gnb.yaml
Kết quả mong đợi: File cấu hình được tạo thành công tại /opt/srsRAN/etc/srsRAN/srs_gnb.yaml.
Để verify, kiểm tra xem file có tồn tại và đọc nội dung.
cat /opt/srsRAN/etc/srsRAN/srs_gnb.yaml | grep "ip:"
Kết quả mong đợi: Xuất hiện các dòng địa chỉ IP đã cấu hình cho F1C và F1U.
Cấu hình OAI gNB để kết nối với srsRAN
Trong kịch bản này, chúng ta sẽ sử dụng srsRAN làm phần cứng RF (Radio Unit - RU) và OAI làm phần mềm gNB (Centralized Unit - CU). Tuy nhiên, để đơn giản hóa kiến trúc trong phần 4 này, chúng ta sẽ cấu hình srsRAN chạy trực tiếp ở chế độ gNB hoàn chỉnh (CU + DU + RU) hoặc cấu hình OAI gNB để giao tiếp với srsRAN qua giao diện F1 nếu bạn muốn tách biệt.
Để phù hợp với yêu cầu "Xây dựng RAN với srsRAN và OAI", chúng ta sẽ giả định mô hình Hybrid: srsRAN đóng vai trò là Radio Unit (RU) và OAI đóng vai trò là Distributed Unit (DU) + Centralized Unit (CU). Điều này đòi hỏi srsRAN chạy ở chế độ "Remote Radio Unit" và OAI gNB cấu hình để nhận dữ liệu từ srsRAN qua Ethernet.
Trước tiên, chúng ta cần build OAI gNB (srsRAN và OAI đều dựa trên OAI framework, nhưng ở đây dùng OAI source code riêng cho phần mềm CU/DU).
cd /opt
git clone https://github.com/openairinterface/OAI.git
cd OAI
git checkout 5G_NG
./build_oai.sh
Kết quả mong đợi: Script build chạy, compile OAI 5G Core và gNB. Lưu ý: Quá trình này có thể mất 10-15 phút.
Tuy nhiên, để đảm bảo tính tương thích cao nhất với srsRAN hiện đại, cách tiếp cận tốt nhất là dùng srsRAN làm gNB hoàn chỉnh (như đã cấu hình ở phần trên) và kết nối trực tiếp đến OAI Core (AMF/UPF) qua giao diện F1. Nếu bạn muốn dùng OAI làm gNB phần mềm và srsRAN làm RU, bạn cần cấu hình srsRAN ở chế độ "RAN" (Remote Radio) và OAI ở chế độ "gNB".
Ở đây, chúng ta sẽ thực hiện theo kiến trúc chuẩn Open RAN: srsRAN là gNB (CU+DU+RU) và OAI là Core. Nhưng để đáp ứng yêu cầu "OAI gNB", chúng ta sẽ cấu hình OAI gNB để nó nhận diện srsRAN như một RU qua giao diện eCPRI hoặc OAI-internal.
Giả sử chúng ta dùng OAI gNB (phần mềm) và srsRAN làm RU. Cấu hình file cho OAI gNB (srsRAN gNB đã cấu hình ở trên sẽ đóng vai trò là Core hoặc chúng ta cần một VM thứ 3 cho OAI gNB). Để đơn giản hóa tutorial này, chúng ta sẽ cấu hình srsRAN gNB (đã build ở trên) để kết nối trực tiếp với OAI Core (AMF) qua giao diện F1, đây là cách phổ biến nhất.
Nếu bạn bắt buộc phải dùng OAI làm gNB phần mềm, hãy chạy lệnh sau trên VM OAI-gNB (giả định VM này đã cài OAI source code).
cd /opt/OAI/targets/5G_NR/gNB/build
make run_gnb
Tuy nhiên, để khớp với cấu hình srsRAN đã làm ở phần trên, chúng ta sẽ điều chỉnh file cấu hình của OAI gNB (nếu có) hoặc sử dụng srsRAN làm gNB duy nhất. Để đảm bảo tính chính xác và khả năng chạy được, chúng ta sẽ tập trung vào việc cấu hình srsRAN gNB (đã làm ở phần trên) giao tiếp với OAI Core.
Nếu bạn muốn dùng OAI gNB (phần mềm) để điều khiển srsRAN (RU), bạn cần cấu hình file `srs_gnb.yaml` của srsRAN ở chế độ RU (Remote Unit) và file cấu hình của OAI gNB để nhận diện RU đó.
Chuyển sang chế độ RU cho srsRAN (nếu cần tách biệt CU/DU).
cat > /opt/srsRAN/etc/srsRAN/srs_ru.yaml
Kết quả mong đợi: File cấu hình RU được tạo.
Khởi động srsRAN ở chế độ RU để chờ kết nối từ OAI gNB (CU).
/opt/srsRAN/bin/srs_ru -c /opt/srsRAN/etc/srsRAN/srs_ru.yaml
Kết quả mong đợi: Console hiển thị "Remote Unit started successfully" và đang lắng nghe kết nối.
Trên VM chạy OAI gNB (CU), cấu hình file để nhận diện srsRAN RU.
cat > /opt/OAI/etc/srs_gnb.yaml
Kết quả mong đợi: File cấu hình OAI gNB được tạo.
Khởi động OAI gNB (CU) để kết nối với srsRAN RU.
cd /opt/OAI/targets/5G_NR/gNB/build
./run_gnb -c /opt/OAI/etc/srs_gnb.yaml
Kết quả mong đợi: OAI gNB hiển thị "Connected to RU" và "F1-C setup request sent".
Thiết lập đường truyền F1 (F1-C và F1-U) giữa gNB và Core Network
Đường truyền F1 bao gồm hai phần: F1-Control (F1-C) dùng cho tín hiệu điều khiển (RRC, NGAP) và F1-User (F1-U) dùng cho dữ liệu người dùng (GTP-U). Giao thức GTP-U chạy trên UDP port 2152.
Đảm bảo rằng firewall trên VM gNB (srsRAN hoặc OAI) và VM Core (OAI AMF/UPF) cho phép traffic qua các port này.
ufw allow 38412/tcp
ufw allow 38413/udp
ufw allow 2152/udp
Kết quả mong đợi: UFW báo "rules updated".
Trên VM Core (OAI AMF/UPF từ Phần 3), cần cấu hình để chấp nhận kết nối từ gNB. File cấu hình của OAI AMF cần chỉ định địa chỉ IP của gNB.
cat > /opt/OAI/etc/amf.yaml
Kết quả mong đợi: File amf.yaml được cập nhật.
Khởi động lại OAI AMF để áp dụng cấu hình mới.
cd /opt/OAI/targets/5G_NR/amf/build
./run_amf -c /opt/OAI/etc/amf.yaml
Kết quả mong đợi: Console AMF hiển thị "AMF started" và "Listening on 192.168.10.30:38412".
Trên VM gNB, kiểm tra trạng thái kết nối F1-C. Nếu sử dụng srsRAN gNB (chế độ hoàn chỉnh), log sẽ hiển thị "F1 setup request sent" và "F1 setup response received".
tail -f /var/log/srsRAN/gnb.log | grep "F1"
Kết quả mong đợi: Thấy dòng "F1 setup response received" và "F1-C connection established".
Kiểm tra kết nối F1-U (GTP-U). Sử dụng tool `tcpdump` trên VM Core để xem packet GTP-U từ gNB.
tcpdump -i eth1 -n udp port 2152 -s 0 -X
Kết quả mong đợi: Thấy các packet GTP-U từ IP của gNB (192.168.10.20) gửi đến IP của UPF (192.168.10.40).
Cấu hình tham số vật lý: Bandwidth, Frequency Band và Số lượng Cell
Tham số vật lý là yếu tố quyết định đến khả năng tương thích giữa thiết bị UE và mạng RAN. Chúng ta sẽ điều chỉnh các tham số này trong file cấu hình srsRAN (hoặc OAI gNB).
Giả sử bạn muốn thay đổi Bandwidth từ 100MHz xuống 20MHz và thay đổi Frequency Band về 2.6 GHz (Band n78).
Chỉnh sửa file cấu hình srs_gnb.yaml (hoặc file tương ứng).
cat > /opt/srsRAN/etc/srsRAN/srs_gnb.yaml
Kết quả mong đợi: File được ghi đè với các tham số mới.
Khởi động lại srsRAN gNB để áp dụng thay đổi.
pkill srs_gnb
/opt/srsRAN/bin/srs_gnb -c /opt/srsRAN/etc/srsRAN/srs_gnb.yaml
Kết quả mong đợi: Console hiển thị "Physical layer configured: BW=20MHz, Freq=2.6GHz, SCS=30kHz".
Để kiểm tra số lượng cell (sector), nếu bạn muốn mở rộng lên 3 cell (360 độ coverage), thay đổi tham số `nr_cells: 3` và cấu hình offset tần số cho mỗi cell nếu cần.
# Ví dụ cấu hình 3 cell (giả định)
cat >> /opt/srsRAN/etc/srsRAN/srs_gnb.yaml
Kết quả mong đợi: srsRAN khởi động với 3 sector logic (tùy thuộc vào khả năng phần cứng SDR).
Verify tham số vật lý bằng cách xem log khởi động hoặc dùng lệnh `srs_gnb --show-config` (nếu version hỗ trợ).
grep -A 5 "nr:" /opt/srsRAN/etc/srsRAN/srs_gnb.yaml
Kết quả mong đợi: Hiển thị các giá trị bandwidth, frequency, numerology đã cấu hình.
Kiểm tra liên kết RRC và trạng thái kết nối giữa UE và gNB
Bước cuối cùng là kiểm tra xem một thiết bị UE (User Equipment) có thể thực hiện RRC Setup và kết nối thành công với gNB hay không.
Trên VM chạy srsRAN (hoặc VM khác), chạy srsRAN UE để mô phỏng thiết bị di động.
cat > /opt/srsRAN/etc/srsRAN/srs_ues.yaml
Kết quả mong đợi: File cấu hình UE được tạo.
Khởi động srsRAN UE.
/opt/srsRAN/bin/srs_ues -c /opt/srsRAN/etc/srsRAN/srs_ues.yaml
Kết quả mong đợi: Console hiển thị quá trình "Cell search", "Synchronization", "RRC Setup Request", và cuối cùng là "RRC Setup Complete".
Trên VM gNB, kiểm tra log để xác nhận kết nối RRC từ UE.
tail -f /var/log/srsRAN/gnb.log | grep "RRC"
Kết quả mong đợi: Thấy dòng "RRC Setup Request received from UE 1" và "RRC Setup sent to UE 1".
Kiểm tra trạng thái kết nối thực tế bằng cách ping từ UE đến mạng Core (nếu đã cấu hình PDU Session).
# Trên VM chạy srs_ues, giả sử có interface data
ping -c 4 192.168.10.30
Kết quả mong đợi: Ping thành công, hiển thị "64 bytes from 192.168.10.30: icmp_seq=1 ttl=64 time=0.5 ms".
Để kiểm tra chi tiết hơn về trạng thái RRC, có thể dùng `srs_gnb` command line tool (nếu có) hoặc xem log OAI AMF.
tail -f /var/log/oai/amf.log | grep "Registration"
Kết quả mong đợi: Thấy dòng "Registration Request received from UE 1" và "Registration Accept sent".
Đ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 3: Triển khai 5G Core Network (CUPS) với OAI trên container
Phần 5: Cấu hình bảo mật mạng và định tuyến cho IoT công nghiệp »