在Ubuntu 18.04上快速部署OAI 5G核心网的完整实践指南
对于5G技术开发者和学习者而言,搭建一个可运行的核心网环境是理解5G架构和协议的重要一步。OpenAirInterface(OAI)作为开源的5G软件实现,为研究和开发提供了便利。本文将详细介绍如何在Ubuntu 18.04系统上,利用Docker Compose快速部署OAI 5G核心网v1.4.0版本,帮助您绕过复杂的配置过程,直接进入5G核心网的实践环节。
1. 环境准备与优化
在开始部署之前,我们需要确保系统环境满足基本要求并进行了必要的优化配置。Ubuntu 18.04作为长期支持版本,提供了稳定的基础,但默认配置可能需要调整以获得更好的性能。
1.1 系统更新与基础配置
首先执行系统更新,确保所有软件包都是最新版本:
sudo apt update && sudo apt upgrade -y接下来安装一些基础工具,这些将在后续步骤中发挥作用:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates git python3-pip1.2 Docker环境配置
Docker是本次部署的核心组件,正确的安装和配置至关重要。以下是经过优化的安装步骤:
卸载旧版本Docker(如已安装):
sudo apt remove docker docker-engine docker.io containerd runc设置Docker仓库:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"安装Docker引擎:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io验证Docker安装:
sudo docker run hello-world配置Docker镜像加速(针对国内用户):
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
1.3 Docker Compose安装
虽然Ubuntu仓库提供了docker-compose,但版本可能较旧。我们推荐通过pip安装最新版本:
sudo pip3 install --upgrade pip sudo pip3 install docker-compose验证安装:
docker-compose --version2. OAI核心网镜像获取与准备
OAI 5G核心网由多个组件构成,每个组件都有对应的Docker镜像。由于镜像体积较大,正确的获取方式可以节省大量时间。
2.1 镜像拉取策略
官方镜像位于Docker Hub,但直接拉取可能速度较慢。我们提供几种优化方案:
直接拉取(适合网络条件好的用户):
docker pull oaisoftwarealliance/oai-amf:v1.4.0 docker pull oaisoftwarealliance/oai-smf:v1.4.0 docker pull oaisoftwarealliance/oai-nrf:v1.4.0 docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.4.0使用镜像加速服务(推荐):
docker pull registry.cn-hangzhou.aliyuncs.com/oai/oai-amf:v1.4.0 docker tag registry.cn-hangzhou.aliyuncs.com/oai/oai-amf:v1.4.0 oai-amf:v1.4.0预先下载的镜像导入:
docker load < oai-amf-v1.4.0.tar
2.2 核心网组件镜像列表
完整的OAI 5G核心网v1.4.0版本需要以下镜像:
| 组件名称 | 官方镜像地址 | 功能描述 |
|---|---|---|
| AMF | oaisoftwarealliance/oai-amf:v1.4.0 | 接入和移动性管理功能 |
| SMF | oaisoftwarealliance/oai-smf:v1.4.0 | 会话管理功能 |
| NRF | oaisoftwarealliance/oai-nrf:v1.4.0 | 网络功能注册 |
| SPGW-U-Tiny | oaisoftwarealliance/oai-spgwu-tiny:v1.4.0 | 用户平面功能 |
| UDM | oaisoftwarealliance/oai-udm:v1.4.0 | 统一数据管理 |
| UDR | oaisoftwarealliance/oai-udr:v1.4.0 | 统一数据存储 |
| AUSF | oaisoftwarealliance/oai-ausf:v1.4.0 | 认证服务器功能 |
| NSSF | oaisoftwarealliance/oai-nssf:v1.4.0 | 网络切片选择功能 |
| TRF-GEN | oaisoftwarealliance/trf-gen-cn5g:latest | 流量生成工具 |
2.3 代码仓库克隆与准备
除了Docker镜像,我们还需要获取OAI核心网的配置文件和部署脚本:
mkdir ~/oai && cd ~/oai git clone https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git cd oai-cn5g-fed git checkout -f v1.4.0 ./scripts/syncComponents.sh3. 网络配置与容器编排
正确的网络配置是OAI核心网正常运行的关键。本节将指导您完成必要的网络设置和容器编排配置。
3.1 Docker网络创建
OAI核心网组件需要通过特定的网络进行通信。我们需要创建一个自定义的Docker网络:
docker network create \ --driver=bridge \ --subnet=192.168.70.128/26 \ -o "com.docker.network.bridge.name"="demo-oai" \ demo-oai-public-net验证网络创建:
docker network ls ifconfig demo-oai3.2 系统网络参数调整
为了确保网络功能正常,需要调整一些系统参数:
sudo sysctl net.ipv4.conf.all.forwarding=1 sudo iptables -P FORWARD ACCEPT为了使这些设置在重启后依然有效,可以将其添加到系统配置中:
echo "net.ipv4.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p3.3 容器编排文件解析
OAI核心网使用docker-compose进行编排。主要配置文件为docker-compose-mini-nonrf.yaml,其关键部分包括:
version: '3.8' services: oai-amf: image: oai-amf:v1.4.0 container_name: oai-amf networks: demo-oai-public-net: ipv4_address: 192.168.70.132 environment: - TZ=Europe/Paris - AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0 volumes: - ./amf.conf:/opt/oai-amf/etc/amf.conf4. 核心网启动与验证
一切准备就绪后,我们可以启动OAI 5G核心网并进行基本功能验证。
4.1 一键启动脚本使用
OAI提供了方便的Python脚本来管理核心网生命周期:
cd ~/oai/oai-cn5g-fed python3 core-network.py --type start-basic启动后,可以使用以下命令检查容器状态:
docker ps -a预期输出应显示所有核心网组件容器处于运行状态:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES a1b2c3d4e5f6 oai-amf:v1.4.0 "/bin/bash /opt/oai-…" Up 5 minutes oai-amf ...4.2 组件日志查看与监控
各组件日志是排查问题的重要依据:
查看AMF日志:
docker logs oai-amf -f查看SMF日志:
docker logs oai-smf -f4.3 基本功能测试
检查网络连通性:
docker exec -it oai-amf ping 192.168.70.129使用curl测试NRF服务发现:
curl -X GET http://192.168.70.129:8080/nnrf-nfm/v1/nf-instances模拟UE注册流程(需要额外工具):
docker run --rm -it --network demo-oai-public-net oai-ue:latest ./nr-ue -c ue.conf
4.4 常见问题排查
以下是部署过程中可能遇到的典型问题及解决方案:
容器启动失败:
- 检查Docker日志:
journalctl -u docker.service - 验证镜像完整性:
docker images
- 检查Docker日志:
网络连接问题:
- 确认网桥存在:
brctl show - 检查IP分配:
docker inspect <container_id>
- 确认网桥存在:
服务注册失败:
- 确认NRF运行正常
- 检查各组件配置文件中的NRF地址
性能问题:
- 增加Docker资源限制
- 考虑使用主机网络模式
5. 进阶配置与优化
基础部署完成后,可以根据需求进行更深入的配置和优化。
5.1 配置文件定制
每个核心网组件都有对应的配置文件,位于oai-cn5g-fed目录下。例如AMF的配置文件amf.conf包含重要参数:
[AMF] amf_name = "OAI-AMF" ngap_ip_addr = "192.168.70.132"5.2 数据库持久化配置
默认情况下,UDM/UDR使用临时存储。可以配置MySQL数据库实现数据持久化:
services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: linux volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:5.3 性能调优建议
调整Docker资源限制:
docker update --cpus 2 --memory 4g oai-amf使用主机网络模式(提升性能但降低隔离性):
network_mode: "host"启用Docker构建缓存:
docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t oai-amf:v1.4.0 .
5.4 安全加固措施
修改默认凭证:
docker exec -it oai-amf bash -c "sed -i 's/default_password/strong_password/' /opt/oai-amf/etc/amf.conf"限制网络暴露:
docker network create --internal demo-oai-internal-net启用TLS加密:
environment: - USE_TLS=true
6. 开发与测试环境集成
将OAI核心网集成到开发流程中,可以更高效地进行5G相关开发工作。
6.1 CI/CD管道配置示例
以下是一个GitLab CI配置示例,用于自动化构建和测试:
stages: - build - test - deploy build_amf: stage: build script: - docker build -t oai-amf:latest ./amf - docker push registry.example.com/oai-amf:latest test_core: stage: test script: - docker-compose -f docker-compose-test.yml up -d - ./run_tests.sh6.2 单元测试与集成测试
OAI提供了一些测试工具和框架:
运行基础测试套件:
cd ~/oai/oai-cn5g-fed ./scripts/run_tests.sh basic编写自定义测试用例(Python示例):
import requests def test_nrf_discovery(): response = requests.get("http://192.168.70.129:8080/nnrf-nfm/v1/nf-instances") assert response.status_code == 200 assert len(response.json()) > 0
6.3 与gNB集成测试
完整的5G系统测试需要接入无线部分:
配置gNB连接参数:
[AMF] guami = ["0x01", "0x02", "0x03"] plmn_support = ["00101"]启动gNB模拟器:
docker run --network demo-oai-public-net oai-gnb:latest ./nr-gnb -c gnb.conf验证注册流程:
docker logs oai-amf -f | grep "Registration Request"
7. 实际应用场景扩展
基础部署完成后,可以进一步扩展以满足不同场景需求。
7.1 多切片配置示例
在nssf.conf中配置网络切片:
[Slice] sst=1 sd=0x0102037.2 边缘计算集成
将UPF部署在边缘节点:
oai-spgwu-tiny: deploy: placement: constraints: - node.role == worker7.3 与第三方应用集成
通过NEF(网络开放功能)暴露能力:
curl -X POST http://192.168.70.129:8080/nef/v1/api -d '{"ue_id":"imsi-001010000000001"}'7.4 性能监控与告警
配置Prometheus监控:
monitoring: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml8. 资源清理与维护
当不再需要核心网环境时,应正确清理资源。
8.1 优雅停止核心网
使用脚本停止所有服务:
python3 core-network.py --type stop-mini8.2 日志归档
保存重要日志供后续分析:
mkdir -p logs docker logs oai-amf > logs/amf-$(date +%Y%m%d).log docker logs oai-smf > logs/smf-$(date +%Y%m%d).log8.3 容器与镜像清理
删除不再使用的容器和镜像:
docker system prune -f docker volume prune -f8.4 系统还原
如果需要完全清除OAI相关配置:
sudo rm -rf ~/oai docker network rm demo-oai-public-net