# 5G testbed (srsUE SRSRAN Project open5gs) ###### tags: `5G` `srsran project` `oran` ![image](https://hackmd.io/_uploads/ByCtiVFwA.png) # **Outline** ### 1. System Requirements ### 2. UHD ### 3. ZMQ ### 4. srsRAN 4G ### 5. srsRAN Project ### 6. Open5gs ### 7. Modify gnb.conf amf.yml ### 8. Turn on open5gs / gNB / UE ### 9. Adding a route for the UE to have WAN connectivity ### 10. Application # **1. System Requirements** # **2. UHD** ![image](https://hackmd.io/_uploads/SkPS6NtDC.png) #### From: https://files.ettus.com/manual/page_build_guide.html ## 2-1 Setting up the dependencies on Ubuntu ``` sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool \ g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \ libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools \ python3-ruamel.yaml ``` ## 2-2 Getting the source code ``` git clone https://github.com/EttusResearch/uhd.git ``` ## 2-3 Build Instructions ``` cd <uhd-repo-path>/host mkdir build cd build cmake ../ make make test # This step is optional sudo make install ``` # **3. ZMQ** ## 3-1 Install development libraries ``` sudo apt-get install cmake make gcc g++ pkg-config libfftw3-dev libmbedtls-dev libsctp-dev libyaml-cpp-dev libgtest-dev sudo apt-get install libzmq3-dev ``` ## 3-2 Install libzmq ``` git clone https://github.com/zeromq/libzmq.git cd libzmq ./autogen.sh ./configure make sudo make install sudo ldconfig ``` ## 3-2 Install czmq ``` git clone https://github.com/zeromq/czmq.git cd czmq ./autogen.sh ./configure make sudo make install sudo ldconfig ``` # **4. srsRAN 4G** ![image](https://hackmd.io/_uploads/rJxMh4tv0.png) #### From: https://docs.srsran.com/projects/4g/en/latest/index.html ## 4-1 Install required libraries ``` sudo apt-get install build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev ``` ## 4-2 Download and build srsRAN 4G ``` git clone https://github.com/srsRAN/srsRAN_4G.git cd srsRAN_4G mkdir build cd build cmake ../ make make test ``` ## 4-3 Install srsRAN 4G ``` sudo make install srsran_install_configs.sh user ``` # **5. srsRAN Project** ![](https://hackmd.io/_uploads/BkpHd4oUh.png) #### From: https://docs.srsran.com/projects/project/en/latest/index.html ## 5-1 Install required libraries ``` sudo apt-get install cmake make gcc g++ pkg-config libfftw3-dev libmbedtls-dev libsctp-dev libyaml-cpp-dev libgtest-dev ``` ## 5-2 Download and build srsRAN Project ``` git clone https://github.com/srsran/srsRAN_Project.git cd srsRAN_Project mkdir build cd build cmake ../ -DENABLE_EXPORT=ON -DENABLE_ZEROMQ=ON make -j`nproc` ``` ## 5-3 Install srsRAN Project ``` sudo make install ``` # **6. Open5gs** ![image](https://hackmd.io/_uploads/Bk8TiEKPR.png) #### From: https://open5gs.org/open5gs/docs/guide/01-quickstart/ ## 6-1 Getting MongoDB ``` sudo apt update sudo apt install gnupg curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor ``` ### 6-1-2 On ubuntu 22.04 (Jammy) ``` 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 ``` ### 6-1-3 Install the MongoDB packages ``` sudo apt update sudo apt install -y mongodb-org sudo systemctl start mongod (if '/usr/bin/mongod' is not running) sudo systemctl enable mongod (ensure to automatically start it on system boot) ``` ## 6-2 Install Open5GS ``` sudo add-apt-repository ppa:open5gs/latest sudo apt update sudo apt install open5gs ``` ## 6-3 Install the WebUI of Open5GS ### 6-3-1 Download and import the Nodesource GPG key ``` 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 ``` ### 6-3-2 Create deb repository ``` 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 ``` ### 6-3-3 Run Update and Install ``` sudo apt update sudo apt install nodejs -y ``` ### 6-3-3 Install WebUI of Open5GS ``` curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash - ``` ## 6-4 Register Subscriber Information ### 6-4-1 Connect to http://localhost:9999 and login with admin account. ``` Username : admin Password : 1423 ``` ![image](https://hackmd.io/_uploads/HylafHKDC.png) ### 6-4-2 To add subscriber information, you can do WebUI operations in the following order: ``` 1. Go to Subscriber Menu. 2. Click + Button to add a new subscriber. 3. Fill the IMSI, security context(K, OPc, AMF), and APN of the subscriber. 4. Click SAVE Button ``` ![image](https://hackmd.io/_uploads/SyevmSFPC.png) ## 6-5 Adding a route for the UE to have WAN connectivity ### To enable forwarding and add the NAT rule, enter ``` ### Enable IPv4/IPv6 Forwarding sudo sysctl -w net.ipv4.ip_forward=1 sudo sysctl -w net.ipv6.conf.all.forwarding=1 ### Add NAT Rule sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE sudo ip6tables -t nat -A POSTROUTING -s 2001:db8:cafe::/48 ! -o ogstun -j MASQUERADE ``` # **7. Modify setting file** ## 7-1 Modify gnb.conf ``` cd srsRAN_Project/configs sudo vim gnb_zmq.yml amf: addr: 127.0.0.5 bind_addr: 127.0.0.5 ``` ## 7-2 Modify amf.yml ``` cd /etc/open5gs sudo vim amf.yaml guami: - plmn_id: mcc: 001 mnc: 01 amf_id: region: 2 set: 1 tai: - plmn_id: mcc: 001 mnc: 01 tac: 7 plmn_support: - plmn_id: mcc: 001 mnc: 01 ``` ## 7-3 Modify nrf.yml ``` sudo vim nrf.yaml nrf: serving: # 5G roaming requires PLMN in NRF - plmn_id: mcc: 001 mnc: 01 ``` # **8. Turn on open5gs / gNB / UE** ## 8-1 Turn on/off open5gs ``` ## turn on sudo systemctl restart open5gs-amfd or sudo systemctl restart open5gs-* ## turn off sudo systemctl stop open5gs-amfd or sudo systemctl restart open5gs-* ``` ## 8-2 Turn on gNB ``` sudo gnb -c gnb_rf_b200_tdd_n78_10mhz.yml ``` ## 8-3 Turn on UE #### => If UE, gNB, CN in one VM do network namespace ``` sudo ip netns add ue1 sudo ip netns list sudo ip netns exec ue1 ping 172.16.0.1 ``` ### Turn on UE ``` sudo srsue ue.conf ``` # **9. Adding a route for the UE to have WAN connectivity** ### => In order to bridge between the PGWU/UPF and WAN (Internet), must enable IP forwarding and add a NAT rule to your IP Tables. ## 9-1 To enable forwarding and add the NAT rule ``` ### Enable IPv4/IPv6 Forwarding sudo sysctl -w net.ipv4.ip_forward=1 sudo sysctl -w net.ipv6.conf.all.forwarding=1 ### Add NAT Rule sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE sudo ip6tables -t nat -A POSTROUTING -s 2001:db8:cafe::/48 ! -o ogstun -j MASQUERADE ``` ## 9-2 Configure the firewall correctly ``` sudo ufw status => Status: active sudo ufw disable => Firewall stopped and disabled on system startup sudo ufw status => Status: inactive ``` ## 9-3 add a default route for the UE ``` sudo ip netns exec ue1 ip route add default via 10.45.0.1 dev tun_srsue ``` ### Routing table of ue1: ``` user@user:~$ sudo ip netns exec ue1 route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.45.0.1 0.0.0.0 UG 0 0 0 tun_srsue 10.45.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun_srsue ``` # **10. Application** ## 10-1 Using chrome to browse website with srsue ### Download chrome ``` wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb sudo apt-get install -f ``` ``` sudo ip netns exec ue1 su -c "DISPLAY=:0 google-chrome --no-sandbox" $USER ``` ## 10-2 Using tun_srsue to ping ``` sudo ping -I tun_srsue google.com sudo traceroute -i tun_srsue google.com ``` ## ********************* Troubleshooting ********************* ### Can not connect to network: ``` sudo vim /etc/resolv.conf nameserver 8.8.8.8 ``` ![image](https://hackmd.io/_uploads/HyYZzBFvC.png)