安裝與測試 free5GC 核心網路

此示範我們將練習:

請注意下面的安裝流程是參考 free5GC 官網文件

未來 free5GC 若有版本更新而導致部分指令無法運作,請以官網資訊為準。

1. 確定系統版本

先用 uname -r 確定 kernel 版本。若安裝 Ubuntu 20.04, 版本應為 5.4.x

$ uname -r
5.4.0-65-generic

請確認你的版本為5.0.0-23-generic5.4.0 以後版本。

2. 安裝基本工具

確定沒有安裝 go

go version

若有安裝舊版本,請先刪除 (假設你的 go 是安裝在 /usr/local/go):

sudo rm -rf /usr/local/go

要安裝最新 Golang, 網路搜尋 ubunto golan install,會得到網址: Download and install

瀏覽至該網址,請選擇 Linux, 然後得到 “Download Go for Linux” 框框的 下載連結 (可在框框裡按滑鼠右鍵,複製連結網址)。網址像

https://golang.org/dl/go1.15.7.linux-amd64.tar.gz

有了上述檔案下載網址,安裝步驟如下:

cd ~
wget https://golang.org/dl/go1.15.7.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.15.7.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
echo 'export GO111MODULE=auto' >> ~/.bashrc
source ~/.bashrc

看 golang 有無下載成功:

go version

接著安裝 MongoDb, 直接貼上:

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

接著安裝其他開發工具, 貼上:

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

參考影片 安裝基本工具

3. 設定網路規則

設定網路,貼上:

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

注意: 上面 enp0s3 為核網連到 Data Network (Internet) 的介面, 可以由 ifconfigroute 得到。若你的介面名稱不同,請記得改。 另外注意這些網路設定在重新開機後會消失,每次開機後要記得重做。

參考影片 設定網路規則

4. 安裝 free5GC 核心網路

我們直接安裝 3.0.5 版及最新的更新:

cd ~
git clone --recursive https://github.com/free5gc/free5gc.git

接著編譯 free5GC:

cd ~/free5gc
make

安裝 gtp5g

cd ~
git clone https://github.com/PrinzOwO/gtp5g.git
cd gtp5g
make
sudo make install

並檢查 gtp5g 是否安裝成功:

lsmod | grep gtp

由於我們測試儘量會使用最新版本,若遇到問題而無法容易解決,我們可以 試試將下載工具的版本退回至之前已知成功的版本。 例如本範例使用的版本 為 eb37b5eabef4f0c4d80eea80fd58d51aef9b3363,而比最新的 gtp5g 版本還舊。

我們可以藉由 git log 來檢視最近的版本,例如:

$ git log
commit d1ed954696906dcfe1345282707af853df2e8336 (HEAD -> master, tag: v0.3.0, origin/master, origin/HEAD)
Merge: eb37b5e c5eeb78
Author: Muthuraman Elangovan <76576790+muthuramanecs03g@users.noreply.github.com>
Date:   Fri Feb 5 18:52:35 2021 +0800

    Merge pull request #17 from PrinzOwO/feature-qer-support

    QER support in gtp5g

commit c5eeb78222011c8264e87cb23131b919dd9f648c (origin/feature-qer-support)
Author: Muthuraman Elangovan <muthuramane.cs03g@g2.nctu.edu.tw>
Date:   Fri Jan 22 07:03:13 2021 +0000

    QER support in gtp5g

commit eb37b5eabef4f0c4d80eea80fd58d51aef9b3363 (tag: v0.2.1)
Merge: 09577db 1cc5c30
Author: Yao Wen Chang <hadeschang0322.cs04@g2.nctu.edu.tw>
Date:   Wed Oct 21 05:11:43 2020 +0800

    Merge pull request #15 from tim-ywliu/master

    Fix bug for finding PDR

commit 1cc5c30140cd2622e134e4344459fd2d69c3e88a
Author: Tim Liu <timliu@nctu.edu.tw>
Date:   Tue Oct 20 15:20:06 2020 +0000

    fix bug for finding PDR

而版本 eb37b5eabef4f0c4d80eea80fd58d51aef9b3363 為 tag 0.2. 要將版本退回到此,可下指令:

git checkout eb37b5eabef4f0c4d80eea80fd58d51aef9b3363

得到一些列印訊息。你可以在 git log 看看:

$ git log
commit eb37b5eabef4f0c4d80eea80fd58d51aef9b3363 (HEAD, tag: v0.2.1)
Merge: 09577db 1cc5c30
Author: Yao Wen Chang <hadeschang0322.cs04@g2.nctu.edu.tw>
Date:   Wed Oct 21 05:11:43 2020 +0800

    Merge pull request #15 from tim-ywliu/master

    Fix bug for finding PDR

commit 1cc5c30140cd2622e134e4344459fd2d69c3e88a
Author: Tim Liu <timliu@nctu.edu.tw>
Date:   Tue Oct 20 15:20:06 2020 +0000

    fix bug for finding PDR

commit 09577dbc1aa0388f5008e7f193959685b3b76587
Author: yaowenchang <hadeschang0322.cs04@g2.nctu.edu.tw>
Date:   Mon Oct 12 17:02:24 2020 +0800

    Support to Ubuntu 20.04 with kernel version upper than 5.4

知道現在目錄已回到指定的舊版本。你現在可以 make 來編譯舊的 gtp5g, 並用 sudo make install 來·安裝,但記得先 sudo make uninstall 解除舊的版本。

若要回到最新版,下指令:

git checkout master

並可

git pull

看看是否有更新的版本。

參考影片 安裝 free5GC

5. 測試 free5GC

free5GC 提供了一些測試程式,測試一些 5G 核網標準的功能。 先測試基本的 註冊程序:

cd ~/free5gc
./test.sh TestRegistration

若最後有 PASS 字眼出現則安裝成功! 請繼續一一執行下列測試:

./test.sh TestRegistration

./test.sh TestGUTIRegistration

./test.sh TestServiceRequest

./test.sh TestXnHandover

./test.sh TestDeregistration

./test.sh TestPDUSessionReleaseRequest

./test.sh TestPaging

./test.sh TestN2Handover

./test.sh TestNon3GPP

./test.sh TestReSynchronisation

./test_ulcl.sh -om 3 TestRegistration

參考影片 測試 free5GC