free5gc 架設
聲明
本報告內容僅供學術研究與教學用途,嚴禁用於任何其他目的。未經本人或相關權利人明確書面許可,不得以任何形式轉載、引用、公開或用於商業用途。
任何違反上述聲明的行為,本人將保留追究法律責任的權利。
從零開始的5G核網架設_free5gc
本文架設的基礎網路環境架構如下圖
會架設兩台虛擬機,分別安裝free5gc及UERANSIM
free5gc版本: v3.4.2
UERANSIM版本:
Ubuntu 環境建置
1. VirtualBox 下載&安裝
a. 選擇安裝包下載
選自己電腦OS的版本下載
b. 安裝
狂按下一步直到跳出安裝完成
2. Ubuntu 下載&安裝
a. 下載映像檔
官方下載網站
這邊下載的版本是Ubuntu 22.04 Server
b. 新增虛擬機
打開VirtualBox,選新增
填入虛擬機名稱free5gc,選擇剛剛下載好的ISO映像檔案
設定使用者名稱和密碼(因為之後會很常用到,推薦可以設短一點或自己常用的)
設定記憶體和處理器(建議記憶體要有4096(4GB),處理器2CPUs,這樣比較夠用。)
虛擬硬碟的大小建議要到50GB,預先配置完整大小不須打勾。
最後檢查一下,沒問題就按完成。
c. Ubuntu 系統設定
他會跑一下然後就進入安裝步驟,選English,然後Enter
。
選continue without updating
一路按Done
直到…這邊等他跑完再按Done
繼續按Done
…直到…continue
勇敢按下去
這邊設定跟剛剛填的一樣,繼續按Done
…
這邊的install OpenSSH server,這邊打勾(按Enter
)
之後就Done
到他跑完安裝
最後選Reboot Now,它會關機、重新啟動
重啟之後輸入帳密就會進到bash的頁面了
(輸入密碼的時候會看不到正在輸入的內容,這是正常的)
3. Ubuntu 網卡設定
a. ifconfig
當你想用ifconfig
查看網卡設定,但會發現還沒有安裝
照著她說的,輸入:
1 | sudo apt install net-tools |
裝好了之後再次ifconfig
就可以看到網路設定
現在只有一張網卡enp0s3
,這是預設的網卡,它目前的設定是NAT。
若需要進行SSH連線,我們需要一張特定網段的Host only網卡,因此我們需要新增一張。
為了方便之後的操作,我們需要讓他多一張網卡,用來SSH。
b. 新增網路卡
先關機
到VirtualBox,點虛擬機,選設定
啟用第二張網路卡
選擇僅限主機(host only),按下確定之後重開機。
用ip addr
會看到多了一張網卡,但她還沒設定
c. 設定靜態IP
編輯/etc/netplan/00-installer-config.ymal
1 | sudo nano /etc/netplan/00-installer-config.ymal |
00-installer-config.ymal應該會長得像這樣
把它改成如下:(定義enp0s8的IP)
1 | network: |
用ctrl+S
存檔、用ctrl+X
退出
讓系統run這個設定檔
1 | sudo netplan apply |
再次ifconfig
看看有沒有修改成功
最後ping 192.168.56.1
確定連線正常
4. MobaXterm 下載&使用教學
官方下載連結
下載下來解壓縮後點msi檔安裝
※ 可以先練習一下使用方式
- 點擊左側創建好的session連線,就是在對應的VM開一個Terminal
- 可以設定用滑鼠中鍵貼上複製的指令
- 可以輸入指令的開頭後按
tab
快速輸入,例如ifc
+tab
=ifconfig
- 指令可以一段一起貼上,他會一行一行運行
5. 再製一台VM for UERANSIM
a. 再製虛擬機
再開一台VM給UERANSIM
在VirtualBox對free5gc虛擬機(要先關機) 右鍵–>再製
設定名字,選擇為所有網路卡產生新的MAC位置
選擇完整再製
等他跑完…
就會看到多了一台虛擬機
b. 設定靜態IP
編輯/etc/netplan/00-installer-config.ymal
1 | sudo nano /etc/netplan/00-installer-config.ymal |
00-installer-config.ymal應該會長得像這樣
把它改成如下:(定義enp0s8的IP)
1 | network: |
ctrl+S
、ctrl+X
存檔後退出
讓系統run這個設定檔
1 | sudo netplan apply |
再次ifconfig
看看有沒有修改成功
最後ping 192.168.56.1
確定連線正常
free5gc 環境建置
這邊安裝的版本是v3.4.2
1. SSH連線與改VM名稱
a. HOW TO SSH?
在MobaXterm新增一個session
選ssh,填入IP和登入虛擬機用的使用者名稱
接受、打勾、輸你設定的登入密碼
SSH連線成功
可以點主頁–>剛剛開的session–>rename改MobaXterm看到的虛擬機名字
b. 改VM名稱
這邊改的是別的主機看這台free5gc的VM時會看到的名稱
像是我們從Mobxterm連線的時候會看到的名字
到輸入指令的地方(terminal),輸入:
1 | sudo nano /etc/hostname |
改成free5gc之後ctrl+S
、ctrl+X
再來,輸入
1 | sudo nano /etc/hosts |
一樣改成free5gc之後ctrl+S
、ctrl+X
重開虛擬機
1 | sudo reboot |
等他重開完,在MobaXterm按R
重新連線,就會看到他變名字了
2. 安裝 GO
先用go version
查看go版本。
他說我們還沒有安裝GO,那就先裝一下
下載 GO:
1 | wget https://dl.google.com/go/go1.21.8.linux-amd64.tar.gz |
安裝 GO:
1 | cd ~ |
看一下有沒有安裝成功
1 | go version |
3. 安裝Control-plane (MongoDB)
1 | sudo apt -y update |
完成之後啟動測試
1 | sudo systemctl start mongod |
測試完ctrl+c
跳出
4. 安裝User-plane
1 | sudo apt -y update |
正常的結果會像這樣,跑很長很久是正常的
中間會跳這個,就Enter
5. Linux Host Network Settings
這些設定是為了確保 Free5GC 正常運作。IP 轉發允許流量在網路介面之間傳輸,NAT 將內部流量映射到外部網路,MSS 調整確保數據傳輸穩定,關閉防火牆避免阻擋 free5gc 的通訊。
1 | sudo sysctl -w net.ipv4.ip_forward=1 |
6. 安裝5GC核網(Install Control Plane Elements)
1 | cd ~ |
也會要跑有點久,希望大家網速夠快
看到她開始跑go: 就是對了
7. Install User Plane Function (UPF)
1 | git clone -b v0.8.10 https://github.com/free5gc/gtp5g.git |
裝完後測試lsmod | grep gtp
8. Install WebConsole
a. 先裝nodejs
1 | curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - |
如果看到這個一樣Enter
,如果有卡住可以ctrl+c
,之後再重新輸一次指令,直到他裝好
b. 再裝 WebConsole
1 | cd ~/free5gc |
如果有問題跳出就按Y
9. 核網運作測試
1 | cd ~/free5gc |
等他跑完,看到PASS就是ok了
UERANSIM 環境建置
1. 設定UERANSIM 的 VM
a. 使用MobaXterm SSH 連線UERANSIM
選Session –> SSH –> 填入IP(192.168.56.102) –> 填入登入用的使用者帳號
選Accept
填完密碼之後,就連上了!
一樣可以在MobaXterm改虛擬機的名字,這樣連線的時候比較方便
改這邊的內容就可以了
b. 改虛擬機的名稱
這邊改的是別的主機看這台UERANSIM的VM時會看到的名稱
像是我們從Mobxterm連線的時候會看到的名字
到輸入指令的地方(terminal),輸入:
1 | sudo nano /etc/hostname |
改成UERANSIM之後ctrl+S
、ctrl+X
再來,輸入
1 | sudo nano /etc/hosts |
一樣改成UERANSIM之後ctrl+S
、ctrl+X
重開虛擬機
1 | sudo reboot |
等他重開完,在MobaXterm按R
重新連線,就會看到他變名字了
2. 安裝UERANSIM
a. 下載
1 | cd ~ |
b. 更新系統環境
1 | sudo apt update |
如果有問題就按Y
如果跳了這個,就tab
再選ok(Enter
)就好
c. 安裝一些工具
1 | sudo apt install make |
如果有問題就按Y
如果跳了這個,就tab
再選ok(Enter
)就好
d. make UERANSIM
1 | cd ~/UERANSIM |
看到他開始跑這個,就是對了,放他跑完
看到這樣就是安裝成功了
核網連線設定
1. 建立 nettwork_setting.sh
1 | nano network_setting.sh |
1 | sudo sysctl -w net.ipv4.ip_forward=1 |
1 | chmod +x network_setting.sh |
2. 設定 Websonsole
a. 事前確保
先確定一下gtp5g有沒有在運行
1 | lsmod | grep gtp |
如果沒有出現像這樣的
就重裝UPF
也確保一下mongod有在運行
1 | sudo systemctl start mongod |
b. 在 free5gc run webConsole
1 | cd ~/free5gc/webconsole |
他第一次會跑久一點,可能會跳Error,但你要給他信心,他最後會開好的
看到這個就是ok,就可以進行下一步
(在他沒有開好之前ctrl+c
的話會卡死,只能直接重開機)
c. 在瀏覽器連線
1 | http://192.168.56.101:5000/ |
帳號: admin
密碼: free5gc
d. Create a new Subscriber
選左側 menu 中的 SUBSCRIBERS,然後 CREATE
這裡的數值我們是參考~/UERANSIM/config/free5gc-ue.yaml
但我們需要做的只有把 Operator Code Type 改成 OP
直接拉到最下面,CREATE
最後會像這樣
然後就可以ctrl+c
把webconsole關掉了
3. 設定 free5gc/config
在free5gc的Terminal
a. amfcfg.yaml
1 | nano ~/free5gc/config/amfcfg.yaml |
這邊改成free5gc的IP,這裡設定的是N2通道的IP
改完之後ctrl+s
ctrl+x
存檔關掉
b. smfcfg.yaml
1 | nano ~/free5gc/config/smfcfg.yaml |
往下滑到底,在上面一點的地方,把這裡的IP改成free5gc的,這裡設定的是N3通道的IP
改完之後ctrl+s
ctrl+x
存檔關掉
c. upfcfg.yaml
這裡設定的是N3通道的IP
1 | nano ~/free5gc/config/upfcfg.yaml |
這邊改成free5gc的IP
改完之後ctrl+s
ctrl+x
存檔關掉
4. 設定 UERANSIM/config
在UERANSIM的Terminal
a. gnb.yaml
ngapIp和gtpIp改成UERANSIM的IP(192.168.56.102)
amfConfigs改成free5gc的IP(192.168.56.101)
1 | nano ~/UERANSIM/config/free5gc-gnb.yaml |
改完之後ctrl+s
ctrl+x
存檔關掉
b. ue.yaml
1 | nano ~/UERANSIM/config/free5gc-ue.yaml |
這邊改成OP
改完之後ctrl+s
ctrl+x
存檔關掉
核網 啟動!
1. network_setting
在 free5gc 的 Terminal
1 | sudo ./network_setting.sh |
2. free5gc
在 free5gc 的 Terminal
1 | cd ~/free5gc |
3. gNodeB
在 UERANSIM 的Terminal 1
1 | cd ~/UERANSIM |
看到這樣,就代表gNodeB成功連線核網
4. UE
在 UERANSIM 的Terminal 2(再開一個Terminal)
1 | cd ~/UERANSIM |
看到這樣,就代表UE成功連線gNodeB
5. Test
a. ifconfig
在 UERANSIM 的Terminal 3(再開一個Terminal)
用ifconfig
會看到多了一張叫做uesimtun0的網卡,IP是10.60.0.1
b. ping google
用UE連接核網的網卡ping google,可以ping到代表對外網連線正常UPF正常運作
1 | ping google.com -I uesimtun0 |
恭喜你,最基礎的核網就算是架設完成了。🎉
6. 關閉free5gc
對著運行中的free5gc Terminal ctrl+c
即可中斷
中斷後輸入指令,確保有關乾淨
1 | ./force_kill.sh |
UERANSIM的gNodeB和UE都可以用ctrl+c
直接關閉
核網連線測試與觀察
本測試一共會開啟6個Terminal,其中free5gc有2個,UERANSIM有4個
1. Wireshark 建置
free5gc和UERANSIM都要執行以下步驟,我們需要在兩台虛擬機上都安裝Wireshark
a. 在虛擬機安裝wirshark
1 | sudo apt install wireshark |
按Y
你是否要允許非超級用戶(non-superusers)捕捉封包。一般建議是選擇 Yes,這樣就不需要以 root 權限來運行 Wireshark
b. 權限設定
1 | sudo dpkg-reconfigure wireshark-common |
選YES
c. 使用方式
開啟Wireshark看看
1 | wireshark |
點兩下any
就可以開始監控全部網卡的即時流量
停止鍵可以暫停監控
綠色魚鰭可以重開新的監控
如果遇到這個視窗,推薦選Continue without Saving,因為目前沒有存封包的必要性,不用讓它占空間
可以善用filter的功能來過濾出自己想找的封包
d. 測試前置作業
在free5gc 和 UERANSIM 都用一個 Terminal 開啟 Wireshark
按any開始錄製
2. 啟動核網
依照上面核網 啟動!的步驟,把free5gc和UERANSIM開起來
簡單版步驟如下:
a. free5gc Terminal1:
1 | cd ~ |
b. UERANSIM Terminal1:
1 | cd ~/UERANSIM |
c. UERANSIM Terminal2:
1 | cd ~/UERANSIM |
3. 連線封包觀察
把兩個Wireshark停止,filter輸入ngap
a. free5gc
可以看到連線時的NGAP封包
b. UERANSIM
可以看到連線時的NGAP封包
4. Ping 封包觀察
接下來我們要觀察ping時的icmp封包
a. Wireshark filter = icmp
在filter輸入icmp,並啟動錄製
b. ping
在UERANSIM 的 Terminal4輸入:
1 | ping google.com -I uesimtun0 |
c. free5gc
即可在free5gc的Wireshark觀察到GTP
d. UERANSIM
也可以在UERANSIM的Wireshark觀察到GTP