---
# System prepended metadata

title: halo all

---

# Simulasi 5G Menggunakan Open5GS dan UERANSIM

## Tugas Simulasi 5G

1. Gunakan VM Ubuntu 22.04 sebagai OS pada semua laptop
2. Gunakan Open5GS sebagai 5G Core
3. Gunakan UERANSIM sebagai gNB dan UE
4. Gunakan pembagian tugas seperti:
   - 1 Laptop sebagai Server
   - 1 Laptop sebagai gNB
   - 2 Laptop sebagai UE
5. Gunakan format IMSI:
   - "123" sebagai angka tetap
   - "01" sesuai dengan nomor kelompok
   - "xxxxxxxxx" sebagai angka unik untuk setiap UE
6. UE harus bisa mengakses internet (bisa melakukan ping google.com)
7. UE harus bisa berkomunikasi satu sama lain dalam jaringan
8. Analisis protokol komunikasi yang digunakan selama simulasi berlangsung

## VM1: Server (Open5GS Core dengan MongoDB)

### 1. Instalasi MongoDB 4.4.18

```bash
# Impor kunci publik MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

# Buat file list untuk MongoDB
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

# Perbarui database paket
sudo apt update

# Instal versi spesifik MongoDB 4.4.18
sudo apt install -y mongodb-org=4.4.18 mongodb-org-server=4.4.18 mongodb-org-shell=4.4.18 mongodb-org-mongos=4.4.18 mongodb-org-tools=4.4.18

# Cegah upgrade otomatis versi MongoDB
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

# Mulai dan aktifkan MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod
```

### 2. Instalasi Open5GS dari PPA

```bash
# Instal dependensi
sudo apt install -y software-properties-common

# Tambahkan PPA Open5GS
sudo add-apt-repository ppa:open5gs/latest
sudo apt update

# Instal Open5GS
sudo apt install -y open5gs
```

### 3. Konfigurasi Open5GS

```bash
# Verifikasi status layanan
systemctl status open5gs-* | grep Active

# Aktifkan IP forwarding
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Atur NAT (ganti enp0s3 dengan interface jaringan Anda)
sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 -o enp0s3 -j MASQUERADE
sudo iptables -A FORWARD -s 10.45.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Buat aturan permanen
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
```

### 4. Instalasi dan penggunaan open5gs-dbctl

Tool `open5gs-dbctl` digunakan untuk mempermudah pengelolaan subscriber pada Open5GS.

```bash
# Unduh open5gs-dbctl dari GitHub
wget https://raw.githubusercontent.com/open5gs/open5gs/main/misc/db/open5gs-dbctl
sudo mv open5gs-dbctl /usr/bin/
sudo chmod +x /usr/bin/open5gs-dbctl

# Periksa help dari open5gs-dbctl
open5gs-dbctl help

# Jika terjadi error karena mongosh tidak ditemukan
# Edit file open5gs-dbctl untuk menggunakan mongo alih-alih mongosh
sudo nano /usr/bin/open5gs-dbctl
# Ganti semua instance "mongosh" dengan "mongo"

# Tambahkan subscriber pertama (1230122222222)
open5gs-dbctl add 1230122222222 465B5CE8B199B49FAA5F0A2EE238A6BC E8ED289DEBA952E4283B54E88E6183CA internet

# Tambahkan subscriber kedua (12301333333333)
open5gs-dbctl add 12301333333333 465B5CE8B199B49FAA5F0A2EE238A6BC E8ED289DEBA952E4283B54E88E6183CA internet

# Melihat daftar subscriber
open5gs-dbctl list
```

Format perintah basic untuk menambahkan subscriber adalah:
```
open5gs-dbctl add <IMSI> <Key> <OPC> <APN>
```

## VM2: Setup gNB dengan UERANSIM

### Langkah 1: Persiapan Sistem

```bash
# Update paket sistem
sudo apt update && sudo apt upgrade -y

# Instal dependensi yang dibutuhkan
sudo apt install -y git cmake make gcc g++ libsctp-dev lksctp-tools iproute2 net-tools iputils-ping
```

### Langkah 2: Pengunduhan dan Kompilasi UERANSIM

```bash
# Clone repository UERANSIM
cd ~
git clone https://github.com/aligungr/UERANSIM
cd UERANSIM

# Kompilasi UERANSIM
make
```

### Langkah 3: Konfigurasi gNB

```bash
# Dapatkan alamat IP
IP_ADDRESS=$(ip -4 addr show $(ip route | grep default | awk '{print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
echo "Alamat IP: $IP_ADDRESS"

# Buat direktori konfigurasi
mkdir -p ~/etc/ueransim

# Buat konfigurasi gNB
cat > ~/UERANSIM/config/gnb.yaml << EOF
# UERANSIM gNB Configuration
mcc: '123'                     # Mobile Country Code
mnc: '01'                      # Mobile Network Code untuk kelompok 01
nci: '0x000000010'             # NR Cell Identity
idLength: 32                   # ID Length
tac: 1                         # Tracking Area Code

linkIp: $IP_ADDRESS            # IP laptop gNB (otomatis terdeteksi)
ngapIp: $IP_ADDRESS            # IP untuk NGAP interface
gtpIp: $IP_ADDRESS             # IP untuk GTP interface

# Alamat IP AMF (Open5GS server)
amfConfigs:
  - address: 192.168.1.1       # Ganti dengan alamat IP server Open5GS
    port: 38412                # Port default AMF

# Konfigurasi Slice
slices:
  - sst: 1                     # Slice Service Type (default: 1)
    sd: 0x000001               # Slice Differentiator (opsional)

# Informasi debug
logLevel: info                 # debug, info, warn, error, fatal
EOF

echo "Konfigurasi gNB disimpan ke ~/UERANSIM/config/gnb.yaml"
```

**Catatan**: Pastikan untuk mengganti alamat IP server Open5GS dengan IP yang benar (VM1).

### Langkah 4: Skrip Menjalankan gNB

```bash
# Buat skrip untuk menjalankan gNB
cat > ~/start-gnb.sh << 'EOF'
#!/bin/bash
cd ~/UERANSIM
sudo ./build/nr-gnb -c config/gnb.yaml
EOF

# Berikan izin eksekusi
chmod +x ~/start-gnb.sh

echo "Skrip start-gnb.sh telah dibuat dan diberikan izin eksekusi"
```

### Langkah 5: Konfigurasi Firewall (Opsional)

```bash
# Mengizinkan traffic SCTP untuk NGAP (gNB ke AMF)
sudo ufw allow 38412/sctp

# Mengizinkan traffic UDP untuk GTP (gNB ke UPF)
sudo ufw allow 2152/udp

# Aktifkan firewall jika belum aktif
sudo ufw enable
```

### Langkah 6: Verifikasi Konektivitas ke Server Open5GS

```bash
# Periksa konektivitas ke server Open5GS
ping -c 4 192.168.1.1  # Ganti dengan alamat IP server Open5GS

# Periksa port SCTP (NGAP) terbuka di server
nc -zv 192.168.1.1 38412

# Periksa port UDP (GTP) terbuka di server
nc -zvu 192.168.1.1 2152
```

### Langkah 7: Menjalankan gNB

```bash
# Jalankan gNB (ini akan menampilkan log)
~/start-gnb.sh
```

Output yang diharapkan:
```
[2024-03-10 10:00:00.000] [sctp] [info] Trying to establish SCTP connection... (192.168.1.1:38412)
[2024-03-10 10:00:00.100] [sctp] [info] SCTP connection established (192.168.1.1:38412)
[2024-03-10 10:00:00.200] [ngap] [info] NGSetupRequest sent
[2024-03-10 10:00:00.300] [ngap] [info] NGSetupResponse received
```

### Langkah 8: Pemecahan Masalah

Jika terjadi masalah konektivitas:

1. **Periksa konfigurasi jaringan** pada kedua VM (pastikan keduanya bisa saling ping)
   ```bash
   ip addr
   ip route
   ping 192.168.1.1  # Alamat server Open5GS
   ```

2. **Periksa layanan AMF di Open5GS** berjalan dengan baik:
   ```bash
   # Di VM1 (Server)
   sudo systemctl status open5gs-amfd
   ```

3. **Periksa firewall** untuk memastikan port diizinkan:
   ```bash
   sudo ufw status
   ```

4. **Periksa log AMF** di server Open5GS:
   ```bash
   # Di VM1 (Server)
   sudo tail -f /var/log/open5gs/amf.log
   ```

## Langkah Selanjutnya

Setelah VM2 (gNB) berhasil terhubung ke VM1 (Open5GS Core), langkah berikutnya adalah menyiapkan VM3 dan VM4 sebagai UE menggunakan UERANSIM.