Open5gs: docker
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:
- Core Network (4G/5G) - open5gs - https://github.com/open5gs/open5gs
- IMS (Only 4G supported i.e. VoLTE) - kamailio
- IMS HSS - https://github.com/nickvsnetworking/pyhss
- Osmocom HLR - https://github.com/osmocom/osmo-hlr
- Osmocom MSC - https://github.com/osmocom/osmo-msc
- srsRAN (4G/5G) - https://github.com/srsran/srsRAN
- UERANSIM (5G) - https://github.com/aligungr/UERANSIM
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
cd /usr/local/src/ git clone https://github.com/herlesupreeth/docker_open5gs cd docker_open5gs/base docker build --no-cache --force-rm -t docker_open5gs .
cd ../ims_base docker build --no-cache --force-rm -t docker_kamailio .
cd ../srslte docker build --no-cache --force-rm -t docker_srslte .
cd ../srsran docker build --no-cache --force-rm -t docker_srsran .
cd ../ueransim docker build --no-cache --force-rm -t docker_ueransim .
Build dan Run menggunakan docker-compose
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 .. 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
# 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
# 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
- 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
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