free5GC安装、运行、测试及注意事项

0 环境要求

0.1 软件

OS: Ubuntu 18.04
gcc 7.3.0
Go 1.14.4 linux/amd64
kernel version 5.0.0-23-generic

0.2 硬件

  • 最低配置
CPU: Intel i5 processor
RAM: 4GB
Hard drive: 160GB
NIC: Any 1Gbps Ethernet card supported in the Linux kernel
  • 推荐配置
CPU: Intel i7 processor
RAM: 8GB
Hard drive: 160GB
NIC: Any 10Gbps Ethernet card supported in the Linux kernel

1 安装

1.1 安装前提

1.1.1 内核

Linux内核应为5.0.0-23-generic,可以通过uname -r查询内核版本。

$ uname -r
5.0.0-23-generic

如果不符合版本号,使用下述语句进行内核的升级:

sudo apt-get install linux-image-5.0.0-23-generic
sudo apt-get install linux-headers-5.0.0-23-generic
reboot

1.1.2 Go

Go的版本应为1.14.4.linux-amd64,可以通过go version查询版本。

此前安装过其他版本的Go时,需要进行下述操作:

sudo rm -rf /usr/local/go
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz

如果是第一次安装Go,需要进行下述操作:

wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz
mkdir -p ~/go/{bin,pkg,src}

echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin:$GOROOT/bin' >> ~/.bashrc
source ~/.bashrc

1.1.3 控制面依赖包

sudo apt -y update
sudo apt -y install mongodb wget git
sudo systemctl start mongodb

1.1.4 控制面依赖包

sudo apt -y update
sudo apt -y install git gcc cmake autoconf libtool pkg-config libmnl-dev libyaml-dev
go get -u github.com/sirupsen/logrus

在使用go get -u github.com/sirupsen/logrus时,可能会出现报错package golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/unix" (https fetch: Get https://golang.org/x/sys/unix?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)。解决方案为

  • golang 在 github 上建立了一个镜像库,下载github上的镜像库放入GOPATH下即可。
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 env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

然后再进行go get -u github.com/sirupsen/logrus操作。

1.1.5 网络设置

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o <dn_interface> -j MASQUERADE
sudo systemctl stop ufw

此处的<dn_iptables>指的是真实网卡:loens33或者ens38

1.2 安装控制面网元

1.2.1 克隆free5GC仓库

  • 安装最新稳定版(v3.0.4)
cd ~
git clone --recursive -b v3.0.4 -j `nproc` https://github.com/free5gc/free5gc.git
cd free5gc

此处的nproc为虚拟机的内核数,可以通过nproc在终端直接获得。根据配置要求,这里我的nproc4,下同此。

  • 安装最新版
cd ~/free5gc
git checkout master
git submodule sync
git submodule update --init --jobs `nproc`
git submodule foreach git checkout master
git submodule foreach git pull --jobs `nproc`

1.2.2 安装Go模块依赖包

这里注意保持free5gc的文件夹命名,不要进行修改,否则可能会出现编译失败的问题。

cd ~/free5gc
go mod download

在使用go mod download时,出现报错。可以通过挂代理的方式解决,功效应该和上面是一样的。

# Linux / macOS
export GOPROXY=https://goproxy.io
     
# Windows
$env:GOPROXY = "https://goproxy.io"

在挂完代理之后,再使用go mod download

1.2.3 在free5GC中编译网络功能服务

  • 编译单个网元
cd ~/free5gc
make amf
  • 全部编译
cd ~/free5gc
make all

1.3 安装用户面网元

确保Linux内核应为5.0.0-23-generic,具体指导见上。

1.3.1 获取Linux内核模块5G GTP-U

git clone -b v0.2.0 https://github.com/PrinzOwO/gtp5g.git
cd gtp5g
make
sudo make install

1.3.2 创建UPF

  • 使用make创建
cd ~/free5gc
make upf
  • 手动创建
cd ~/free5gc/src/upf
mkdir build
cd build
cmake ..
make -j `nproc`

1.3.3 自定义UPF

UPF配置文件在free5gc/src/upf/build/config/upfcfg.yaml中,可根据需要进行配置。

2 运行

2.1 运行核心网

在运行单个网元前,先进行NRF的运行,即

cd ~/free5gc
./bin/nrf
  • 运行单个网元
cd ~/free5gc
./bin/amf
  • 运行整个核心网
cd ~/free5gc
./run.sh

2.2 运行N3IWF

在运行N3IWF实例前,确保有3个网络接口:第一个连接AMF,第二个连接UPF,第三个用于IKE程序。

第一步,给每个接口配置合适的IP地址;

第二步,给IPSec通信创建接口:

sudo ip link add ipsec0 type vti local <IKEBindAddress> remote 0.0.0.0 key <IPSecInterfaceMark>

第三步,给接口分配地址并挂起:

sudo ip address add <IPSecInterfaceAddress/CIDRPrefix> dev ipsec0
sudo ip link set dev ipsec0 up

第四步,使用管理员权限运行N3IWF:

cd ~/free5gc/
sudo ./bin/n3iwf

2.3 使用外部RAN运行多对一

参照sample config 进行使用。

2.4 在容器中部署

参照free5gc-compose进行部署。

3 测试

使用wireshark捕获所有端口通信,并使用pfcp||icmp||gtp进行筛选。

在运行测试示例前,对test.sh进行赋权:

cd ~/free5gc
chmod +x ./test.sh

以下所有的测试都是在~/free5gc目录下进行测试。

A. TestRegistration

./test.sh TestRegistration

B. TestGUTIRegistration

./test.sh TestGUTIRegistration

C. TestServiceRequest

./test.sh TestServiceRequest

D. TestXnHandover

./test.sh TestXnHandover

E. TestDeregistration

./test.sh TestDeregistration

F. TestPDUSessionReleaseRequest

./test.sh TestPDUSessionReleaseRequest

G. TestPaging

./test.sh TestPaging

H. TestN2Handover

./test.sh TestN2Handover

I. TestNon3GPP

./test.sh TestNon3GPP

J. TestReSynchronisation

./test.sh TestReSynchronisation

K. TestULCL

./test_ulcl.sh -om 3 TestRegistration

参考文献

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值