# Lab4 srsRAN gNB with COTS UEs ## Outline - [1. 實驗內容](#1.實驗內容) - [2. 相關知識](#2.相關知識) - [3. 相關建置環境/設備規格](#3.相關建置環境/設備規格) - [4. 實驗架構](#4.實驗架構) - [5. 實驗流程](#5.實驗流程) ----- ## 1.實驗內容 - 使用srsRAN架設gNB - 使用實體主機架設Open5GS核心網路 - 實用民用UEs設備連接自架的gNB ---------- ## 2.相關知識 - srsRAN:srsRAN是一套開源的 4G/5G 無線接取網路(RAN)軟體套件,由 SRS(Software Radio Systems)開發。它的目標是讓研究人員、電信工程師與開發者能在一般電腦上,以 SDR(Software Defined Radio)快速建置 eNB、gNB、UE 等完整的行動網路元件,而不需要昂貴的電信級設備。主要特色如下: - 完全遵循 3GPP 標準,支援 LTE 與 5G NR 的 L1/L2/L3 協定堆疊。 - 5G 架構採用 CU/DU 拆分,支援 NG-RAN 與 F1 介面,方便做 O-RAN 研究。 - 與 USRP、BladeRF、LimeSDR 等 SDR 完全相容,可直接用來收發無線訊號。 - UHD:USRP Hardware Driver是 Ettus Research / NI 為 USRP 系列 SDR 裝置所提供的官方通用驅動程式與 API。任何想控制 USRP 的軟體,如 GNU Radio、**srsRAN**、MATLAB、Python script,都必須透過 UHD 來進行操作。 - USIM:UMTS Subscriber Identity Module,USIM為用於UMTS中的使用者身分辨識模組,USIM還可儲存使用者資料、電話號、認證資料、簡訊儲存空間 ## 3.相關建置環境/設備規格 ### 3-1 硬體清單 | 軟體名稱 | 規格 | 數量 | |:----------- | ------------------------ |:----:| | PC | 任一可安裝Ubuntu主機即可 | 1 | | SDR | USRP B210 | 1 | | UE | Google Pixel 8 | 1 | | USIM | Sysmocom SJA5-S17 | 1 | | Card Reader | HID OMNIKEY | 1 | ### 3-2 | USIM編號 | 學生 | |:--------------- | ---- | | 999700000123080 | 蘇翰庭、曹莛宥、Farhan | | 999700000123081 | 李明銳 | | 999700000123082 | 王祈皓 | | 999700000123083 | 吳昕叡 | | 999700000123084 | 謝東諺 | | 999700000123085 | 周承誌、吳亞倫 | | 999700000123086 | 蘇洋銘 | | 999700000123087 | 吳晉毅 | | 999700000123088 | 郭峻里 | | 999700000123089 | 蘇仕偉 | ### 3-3 軟體規格 | 軟體名稱 | 軟體版本 | |:-------- |:-------------- | | Ubuntu | 22.04 LTS | | Open5gs | v2.7.1-jammy | | srsRAN | srsRAN Project | | Android | 16 | ----- ### 3-4[Ubuntu安裝](https://github.com/TTU-CWBT/Ubuntu-install-tutorial) :warning:這次實驗需要安裝實體Ubuntu主機,所以請自備一個燒錄Ubuntu映像檔的USB,此USB會被刷新,使用前請先將確認。 :warning:這次的實驗需要安裝 Ubuntu Desktop,請在安裝完 Ubuntu 後在終端機輸入安裝桌面的指令,這個指令會需要花一些時間,請耐心等待。 ``` shell=1 sudo apt install ubuntu-desktop ``` # 4.實驗架構 ![Screenshot 2025-12-01 at 11.52.10 AM](https://hackmd.io/_uploads/Hk_gb9q-Wx.png) # 5.實驗流程 ## 問題與討論 ### 問題與討論 1. 截圖lsusb畫面,確認有USRP B210 2. 截圖uhd_usrp_probe確認B210功能是否正常 3. 截圖gNB修改完之畫面 4. 解釋修改amf addr & tac以及cell_cfg tac的意義是什麼? 5. 截圖驗證 Open5GS 安裝成功的畫面 6. 截圖WebUI註冊UE的畫面 7. 截圖gNB正常啟動的畫面 8. 請問此gNB是用什麼樣的天線配置?什麼頻段?UL/DL頻率多少?且截圖並標示以示證明 9. 請問你的USIM IMSI與ICCID是多少? 10. 解釋IMSI與ICCID的差別。 11. 截圖`./pySim-read.py -p0`設定成功的畫面。 12. 截圖工程模式中手機資訊的畫面。 13. 請自定義任意網路功能測試,並拍照紀錄 14. 請UE測量最大DL/UL是多少? 15. 請測量三種UE到gNB的距離,觀察距離對bitrate的影響。(請拍照紀錄) ## 5-0前製設定 1. 請先執行以下指令,先將Ubuntu更新到最新的狀態 ``` shell=1 sudo apt update sudo apt upgrade ``` 2. 安裝以下需要用到的指令,在終端機輸入以下指令,詢問是否(y/n)時,請按y。 ``` shell=1 sudo apt-get install cmake make gcc g++ pkg-config libfftw3-dev libmbedtls-dev libsctp-dev libyaml-cpp-dev libgtest-dev ``` 3. 請將USRB B210 插上電腦,並確認插在USB 3.0的孔位 ## 5-1 安裝 UHD - 執行以下指令安裝UHD ``` shell=1 sudo add-apt-repository ppa:ettusresearch/uhd sudo apt-get update sudo apt-get install libuhd-dev uhd-host sudo /usr/lib/uhd/utils/uhd_images_downloader.py ``` > :warning:On Ubuntu 22.04, the uhd_images_downloader.py is located in the /usr/lib/uhd/utils folder, but on other Ubuntu versions it may be located in the /usr/libexec/uhd/utils folde. - Check List 1. 利用lsusb指令確定可以識別USRP B210裝置 ![image](https://hackmd.io/_uploads/ByMVD0wZWx.png) 2. 以uhd_usrp_probe指令測試B210是否插在USB 3.0孔位,請正常運作 ![image](https://hackmd.io/_uploads/Sy3N_Rwb-g.png) ---- ### 5-1.問題與討論 1. 截圖lsusb畫面,確認有USRP B210 2. 截圖uhd_usrp_probe確認B210功能是否正常 ---- ## 5-2 安裝 srsRAN-Project - 複製srsRAN 原始碼 ``` shell=1 sudo apt install git git clone https://github.com/srsran/srsRAN_Project.git ``` - 檢查CMakeLists.txt ``` shell=1 cd srsRAN_Project vim CMakeLists.txt ``` 確定有啟用UHD, 如果也需要使用 ZEROMQ, 也可以同時設為ON ![image](https://hackmd.io/_uploads/H1aopADWWl.png) > vim指令提示: 按i鍵進入編輯模式 修改完成後按Esc鍵 接著輸入 `:wq` (Enter) 保存並退出 - 建構Makefile ``` shell=1 mkdir build cd build cmake .. ``` ![image](https://hackmd.io/_uploads/rkIARCwZWe.png) - 編譯 srsRAN_Project ``` shell=1 make -j $(nproc) ``` ![image](https://hackmd.io/_uploads/HkxC1JuW-l.png) - 安裝 srsRAN_Project ``` shell=1 sudo make install ``` ![image](https://hackmd.io/_uploads/SyNc-kObZe.png) - 修改 gNB設定檔 將gnb_rf_b200_tdd_n78_20mhz.yml複製到home目錄下,以方便後續執行 ``` shell=1 cp ~/srsRAN_Project/configs/gnb_rf_b200_tdd_n78_20mhz.yml ~/ ``` - 編輯gnb_rf_b200_tdd_n78_20mhz.yml ``` shell=1 cd ~ vim gnb_rf_b200_tdd_n78_20mhz.yml ``` 需要更改的內容有`amf`的 addr & tac,以及cell_cfg的tac ![image](https://hackmd.io/_uploads/rJKxQyO-Ze.png) --- ### 5-2.問題與討論 1. 截圖gNB修改完之畫面 2. 解釋修改amf addr & tac以及cell_cfg tac的意義是什麼? --- ## 5-3 安裝 Open5GS - 導入公開金鑰:在終端機逐次輸入以下指令 ``` shell=1 sudo apt update sudo apt install gnupg sudo apt install curlcurl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor ``` - 建立 deb 儲存庫 ``` shell=1 echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list ``` - 安裝MongoDB套件 ``` shell=1 sudo apt update sudo apt install -y mongodb-org sudo systemctl start mongod sudo systemctl enable mongod ``` - Check List MongoDB版本,如果有出現,那基本上就是安裝成功 ``` shell=1 mongosh --version ``` ![image](https://hackmd.io/_uploads/HkQXBJd--e.png) - 安裝Opne5G Project ``` shell=1 sudo add-apt-repository ppa:open5gs/latest sudo apt update sudo apt install open5gs ``` ### 驗證 Open5GS 安裝成功 如果 Open5GS 安裝成功後,每次重新開機後都會自動在背景執行,輸入`ps aux | grep open5gs` 可以確認 Open5GS 核心功能是否正常運作,若成功畫面會如下(請確認已以下這些功能是否正常,若不正常請勿執行下一步驟) ![5-1-8 驗證open5gs](https://hackmd.io/_uploads/SJZW_oZGxe.png) > 核心功能如下 > AMF, SMF, UPF, NRF, UDM, UDR, PCF,AUSF, NSSF 確認核心功能都啟用後,便可以開始設定核心網路的 amf, nrf功能了 - 設定核網 AMF 輸入`sudo vim /etc/open5gs/amf.yaml`進入amf的設定檔,依照圖片設定來編輯amf設定值 ![image](https://hackmd.io/_uploads/Hy5qUk_W-e.png) 完成後輸入`sudo systemctl restart open5gs-amfd.service`,重起AMF - 設定核網 NRF 輸入`sudo vim /etc/open5gs/nrf.yaml`進入nrf的設定檔,依照圖片設定來編輯nrf設定值 ![image](https://hackmd.io/_uploads/BJXGvJdb-x.png) 完成後輸入`sudo systemctl restart open5gs-nrfd.service` --- ### 5-3.問題與討論 1. 截圖驗證 Open5GS 安裝成功的畫面 --- ## 5-4安裝 WebUI - 下載Nodesource GPG key ``` shell=1 sudo apt update sudo apt install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg ``` - 建立 deb 儲存庫 ``` shell=1 NODE_MAJOR=20 echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list ``` - 安裝WebUI ``` shell=1 sudo apt update sudo apt install nodejs -y curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash - ``` - 登入WebUI 在FireFox的網址欄中輸入`http://127.0.0.1:9999` >帳號預設為: admin 密碼預設為: 1423 ![image](https://hackmd.io/_uploads/SyoAOJuWZl.png) 進入後點選+以新增用戶 ![image](https://hackmd.io/_uploads/rJw-FyObWx.png) - 註冊subscriber >-IMSI = 001010123456789 -K = 465B5CE8B199B49FAA5F0A2EE238A6BC -OPc = E8ED289DEBA952E4283B54E88E6183CA -APN = internet -Type = IPv4 ![image](https://hackmd.io/_uploads/rJg5YkObWl.png) ![image](https://hackmd.io/_uploads/rJuhKJ_W-e.png) 完成後按SAVE - 設定網路規則 :warning: 這兩個指令只要重新開機就要重新輸入 >啟用 IPv4 Forwarding ``` shell=1 $sudo sysctl -w net.ipv4.ip_forward=1 ``` >加入 NAT Rule ``` shell=1 sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE ``` ### 啟動gNB ``` shell=1 cd ~ sudo gnb -c gnb_rf_b200_tdd_n78_20mhz.yml ``` ![image](https://hackmd.io/_uploads/HJ4-ik_Wbx.png) --- ### 5-4.問題與討論 1. 截圖WebUI註冊UE的畫面 2. 截圖gNB正常啟動的畫面 3. 請問此gNB是用什麼樣的天線配置?什麼頻段?UL/DL頻率多少?且截圖並標示以示證明 --- ## 5-5燒錄USIM ### USIM用戶表格 | IMSI | ICCID | ACC | PIN1 | PUK1 | PIN2 | PUK2 | Ki | OPC | ADM1 | |-------------------|-----------------------|------|------|----------|------|----------|----------------------------------------|-------------------------------------------|----------| | 999700000123080 | 89494400000001230802 | 0001 | 0000 | 08703177 | 0000 | 45260138 | 8C9961848DAA585D050FAB591F4276E3 | D7F0CEC46CCB75C37A759CDD98606D67 | 21864569 | | 999700000123081 | 89494400000001230810 | 0002 | 0000 | 95973474 | 0000 | 08950111 | 61358AB9C491FFFB59AE50D2EB9A6C2C | 904CFF670336D92F634EA2ECBC7C00C3 | 64731141 | | 999700000123082 | 89494400000001230828 | 0004 | 0000 | 86355500 | 0000 | 56026461 | 23E90A58C1812FBCBCF825E0F17848A8 | D261CF29BEC37F9688B3EF25D7536992 | 45438380 | | 999700000123083 | 89494400000001230836 | 0008 | 0000 | 89728335 | 0000 | 46256102 | EF753BA4140CD93F885E3A09FBAC7293 | 50626393F8BCA1FF1B11CF9A7868C50B | 81820960 | | 999700000123084 | 89494400000001230844 | 0010 | 0000 | 13098206 | 0000 | 20635957 | 3306B7A38F2261AB15653DCC14AED52E | 8109AA55B350F3164F8421E13BEA0390 | 04279297 | | 999700000123085 | 89494400000001230851 | 0020 | 0000 | 93314241 | 0000 | 11509590 | 52055049E55A843C37B2EC4F28AC539E | A5E7EB5A30AC6469A0D5794A78F4921C | 44440693 | | 999700000123086 | 89494400000001230869 | 0040 | 0000 | 70631814 | 0000 | 20238703 | CEA2AFF2E4B4606CF3B4A9F726875EC7 | D94B0AC1A503EF22C8C1B022F8A4166C | 94255361 | | 999700000123087 | 89494400000001230877 | 0080 | 0000 | 18908969 | 0000 | 22132097 | 92398FE1F2F3B6BDA41F38C66FA70A5 | 7896A00BD749FDC9D5E952B20115A82B | 36137799 | | 999700000123088 | 89494400000001230885 | 0100 | 0000 | 19476117 | 0000 | 37149093 | 9522DA9224F0CC3277FCDFEA12074A9F | EBC6A13393A08DBBCD20C4B0051CEE40 | 52599472 | | 999700000123089 | 89494400000001230893 | 0200 | 0000 | 64917072 | 0000 | 56246574 | 792A857D82996D7A1BEFEBB07DFC80D | 50EC29E8983BFE58FC8849A7077CCA6D | 67514285 | - 安裝 pySim ``` shell=1 git clone https://github.com/osmocom/pysim cd pysim sudo apt-get install --no-install-recommends pcscd libpcsclite-dev python3 python3-setuptools python3-pyscard python3-pip pip3 install -r requirements.txt ``` - 燒錄資料到USIM 這部份需要細心一點,並且會需要根據你拿到的USIM編號,查詢對應的表格 ``` ./pySim-prog.py -p0 -s [ICCID] --mcc=[MCC] --mnc=[MNC] -a [ADM-KEY] --imsi=[IMSI] -k [KI] --opc [OPC] ``` 在這部份,只有[**ICCID**]跟[**ADM-KEY**]會需要改,其他都複製貼上就可以了! ``` shell=1 mcc=001 mnc=01 imsi=001010123456789 key= 465B5CE8B199B49FAA5F0A2EE238A6BC opc=E8ED289DEBA952E4283B54E88E6183CA ``` 以下是範例,請參考 :warning:請格外注意『`-`』和『`--`』的差別 ![image](https://hackmd.io/_uploads/HysuWlOZbg.png) >./pySim-prog.py -p0 -s 8949440000001230802 --mcc=001 --mnc=01 -a 21864569 --imsi=001010123456789 -k 465B5CE8B199B49FAA5F0A2EE238A6BC --opc=E8ED289DEBA952E4283B54E88E6183CA ![image](https://hackmd.io/_uploads/B1fafed--g.png) - SUCI Configuration 透過以下指令進入pySim的shell當中,並透過後續的指令將想要設定的內容輸入進去 ``` shell=1 ./pySim-shell.py -p0 ``` ![image](https://hackmd.io/_uploads/ry4fEldWWx.png) 在pySIM--Shell中,輸入以下指令完成設定 ``` shell=1 pySIM-shell (MF)> select MF pySIM-shell (MF)> select ADF.USIM pySIM-shell (MF/ADF.USIM)> select EF.UST pySIM-shell (MF)> verify_adm <ADM-KEY> pySIM-shell (MF/ADF.USIM/EF.UST)> ust_service_deactivate 124 pySIM-shell (MF/ADF.USIM/EF.UST)> ust_service_deactivate 125 pySIM-shell (MF/ADF.USIM/EF.UST)> quit ``` ![image](https://hackmd.io/_uploads/SJAlreubZl.png) - Check Point 透過`./pySim-read.py -p0`指令檢查USIM的燒錄結果是否符合預期 ![image](https://hackmd.io/_uploads/B13KreubZe.png) --- ### 5-5.問題與討論 1. 請問你的USIM IMSI與ICCID是多少? 2. 解釋IMSI與ICCID的差別。 3. 截圖`./pySim-read.py -p0`設定成功的畫面。 --- ## 5-6 設定COTS UE - UE密碼:0000 - Configure COTS UE (Google Pixel 8) 須將USIM置入手機並編輯存取點,此處的設定值必須與WebUI上的設定一致! >設定>行動數據設定 ![Screenshot_20251201-014323](https://hackmd.io/_uploads/SJf1Su9bZe.png =300x) >下拉至『存取點名稱』並點選>點選右上角『+』新增>設定名稱、APN、APN通訊協定、APN漫遊通訊協定、開啟APN啟用/停用 ![Screenshot_20251201-014417](https://hackmd.io/_uploads/HJfkBd5-be.png =300x) ![Screenshot_20251201-014428](https://hackmd.io/_uploads/B1Co8u5ZZl.png =300x) ### 連線到gNB - 設定完成後,只要開關飛航就可以連線到gNB,第一次連線可能會花比較久的時間,請耐心等待,連線完成後,就可以看到狀態欄顯示『Open5GS-Magic』 ![image](https://hackmd.io/_uploads/S18cwu5bZe.png) :warning:如果都設定成功,或是連線成功後網路不通,只要多開關幾次飛航模式即可:) - 查看手機系統資訊 在電話撥號的地方輸入『`*#*#4636#*#*`』,就可以進入工程模式查看手機狀態 ![image](https://hackmd.io/_uploads/HJqXK_cWbg.png =300x) --- ### 5-6.問題與討論 1. 截圖工程模式中手機資訊的畫面。 --- ## 5-7 UE測試 - ipref3測試 手機可以下載ipref3的app使用ipref3的功能 ![image](https://hackmd.io/_uploads/H1H-fF9Zbe.png =300x) 配合terminal指令`ipref3 -s` ![image](https://hackmd.io/_uploads/BJ_Pju9ZZe.png =500x) - 任意網路功能測試 ![image](https://hackmd.io/_uploads/Hy23zYqZbx.png) --- ### 5-7.問題與討論 1. 請自定義任意網路功能測試,並拍照紀錄 2. 請UE測量最大DL/UL是多少? 3. 請測量三種UE到gNB的距離,觀察距離對bitrate的影響。(請拍照紀錄) ---