组网图
本次部署用到了两块飞腾的开发板,一块开发板用于跑free5GC,一块开发板用于跑UERANSIM,当然也可以用一块开发板进行操作。下图红色框部分运行在DT_D2008_2103-1开发板上,黄色部分运行在DT_2008_2103-2开发板上面。
欢迎多多交流共同学习进步!
Q&A
编译时访问go代理超时
- 查看go安装过程中是否配置了go代理为直接访问方式
mongodb启动失败
- 删除配置mongo环境两个目录中的所有文件
- 进行mongodb 修复
- 重新启动
rm -rf /var/lib/mongo/*
rm -rf /var/log/mongo/*
mongod --repair
- 查看启动结果
pgrep mongo -l
安装gtp5g失败
- 提示权限不足
- 麒麟系统安全中心,关掉不需要的安全控制选项
编译upf报错
- 下载upf代码为go代码,目录前面带了go-upf
- upf代码在free5gc的新版本中由c代码改为了go代码
- 将go-upf修改为upf
运行free5GC测试脚本gtp5g报错
- 提示版本gtp5g版本不匹配
- 卸载并安装对应的版本即可
运行网元提示配置文件版本不匹配
- 运行nrf网元提示nrf配置文件版本不匹配
- 修改nrf配置文件,文件目录~/free5gc/config/nrfcfg.yaml
编译webconsole报错
node版本低
升级node版本
- 查看当前版本
node -v
- 清楚node缓存
sudo npm cache clean -f
- 如果没有npm工具,安装npm工具
sudo apt-get install npm
- 安装node版本管理工具
sudo npm install n -g
- 升级node到最新版本
sudo n stable
环境要求
软件
此处所列为当前我使用的开发板软件资源,详细的要求可查看free5gc需要的最小资源
Software | Version |
---|---|
内核 | 5.4.18-53-generic |
OS | Kylin V10 SP1 |
gcc | gcc version 9.3.0 (Ubuntu 9.3.0-10kylin2) |
go | 1.15.7 or later |
mongodb | 4.4 |
硬件
此处所列为当前我使用的开发板硬件资源,详细的要求可查看free5gc需要的最小资源
Hardware | Version |
---|---|
CPU | Phytium,D2000/8 E8C |
RAM | 16G |
Hard drive | 512G |
NIC | 2*1Gbps Ethernet card supported in the Linux kernel |
工具安装
安装go
go官网
下载安装
sudo wget https://golang.google.cn/dl/go1.15.7.linux-arm64.tar.gz
配置环境变量
- 编辑/etc/profile,在最后加速go的环境变量配置
export GOROOT=/usr/local/go/
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
下载镜像库
- golang github上建立了一个镜像库,下载github上的镜像库放入GOPATH下
- 编译free5gc源码时用到的go的依赖库会到本机该目录下查找
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https:/github.com/golang/sync.git
git clone https://github.com/golang/crypto.git
git clone https://github.com/golang/sys.git
添加go代理
- 解决编译时不能访问go代理
go env -w GOPROXY=https://goproxy.cn,direct
测试安装结果
- 查看安装go版本
go version
- 编写测试程序 gohelloworld.go
vim gohelloworld.go
package main
import (
"fmt"
)
func main(){
fmt.Printf("hello world\n")
}
- 构建gohelloworld.go
go build gohelloworld.go
- 会在当前目录生成gohelloworld的可执行程序
- 运行gohelloworld测试
./gohelloworld
安装mongodb
官网下载
下载mongodb4.4
wget https://fastdl.mongodb.org/linux/mongodb-linux-aarch64-ubuntu2004-4.4.18.tgz
tar -zxvf mongodb-linux-aarch64-ubuntu2004-4.4.18.tgz
配置mongodb环境
- 将mongodb拷贝到系统环境变量目录
cp mongodb-linux-aarch64-ubuntu2004-4.4.18/bin/* /usr/local/bin/
- 创建示例存储目录和log目录
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongo
测试安装结果
- 启动mongod
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
ps -ef | grep mongodb
安装gtp5g
安装
cd ~
git clone -b v0.7.0 https://github.com/free5gc/gtp5g.git
cd gtp5g
make
sudo make install
卸载
sudo make uninstall
free5GC部署
配置网络环境
- 更新环境库和工具
sudo apt -y update
sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev
- 配置路由和包过滤转发规则关防火墙
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE
sudo iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
sudo systemctl stop ufw
源码下载
- 克隆github上的free5GC源码
cd ~
git clone --recursive -b v3.2.1 -j `nproc` https://github.com/free5gc/free5gc.git
cd free5gc
- 各个网元子模块下载失败,free5GC中NFs目录各个网元目录为空,手动再次下载
# 删除空文件夹
rm -rf ~/free5gc/NFs/*
# 切换到NFs目录下
cd ~/free5gc/NFs
# 重新手动git
git clone https://github.com/free5gc/amf.git
git clone https://github.com/free5gc/smf.git
git clone https://github.com/free5gc/pcf.git
git clone -b v1.1.1 -j `nproc` https://github.com/free5gc/ausf.git
git clone https://github.com/free5gc/nssf.git
git clone -b v1.1.1 -j `nproc` https://github.com/free5gc/nrf.git
git clone https://github.com/free5gc/udm.git
git clone https://github.com/free5gc/udr.git
git clone https://github.com/free5gc/go-upf.git
git clone https://github.com/free5gc/n3iwf.git
cd ~/free5gc
rm -rf ~/free5gc/webconsole # webconsole 文件夹也为空,和处理一样,重新手动git webconsole文件
git clone https://github.com/free5gc/webconsole.git
源码编译
- 进入free5GC目录编译
cd ~/free5gc
make
- upf编译报错
- 进入NFs目录将go-upf改为upf,即可
测试脚本测试
- free5GC提供了测试脚本,可运行脚本测试不同的功能
- 简单测试注册功能,会打印一些log信息,并且没报错即可
cd ~/free5gc
./test.sh TestRegistration
运行free5GC
单个网元运行
- 运行nrf为示例
cd ~/free5gc
./bin/nrf
- 单个网元启动,启动顺序要求
NRF > UDR > UDM > AUSF > NSSF > AMF > PCF > UPF > SMF > N3IWF
脚本启动所有网元
- 执行run.sh
cd ~/free5gc
./run.sh
- 可打开另一终端查看网元进程
ps -ef
free5GC测试
安装WebConsole
卸载旧工具
sudo apt remove cmdtest
sudo apt remove yarn
安装node.js和Yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install -y nodejs yarn
编译webconsole
cd ~/free5gc
make webconsole
测试webconsole
- 运行server.go服务
cd ~/free5gc/webconsole
go run server.go
- 打开本机浏览器访问http://192.168.1.121:5000
- 登录用户名 admin 密码 free5gc
- 配置增加UE用户数据
安装UERANSIM
下载UERANSIM源码
git clone -b v3.2.6 https://github.com/aligungr/UERANSIM.git
安装依赖工具
- 不要使用 sudo apt-get install cmake,因为默安装安装的版本比较旧。用下面给的命令安装
- make、gcc/g++、cmake再build UERANSIM时会用到,libsctp-dev,lksctp-tools,iproute2运行时会用到
- 如果snap没有安装先安装snap,
sudo apt install snap snapd
- 将/snap/bin加入环境变量
vim /etc/profile
- 刷新配置文件
source /etc/profile
- 安装依赖工具命令
sudo apt install make
sudo apt install gcc
sudo apt install g++
sudo apt install libsctp-dev lksctp-tools
sudo apt install iproute2
sudo snap install cmake --classic
编译UERANSIM
- 进入UERANSIM目录编译
cd ~/UERANSIM
make
- 编译后会创建build目录
- libdevbnd.so 动态nr-binder库
- nr-binder 用于UE访问网络的工具
- nr-gnb 模拟5G基站
- nr-ue 模拟5G UE
- nr-cli CLI工具配置UE和gNB
配置和应用
- 启动基站加载指定配置文件
nr-gnb -c myconfig.yaml
- 启动UE加载指定配置文件
nr-ue -c myconfig.yaml
- 启动10个UE 配置文件中的IMSI自增1
nr-ue -c myconfig.yaml -n 10
- 启动10个UE 从指定的IMSI自增1
nr-ue -c myconfig.yaml -n 10 -i imsi-286010000000001
- 通过CLI登录到UE或者基站 nr-cli node-name
nr-cli imsi-001010000000001
- 查看当前环境中的UE和基站
nr-cli --dump
- 登录到基站或者UE后可查看可使用的命令
commands
UERANSIM+Free5GC测试
测试环境框图
- 两台飞腾天乾EDU220F开发板
- 运行free5gc的开发板DT_D2008_2103-1的IP为192.168.1.121
- 运行ueransim的开发板DT_D2008_2103-2的IP为192.168.1.118
修改free5gc配置文件并启动5gc
amf配置文件修改
- 文件路径
~/free5gc/config/amfcfg.yam
- 修改N2接口地址,修改为本机IP
192.168.1.121
smf配置文件修改
- 文件路径
~/free5gc/config/smfcfg.yaml
- 配置给UPFN3/N9的地址,修改为本机IP
192.168.1.121
upf配置文件修改
- 文件路径
~/free5gc/NFs/upf/build/config/upfcfg.yaml
- 修改UPF的N3接口地址为free5gc本机IP
192.168.1.121
配置网络环境
- 该步骤在free5GC部署章节已经配置,但是这是临时配置,系统重启后会失效,为保证测试顺利可再次配置
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD 1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enaphyt4i0 -j MASQUERADE
sudo systemctl stop ufw
启动free5GC
- 此处使用脚本全部启动
cd ~/free5gc
./run.sh
修改UERANSIM配置文件并启动UE和RAN
基站配置文件修改
- 文件路径
~/UERANSIM/config/myfree5gc-gnb.yaml
- ngapIP为基站N2接口IP,配置为基站宿主机IP
192.168.1.118
- gtpIP为基站N3接口IP,配置为基站宿主机IP
192.168.1.118
- amfConfigs配置参数中的IP为AMF的N2接口IP,配置为free5gc宿主机IP
192.168.1.121
UE配置文件查看
- 文件路径
~/UERANSIM/config/myfree5gc-ue.yaml
运行基站
- 基站需要和free5gc建立链接,确保free5gc已经成功启动
- 在
~/UERANSIM
下执行命令
cd ~/UERANSIM
./build/nr-gnb -c config/myfree5gc-gnb.yaml
运行UE
- UE需要向基站附着,确保基站已经成功启动
- 在
~/UERANSIM
下执行命令
cd ~/UERANSIM
./build/nr-ue -c config/myfree5gc-ue.yaml
- 测试UE的是否可访问DN
ping -I uesimtun0 baidu.com
至此通过UERANSIM+free5gc的部署完成,且成功运行。