Cấu hình mạng nội bộ cho 5G Core Network
Thiết lập giao diện mạng và định tuyến cho các thành phần Core
Bước đầu tiên là tách biệt luồng điều khiển (Control Plane) và luồng dữ liệu (User Plane) trên máy chủ vật lý hoặc VM Ubuntu nơi bạn sẽ chạy OAI Core. Chúng ta cần tạo các bridge riêng biệt hoặc cấu hình các giao diện mạng ảo để đảm bảo AMF/SMF chỉ giao tiếp qua mặt phẳng điều khiển, còn UPF xử lý traffic dữ liệu IoT.
Tạo hai bridge ảo trên Ubuntu VM để mô phỏng mạng vật lý tách biệt: một cho Control Plane (CP) và một cho User Plane (UP). Điều này giúp cách ly traffic quản lý khỏi traffic dữ liệu thực tế của thiết bị IoT, tăng tính bảo mật và hiệu năng.
sudo apt update
sudo apt install -y linux-headers-$(uname -r) bridge-utils
sudo brctl addbr br_cp
sudo brctl addbr br_up
ip addr add 192.168.100.1/24 dev br_cp
ip addr add 10.200.0.1/24 dev br_up
ip link set br_cp up
ip link set br_up up
Kết quả mong đợi: Bạn có hai giao diện mạng mới `br_cp` và `br_up` với địa chỉ IP tĩnh đã cấu hình. Kiểm tra bằng lệnh `ip addr show` để xác nhận.
Cấu hình bảng định tuyến (routing table) để đảm bảo traffic từ UPF đi ra internet hoặc mạng nội bộ được định tuyến đúng. Chúng ta cần thêm route cho mạng IoT (ví dụ: 10.45.0.0/24) đi qua giao diện UP.
ip route add 10.45.0.0/24 dev br_up
ip route add default via 192.168.100.254 dev br_cp
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
Kết quả mong đợi: Lệnh `ip route show` hiển thị route mới cho mạng IoT và khả năng forward IP packet đã được kích hoạt. Đây là điều kiện tiên quyết để UPF có thể chuyển tiếp dữ liệu.
Build OAI Core từ Source Code
Chuẩn bị môi trường build và tải mã nguồn
Để có kiểm soát cao nhất về cấu hình CUPS và các tính năng IoT, chúng ta sẽ compile OAI Core từ source thay vì dùng binary có sẵn. Môi trường build yêu cầu các gói thư viện C++ và các công cụ build tiêu chuẩn của Ubuntu 22.04.
Cài đặt các dependency cần thiết và clone repository chính thức của Open Air Interface (OAI). Lưu ý sử dụng branch `v2.0.0` hoặc branch mới nhất ổn định cho Core Network.
sudo apt install -y build-essential cmake git libboost-all-dev libfl-dev libnl-3-dev libnl-route-3-dev libpcsclite-dev libpcap-dev libzmq3-dev libprotobuf-dev protobuf-compiler python3-pip libjsoncpp-dev libyaml-cpp-dev
git clone https://github.com/openairinterface/5gsim.git
cd 5gsim
git submodule update --init --recursive
Kết quả mong đợi: Thư mục `5gsim` được tạo và chứa toàn bộ mã nguồn của OAI Core cùng các submodule cần thiết. Không có lỗi download hay thiếu package.
Compile và build các thành phần Core riêng biệt
Chúng ta sẽ build riêng biệt các thành phần AMF, SMF và UPF để dễ dàng quản lý và debug. Cấu hình CMake để bật tính năng CUPS (Control and User Plane Separation) và định nghĩa rõ các đường dẫn output.
Tạo thư mục build, chạy CMake với các flag cụ thể để enable CUPS và disable các thành phần RAN không cần thiết cho bước này (như eNB, gNB, UE) để giảm thời gian compile.
mkdir -p build && cd build
cmake .. \
-DCUPS=ON \
-DENABLE_AMF=ON \
-DENABLE_SMF=ON \
-DENABLE_UPF=ON \
-DENABLE_UE=OFF \
-DENABLE_ENB=OFF \
-DENABLE_GNB=OFF \
-DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
Kết quả mong đợi: Quá trình compile kết thúc thành công, xuất hiện các binary thực thi tại thư mục `build/5G_CORE/` bao gồm `amf`, `smf`, `upf`. Không có lỗi liên quan đến CUPS hay thiếu thư viện.
Cấu hình kiến trúc CUPS (Control & User Plane Separation)
Thiết lập file cấu hình YAML cho AMF
AMF (Access and Mobility Management Function) đóng vai trò quản lý di động và bảo mật. File cấu hình này cần định nghĩa địa chỉ IP của giao diện Control Plane và cấu hình giao tiếp với SMF qua N11 interface.
Tạo file `amf.yaml` trong thư mục cấu hình. Cấu hình `amf` để lắng nghe trên `br_cp` và chỉ định địa chỉ của SMF. Phần `n11` sẽ thiết lập kết nối giữa AMF và SMF.
mkdir -p /opt/oai-core/config
cat > /opt/oai-core/config/amf.yaml
Kết quả mong đợi: File `amf.yaml` được tạo với nội dung chính xác. AMF sẽ lắng nghe trên IP 192.168.100.1 và kết nối đến SMF tại 192.168.100.2.
Thiết lập file cấu hình YAML cho SMF
SMF (Session Management Function) chịu trách nhiệm quản lý phiên kết nối (PDU Session) và điều phối UPF. SMF cần biết địa chỉ của AMF (N11) và địa chỉ của UPF (N4) để thiết lập đường dẫn dữ liệu.
Tạo file `smf.yaml`. Cấu hình SMF để lắng nghe trên Control Plane (`br_cp`) và định nghĩa giao diện N4 để giao tiếp với UPF qua User Plane (`br_up`). Đây là bước then chốt để tách biệt luồng điều khiển và dữ liệu.
cat > /opt/oai-core/config/smf.yaml
Kết quả mong đợi: File `smf.yaml` được tạo. SMF hiểu rõ nó là cầu nối giữa AMF (192.168.100.1) và UPF (10.200.0.2), đồng thời định nghĩa DNN cho mạng IoT.
Thiết lập file cấu hình YAML cho UPF
UPF (User Plane Function) là điểm giao tiếp duy nhất với mạng dữ liệu bên ngoài. UPF cần được cấu hình để lắng nghe trên User Plane (`br_up`) và thiết lập các quy tắc chuyển tiếp (PDR - Packet Detection Rules) để định tuyến traffic IoT ra mạng mục tiêu.
Tạo file `upf.yaml`. Cấu hình UPF lắng nghe trên IP của `br_up` (10.200.0.2). Phần `n4` xác nhận kết nối với SMF. Quan trọng nhất là phần `rules` để định nghĩa hành vi chuyển tiếp traffic từ UE ra mạng IoT.
cat > /opt/oai-core/config/upf.yaml
Kết quả mong đợi: File `upf.yaml` được tạo. UPF sẵn sàng lắng nghe trên 10.200.0.2 và định tuyến traffic từ 10.45.0.0/24 qua giao diện n6 (mô phỏng mạng IoT).
Khởi động dịch vụ và kiểm tra trạng thái
Chạy các thành phần Core Network
Khởi động lần lượt UPF, SMF và AMF. Thứ tự này quan trọng vì AMF cần SMF, và SMF cần UPF để thiết lập session đầy đủ. Chúng ta sẽ chạy chúng ở background để dễ dàng theo dõi log.
Chạy các binary đã build với file cấu hình tương ứng. Sử dụng cờ `-v` hoặc `-log-level` để bật debug log giúp việc troubleshooting dễ dàng hơn trong môi trường IoT.
cd /opt/oai-core/build/5G_CORE
./upf -c /opt/oai-core/config/upf.yaml -v &
sleep 2
./smf -c /opt/oai-core/config/smf.yaml -v &
sleep 2
./amf -c /opt/oai-core/config/amf.yaml -v &
Kết quả mong đợi: Cả 3 quá trình chạy thành công, không có thông báo lỗi "Connection refused" hay "Bind failed". Các tiến trình xuất hiện trong danh sách `ps aux | grep oai`.
Verify kết nối và trạng thái hệ thống
Kiểm tra xem các thành phần có giao tiếp với nhau đúng theo kiến trúc CUPS hay không. Sử dụng `netstat` hoặc `ss` để xác nhận các cổng N11 và N4 đã mở và kết nối.
ss -tunlp | grep 3868
netstat -an | grep ESTABLISHED
Kết quả mong đợi: Bạn thấy các kết nối TCP đang ở trạng thái ESTABLISHED giữa các IP đã cấu hình (192.168.100.1 <-> 192.168.100.2 và 192.168.100.2 <-> 10.200.0.2) trên cổng 3868.
Đọc log của từng thành phần để xác nhận quá trình handshake. AMF và SMF phải trao đổi thông tin N11, SMF và UPF phải trao đổi thông tin N4 (PFCP session setup).
tail -f /var/log/oai/amf.log /var/log/oai/smf.log /var/log/oai/upf.log 2>/dev/null || tail -n 50 $(pgrep -f "amf|smf|upf" | head -1 | xargs ps -o args= | grep -oP 'amf|smf|upf' | while read bin; do echo $(which $bin); done) 2>/dev/null
Kết quả mong đợi: Log hiển thị các dòng như "N11 interface initialized", "N4 interface initialized", "PFCP Session Establishment Request received". Nếu thấy lỗi, hãy kiểm tra lại firewall (ufw/iptables) và cấu hình IP trong file yaml.
Hệ thống Core Network (CUPS) của OAI đã sẵn sàng để kết nối với RAN (srsRAN/gNB) trong phần tiếp theo. Các thành phần AMF, SMF, UPF đang hoạt động độc lập nhưng được liên kết chặt chẽ qua mạng nội bộ đã cấu hình.
Đ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 2: Triển khai Proxmox VE và thiết lập mạng vật lý (Bridge)
Phần 4: Xây dựng Radio Access Network (RAN) với srsRAN và OAI »