Difference between revisions of "Open5gs: docker"

From OnnoWiki
Jump to navigation Jump to search
Line 92: Line 92:
 
Clone repositori dan buat image docker dari open5gs, kamailio, ueransim
 
Clone repositori dan buat image docker dari open5gs, kamailio, ueransim
  
 +
sudo su
 
  cd /usr/local/src/
 
  cd /usr/local/src/
 
  git clone https://github.com/herlesupreeth/docker_open5gs
 
  git clone https://github.com/herlesupreeth/docker_open5gs

Revision as of 19:13, 10 September 2023

Sumber: https://github.com/herlesupreeth/docker_open5gs

Berbeda dengan nama repositorinya, repositori ini berisi file buruh docker untuk deploy jaringan 4G/5G simulasi Over-The-Air (OTA) atau RF menggunakan proyek berikut:

Test Setup

Docker host machine

  • Ubuntu 20.04 or 22.04

Over-The-Air (OTA) setup:

  • srsRAN (eNB/gNB) menggunakan Ettus USRP B210
  • srsRAN eNB menggunakan LimeSDR Mini v1.3
  • srsRAN eNB menggunakan LimeSDR-USB

RF simulasi setup:

  • srsRAN (gNB + UE) simulasi menggunakan ZMQ
  • UERANSIM (gNB + UE) simulator


Persyaratan wajib:

docker-ce - Version 22.0.5 atau yang lebih tinggi
docker-compose - Version 2.14 atau yang lebih tinggi


Setup IP Statik

Edit

sudo su
apt update
apt -y install net-tools


vi /etc/netplan/00-installer-config.yaml

Pastikan,

# This is the network config written by 'subiquity'
# network:
#   ethernets:
#     enp0s31f6:
#       dhcp4: true
#   version: 2
#

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s31f6:
            addresses:
                - 192.168.0.5/24
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
            routes:
                - to: default
                  via: 192.168.0.222

Install docker

Install pendukung

sudo apt update
sudo apt upgrade
sudo apt -y install apt-transport-https ca-certificates curl software-properties-common

Add GPG Key Docker Repo & Sources List

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Install

sudo apt -y install docker-ce docker-compose



Install

Clone repositori dan buat image docker dari open5gs, kamailio, ueransim

sudo su
cd /usr/local/src/
git clone https://github.com/herlesupreeth/docker_open5gs
cd /usr/local/src/docker_open5gs/base
docker build --no-cache --force-rm -t docker_open5gs .
cd /usr/local/src/docker_open5gs/ims_base
docker build --no-cache --force-rm -t docker_kamailio .
cd /usr/local/src/docker_open5gs/srslte
docker build --no-cache --force-rm -t docker_srslte .
cd /usr/local/src/docker_open5gs/srsran
docker build --no-cache --force-rm -t docker_srsran .
cd /usr/local/src/docker_open5gs/ueransim
docker build --no-cache --force-rm -t docker_ueransim .

Build dan Run menggunakan docker-compose

sudo su
apt-get install -y linux-tools-common linux-tools-5.15.0-82-generic linux-cloud-tools-5.15.0-82-generic linux-tools-generic linux-cloud-tools-generic
cd /usr/local/src/docker_open5gs/
set -a
source .env
sudo ufw disable
docker-compose -f 4g-volte-deploy.yaml build
docker-compose -f sa-deploy.yaml build
sudo sysctl -w net.ipv4.ip_forward=1
sudo cpupower frequency-set -g performance

4G deployment

cd /usr/local/src/docker_open5gs/
# 4G Core Network + IMS + SMS over SGs
docker-compose -f 4g-volte-deploy.yaml up
# srsRAN eNB using SDR (OTA)
docker-compose -f srsenb.yaml up -d && docker container attach srsenb
# srsRAN ZMQ eNB (RF simulated)
docker-compose -f srsenb_zmq.yaml up -d && docker container attach srsenb_zmq
# srsRAN ZMQ 4G UE (RF simulated)
docker-compose -f srsue_zmq.yaml up -d && docker container attach srsue_zmq

5G SA deployment

cd /usr/local/src/docker_open5gs/
# 5G Core Network
docker-compose -f sa-deploy.yaml up
# srsRAN gNB using SDR (OTA)
docker-compose -f srsgnb.yaml up -d && docker container attach srsgnb
# srsRAN ZMQ gNB (RF simulated)
docker-compose -f srsgnb_zmq.yaml up -d && docker container attach srsgnb_zmq
# srsRAN ZMQ 5G UE (RF simulated)
docker-compose -f srsue_5g_zmq.yaml up -d && docker container attach srsue_5g_zmq
# UERANSIM gNB (RF simulated)
docker-compose -f nr-gnb.yaml up -d && docker container attach nr_gnb
# UERANSIM NR-UE (RF simulated)
docker-compose -f nr-ue.yaml up -d && docker container attach nr_ue

Konfigurasi

Untuk quick run (eNB/gNB, CN berada dalam docker network yang sama), edit hanya parameter berikut di .env sesuai setup kita

cd /usr/local/src/docker_open5gs
vi .env

Parametery yang di ubah,

  • MCC
  • MNC
  • TEST_NETWORK --> Ubah ini hanya jika bentrok dengan jaringan internal di rumah/kantor Anda
  • DOCKER_HOST_IP --> Ini adalah alamat IP dari host yang menjalankan pengaturan docker Anda
  • SGWU_ADVERTISE_IP --> Ubah ini ke nilai DOCKER_HOST_IP yang ditetapkan di atas hanya jika eNB tidak menjalankan jaringan/host docker yang sama
  • UPF_ADVERTISE_IP --> Ubah ini ke nilai DOCKER_HOST_IP yang ditetapkan di atas hanya jika gNB tidak menjalankan jaringan/host docker yang sama
  • UE_IPV4_INTERNET --> Ubah ini ke rentang ip jaringan UE yang Anda inginkan (agar tidak konflik) untuk APN internet
  • UE_IPV4_IMS --> Ubah ini ke rentang ip jaringan UE yang Anda inginkan (agar tidak konflik) untuk ims APN

Jika eNB/gNB TIDAK berjalan di jaringan/host docker yang sama dengan host yang menjalankan Core/IMS yang melakukan docker, ikuti langkah-langkah tambahan di bawah ini

Contoh .env

vi /usr/local/src/docker_open5gs/.env
MCC=001
MNC=01
TEST_NETWORK=172.22.0.0/24
DOCKER_HOST_IP=192.168.0.5
UE_IPV4_INTERNET=10.45.0.0/24
UE_IPV4_IMS=10.46.0.0/24
# SGW
SGWC_IP=172.22.0.5
SGWU_IP=172.22.0.6
SGWU_ADVERTISE_IP=172.22.0.6
# SMF
SMF_IP=172.22.0.7
SMF_DNS1=8.8.8.8
SMF_DNS2=8.8.4.4
# UPF
UPF_IP=172.22.0.8
UPF_ADVERTISE_IP=172.22.0.8

Alternatif contoh

vi /usr/local/src/docker_open5gs/.env
MCC=999
MNC=70
TEST_NETWORK=172.22.0.0/24
DOCKER_HOST_IP=192.168.0.5
UE_IPV4_INTERNET=10.45.0.0/24
UE_IPV4_IMS=10.46.0.0/24
# SGW
SGWC_IP=172.22.0.5
SGWU_IP=172.22.0.6
SGWU_ADVERTISE_IP=172.22.0.6
# SMF
SMF_IP=172.22.0.7
SMF_DNS1=8.8.8.8
SMF_DNS2=8.8.4.4
# UPF
UPF_IP=172.22.0.8
UPF_ADVERTISE_IP=172.22.0.8

# UERANSIM
NR_GNB_IP=172.22.0.23
NR_UE_IP=172.22.0.24

UE1_IMEI=356938035643803
UE1_IMEISV=4370816125816151
UE1_IMSI=999701234567895
UE1_KI=11111111111111111111111111111111
UE1_OP=11111111111111111111111111111111
UE1_AMF=8000

4G deployment

Di bawah mme section di docker compose file (4g-volte-deploy.yaml), uncomment bagian berikut,

...
    # ports:
    #   - "36412:36412/sctp"
...

Kemudian, uncomment bagian berikut di bawah sgwu section

...
    # ports:
    #   - "2152:2152/udp"
...

5G SA deployment

Di bawah amf section di docker compose file (sa-deploy.yaml), uncomment bagian berikut,

...
    # ports:
    #   - "38412:38412/sctp"
...

Kemudian, uncomment bagian berikut dibawah upf section

...
    # ports:
    #   - "2152:2152/udp"
...

Provisioning SIM information

Provisioning SIM information di open5gs HSS sebagai berikut:

  • Buka (http://<DOCKER_HOST_IP>:3000) di web browser, dimana <DOCKER_HOST_IP> adalah IP dari machine/VM yang menjalankan open5gs container. Login dengan credential berikut,
Username : admin
Password : 1423
  • Gunakan Web UI, tambahkan subscriber

Provisioning IMSI dan MSISDN dengan OsmoHLR sebagai berikut,

  • Pertama-tama, login ke osmohlr container
docker exec -it osmohlr /bin/bash
  • Kemudian, telnet ke localhost
telnet localhost 4258
OsmoHLR> enable
OsmoHLR#
  • Akhirnya, register subscriber information contoh berikut,
OsmoHLR# subscriber imsi 001010123456790 create
OsmoHLR# subscriber imsi 001010123456790 update msisdn 9076543210
  • Ganti IMSI dan MSISDN seperti SIM yang kita program.

Provisioning SIM information di pyHSS sebagai berikut,

  • Akses http://172.22.0.18:8080/docs/
  • Pilih apn -> Create new APN -> Press Try it out. Kemudian, di payload section gunakan contoh JSON berikut dan tekan Execute
{
  "apn": "internet",
  "apn_ambr_dl": 0,
  "apn_ambr_ul": 0
}
  • Catat apn_id yang di set di Response body dibawah Server response untuk internet APN
  • Ulangi creation step untuk payload berikut,
{
  "apn": "ims",
  "apn_ambr_dl": 0,
  "apn_ambr_ul": 0
}
  • Catat apn_id yang di set di Response body dibawah Server response untuk ims APN
  • Execute this step of APN creation only once

Selanjutnya, select auc -> Create new AUC -> Press Try it out. Kemudian, di payload section gunakan contoh JSON berikut untuk mengisi ki, opc dan amf untuk SIM dan press Execute

{
  "ki": "8baf473f2f8fd09487cccbd7097c6862",
  "opc": "8E27B6AF0E692E750F32667A3B14605D",
  "amf": "8000",
  "sqn": 0,
  "imsi": "001010123456790"
}
  • Catat auc_id yang di set di Response body dibawah Server response
  • Ganti imsi, ki, opc dan amf sesuai yang kita ingin program ke SIM

Selanjutnya, select subscriber -> Create new SUBSCRIBER -> Press Try it out. Selanjutnya, di payload section gunakan contoh JSON berikut untuk mengisi in imsi, auc_id dan apn_list untuk SIM dan press Execute

{
  "imsi": "001010123456790",
  "enabled": true,
  "auc_id": 1,
  "default_apn": 1,
  "apn_list": "0,1",
  "msisdn": "9076543210",
  "ue_ambr_dl": 0,
  "ue_ambr_ul": 0
}
  • auc_id adalah ID untuk AUC dibuat di tahap sebelumnya.
  • default_apn adalah ID untuk internet APN dibuat di tahap sebelumnya
  • apn_list adalah comma separated list dari APN ID yang diijinkan untuk UE i.e. APN ID untuk internet dan ims APN dibuat di tahap sebelumnya
  • Ganti imsi dan msisdn sesuai dengan SIM yang kita program

Akhirnya, select ims_subscriber -> Create new IMS SUBSCRIBER -> Press Try it out. Selanjutnya, di payload section gunakan contoh JSON berikut untuk mengisi imsi, msisdn, msisdn_list, scscf_peer, scscf_realm dan scscf untuk SIM/deployment dan press Execute

{
    "imsi": "001010123456790",
    "msisdn": "9076543210",
    "sh_profile": "string",
    "scscf_peer": "scscf.ims.mnc001.mcc001.3gppnetwork.org",
    "msisdn_list": "[9076543210]",
    "ifc_path": "default_ifc.xml",
    "scscf": "sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060",
    "scscf_realm": "ims.mnc001.mcc001.3gppnetwork.org"
}
  • Ganti imsi, msisdn dan msisdn_list sesuai dengan SIM yang kita program.
  • Ganti scscf_peer, scscf dan scscf_realm seperti deployment kita

Error

error di 4G

pcscf        | 96(152) INFO: cdp [receiver.c:874]: peer_connect(): peer_connect(): Trying to connect to 172.22.0.4 port 3873
scscf        |  5(61) DEBUG: ims_dialog [dlg_handlers.c:1923]: print_all_dlgs(): ******************** 5(61) DEBUG: ims_dialog [dlg_handlers.c:1924]: print_all_dlgs(): printing 4096 dialogs
scscf        |  5(61) DEBUG: ims_dialog [dlg_handlers.c:1934]: print_all_dlgs(): ******************** 5(61) DEBUG: ims_auth [authorize.c:187]: reg_await_timer(): Looking for expired/useless at 72428826
scscf        |  5(61) DEBUG: ims_auth [authorize.c:232]: reg_await_timer(): [DONE] Looking for expired/useless at 72428826
pcscf        | 96(152) ERROR: cdp [receiver.c:922]: peer_connect(): peer_connect(): Error opening connection to to 172.22.0.4 port 3873 >No route to host


uhd_usrp_probe
[INFO] [UHD] linux; GNU C++ version 11.2.0; Boost_107400; UHD_4.1.0.5-3
[WARNING] [B200] EnvironmentError: IOError: Could not find path for image: usrp_b200_fw.hex
Using images directory: <no images directory located>
Set the environment variable 'UHD_IMAGES_DIR' appropriately or follow the below instructions to download the images package.
Please run:
 "/lib/x86_64-linux-gnu/uhd/utils/uhd_images_downloader.py"
Error: LookupError: KeyError: No devices found for ----->
Empty Device Address

Referensi