티스토리 뷰

Simulation with Open5GS / UERANSIM

5G 코어망과 RAN망의 구성요소들을 오픈소스(O-RAN) 를 활용하여 테스트 수행 후 과제 제출

 

 

1. Open5GS 소개

Open5GS는 3GPP Release-16 준수하는 C 언어 기반의 5G 코어(5GC), 4G(EPC) 오픈소스 프로젝트이며, 지속해서 코어 요소들이 추가 구현되고 있다. 

 

☞  5G SA (StandAlone, 5G 단독/독립형) Core 구성요소

  • AMF - Access and Mobility Management Function : 접속 및 이동성 관리
  • SMF - Session Management Function : 세션 관리 (슬라이스별 전용)
  • AUSF - Authentication Server Function : 인증 서버
  • NRF - NF Repository Function : 네트워크 기능 저장소
  • UDM - Unified Data Management : 통합 데이터 관리
  • UDR - Unified Data Repository : 통합 데이터 저장소
  • PCF - Policy and Charging Function : 정책 제어
  • BSF - Binding Support Function : 세션 바인딩 관리
  • UPF - User Plane Function : 사용자 평면 처리 (슬라이스별 전용)
  • NSSF - Network Slice Selection Function : 네트워크 슬라이스 구성 관리

 

2. UERANSIM 소개

 

UERANSIM5G UE(3GPP Access, 단말) & RAN(Radio Access Network, gNodeB, 기지국) 오픈소스로, 5G Control Plane 과 User Plane 모두 지원된다.

 

 - 5G Core와 연동 가능한 오픈소스 가상 UE + gNB 시뮬레이터

 - 5G 접속·데이터 통신 테스트를 소프트웨어 환경에서 수행할 수 있게 해주는 필수 도구

 

<참고> https://github.com/aligungr/UERANSIM/wiki/Feature-Set

 

 

 

3. 실습 환경 구성

- 설치환경 : AWS 클라우드 인스턴스 (EC2-T2 xlarge)  2식 

- 운영체제 : ubuntu 22.04 LTS (AWS EC2)

- 노드 1 : 5GS-RAN (vCPU 4개, mem 16G)

- 노드 2 : 5GS-UERANSIM (vCPU 4개, mem 16G)

 

            

 

☞  Open5G 실습 구성도

 

4. 5G-RAN 설치

- 기본 환경 설치

# 기본 설정
sudo apt update
timedatectl set-timezone Asia/Seoul

# MongoDB GPG 키를 추가
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - 


# 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 

# 의존성 주입
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
dpkg -i libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb


# MongoDB 설치

sudo apt-get install -y mongodb-org 


- 서비스 시작

sudo systemctl start mongod 

- 서비스 상태 확인

sudo systemctl status mongod 


- 서비스 영구 적용
sudo systemctl enable mongod 


- MongoDB Shell 저장소 키 추가
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

- 리포지토리 추가
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" \
| sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

# 패키지 업데이트
sudo apt update

# mongosh 설치

sudo apt install -y mongodb-mongosh


# MongoDB 연결 테스트

mongosh

 

 

- mongoDB 상태확인

 

 

 

- 개발 도구 및 Open5gs 설치

sudo apt install software-properties-common 
sudo add-apt-repository ppa:open5gs/latest -y 

sudo apt update 
sudo apt install open5gs -y 

sudo apt install curl


# nodej  설치
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs -y


# open5g 설치

curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash -

 

 

- 네트워크 설정

# sysctl 및 라우팅 설정

sudo sysctl -w net.ipv4.ip_forward=1 
sudo sysctl -w net.ipv6.conf.all.forwarding=1 

# iptables 설정

sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE 
sudo ip6tables -t nat -A POSTROUTING -s 2001:230:cafe::/48 ! -o ogstun -j MASQUERADE

 

 

- WEB-UI 서비스

# 서비스 확인

sudo systemctl status open5gs-webui


# 웹ui 설정변경(외부노출)

sudo vi /usr/lib/node_modules/open5gs/server/index.js
const _hostname = process.env.HOSTNAME || '192.168.47.83';  ## ip를 호스트 ip 로 변경
const port = process.env.PORT || 9999;


# 웹서버 재기동

sudo systemctl restart open5gs-webui.service
sudo systemctl status open5gs-webui.service

 

- Open5gs 설정

더보기
# open5gs UPF 설정

sudo vi /etc/open5gs/upf.yaml
upf:
  pfcp:
    server:
      - address: 192.168.47.83  # ip 변경



# AMF 설정 변경

sudo vi /etc/open5gs/amf.yaml
 ngap:
    server:
      - address: 192.168.47.83  # ip 변경
      

# UPF, AMF 재기동 및 상태확인

sudo systemctl restart open5gs-amfd
sudo systemctl restart open5gs-upfd

sudo tail -f /var/log/open5gs/amf.log
sudo tail -f /var/log/open5gs/upf.log

 

- config 정보

=== Open5GS 전체 서비스 설정 요약 ===

🎯 amf:
  📡 SBI Server:
          - address: 192.168.47.83
  🔗 NRF Client:
            - uri: http://192.168.47.83:7777
              #        - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 8778
            - uri: http://192.168.47.83:7777
            port: 9090
  📶 NGAP:
          - address: 192.168.47.83

🎯 ausf:
  📡 SBI Server:
          - address: 0.0.0.0
  🔗 NRF Client:
            - uri: http://192.168.47.83:7777
  🚪 Ports:
            port: 8777
            - uri: http://192.168.47.83:7777

🎯 bsf:
  📡 SBI Server:
          - address: 127.0.0.15
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777

🎯 hss:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:
            port: 9090

🎯 mme:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:
            port: 9091

🎯 nrf:
  📡 SBI Server:
          - address: 192.168.47.83
  🔗 NRF Client:
  🚪 Ports:
            port: 7777

🎯 nssf:
  📡 SBI Server:
          - address: 127.0.0.14
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777

🎯 pcf:
  📡 SBI Server:
          - address: 127.0.0.13
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777
            port: 9090

🎯 pcrf:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:
            port: 9090

🎯 scp:
  📡 SBI Server:
          - address: 127.0.0.200
  🔗 NRF Client:
            - uri: http://127.0.0.10:7777
  🚪 Ports:
            port: 7777

🎯 sepp1:
  📡 SBI Server:
          - address: 127.0.1.250
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777
            port: 7777
              port: 7777
              uri: https://sepp2.localdomain:7777
                uri: https://sepp2.localdomain:7777

🎯 sepp2:
  📡 SBI Server:
          - address: 127.0.2.250
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777
            port: 7777
              port: 7777
              uri: https://sepp1.localdomain:7777
                uri: https://sepp1.localdomain:7777

🎯 sgwc:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:

🎯 sgwu:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:

🎯 smf:
  📡 SBI Server:
          - address: 0.0.0.0
  🔗 NRF Client:
            - uri: http://192.168.47.83:7777
  🚪 Ports:
            port: 8000
            - uri: http://192.168.47.83:7777
            port: 8806
            port: 3123  # 2123에서 변경
            port: 2153
  🔄 UPF:

🎯 udm:
  📡 SBI Server:
          - address: 127.0.0.12
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777

🎯 udr:
  📡 SBI Server:
          - address: 127.0.0.20
  🔗 NRF Client:
            - uri: http://127.0.0.200:7777
  🚪 Ports:
            port: 7777

🎯 upf:
  📡 SBI Server:
  🔗 NRF Client:
  🚪 Ports:
            port: 9090

 

 

 

- 서비스 실행 및 중지

더보기

# 서비스 실행

#!/bin/bash
# open5gs-start-all.sh - Open5GS 모든 서비스 시작 스크립트

echo "🚀 Open5GS 모든 서비스 시작 중..."

# NRF 먼저 시작 (다른 NF들이 등록할 대상)
echo "📍 NRF 시작..."
sudo systemctl start open5gs-nrfd
sleep 3

# 사용자 평면 시작
echo "📡 사용자 평면 시작..."
sudo systemctl start open5gs-upfd
sleep 2
sudo systemctl start open5gs-smfd
sleep 2

# 제어 평면 시작
echo "🎮 제어 평면 시작..."
sudo systemctl start open5gs-amfd
sleep 2

# 데이터 관리 시작
echo "💾 데이터 관리 시작..."
sudo systemctl start open5gs-udmd
sudo systemctl start open5gs-udrd
sleep 2

# 기타 NF들 시작
echo "🔧 기타 NF 시작..."
sudo systemctl start open5gs-ausfd
sudo systemctl start open5gs-pcfd
sudo systemctl start open5gs-bsfd
sudo systemctl start open5gs-nssfd
sleep 2

echo "✅ 모든 서비스 시작 완료!"
echo
echo "📊 서비스 상태 확인:"
sudo systemctl status open5gs-nrfd open5gs-amfd open5gs-smfd open5gs-upfd --no-pager

 

 

# 서비스 중지

#!/bin/bash
# open5gs-stop-all.sh - Open5GS 모든 서비스 중지 스크립트

echo "🛑 Open5GS 모든 서비스 중지 중..."

# 제어 평면 먼저 중지
echo "🎮 제어 평면 중지..."
sudo systemctl stop open5gs-amfd
sudo systemctl stop open5gs-ausfd
sudo systemctl stop open5gs-pcfd
sudo systemctl stop open5gs-bsfd
sudo systemctl stop open5gs-nssfd
sleep 2

# 데이터 관리 중지
echo "💾 데이터 관리 중지..."
sudo systemctl stop open5gs-udmd
sudo systemctl stop open5gs-udrd
sleep 2

# 사용자 평면 중지
echo "📡 사용자 평면 중지..."
sudo systemctl stop open5gs-smfd
sudo systemctl stop open5gs-upfd
sleep 2

# NRF 마지막으로 중지
echo "📍 NRF 중지..."
sudo systemctl stop open5gs-nrfd
sleep 2

# 남은 프로세스 정리
echo "🧹 남은 프로세스 정리..."
sudo pkill -f open5gs

echo "✅ 모든 서비스 중지 완료!"
echo
echo "📊 남은 프로세스 확인:"
ps aux | grep open5gs | grep -v grep

 

- 서비스 상태 확인

ubuntu@ip-192-168-47-83:/etc/open5gs$ ps aux |grep open5gs
open5gs    71773  0.0  0.0 131104 16256 ?        Ssl  09:54   0:00 /usr/bin/open5gs-nrfd -c /etc/open5gs/nrf.yaml
open5gs    71781  0.0  0.2 298992 33280 ?        Ssl  09:54   0:00 /usr/bin/open5gs-upfd -c /etc/open5gs/upf.yaml
open5gs    71792  0.0  0.2 466988 46080 ?        Ssl  09:54   0:00 /usr/bin/open5gs-smfd -c /etc/open5gs/smf.yaml
open5gs    71800  0.0  0.1 1728356 19200 ?       Ssl  09:54   0:00 /usr/bin/open5gs-amfd -c /etc/open5gs/amf.yaml
open5gs    71809  0.0  0.0 139220 13824 ?        Ssl  09:54   0:00 /usr/bin/open5gs-udmd -c /etc/open5gs/udm.yaml
open5gs    71810  0.0  0.0 138088 13696 ?        Ssl  09:54   0:00 /usr/bin/open5gs-bsfd -c /etc/open5gs/bsf.yaml
open5gs    71811  0.0  0.1 188776 20352 ?        Ssl  09:54   0:00 /usr/bin/open5gs-pcfd -c /etc/open5gs/pcf.yaml
open5gs    71812  0.0  0.1 168980 19968 ?        Ssl  09:54   0:00 /usr/bin/open5gs-udrd -c /etc/open5gs/udr.yaml
open5gs    71814  0.0  0.0 130716 13568 ?        Ssl  09:54   0:00 /usr/bin/open5gs-nssfd -c /etc/open5gs/nssf.yaml
open5gs    72722  0.0  0.0 132480 14976 ?        Ssl  10:28   0:00 /usr/bin/open5gs-ausfd -c /etc/open5gs/ausf.yaml
ubuntu     73198  0.0  0.0   7008  2304 pts/0    S+   11:17   0:00 grep --color=auto open5gs

 

 

5. UERANSIM 설치

- MongoDB 설치

# 22.04는 20.04와 달리 libssl1.1 기본내장이 아니다. mongo 4버전 dependency 문제 생긴다.
# 22.04일 경우 libssl1.1도 설치한다.

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
dpkg -i libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb

# apt install mongodb-org시 설치되는 패키지: mongodb-org-server + mongodb-org-mongos + mongodb-org-shell
# 샤딩 기능을 뺴면 systemctl 처리가 빨라진다.
# mongodb-org-server : mongod.service
# mongodb-org-mongos : 샤딩용 패키지
# mongodb-org-shell : mongo 명령어 사용가능

wget https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-amd64/mongodb-org-server_4.4.29_amd64.deb
wget https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-amd64/mongodb-org-shell_4.4.29_amd64.deb
dpkg -i mongodb-org-server_4.4.29_amd64.deb
dpkg -i mongodb-org-shell_4.4.29_amd64.deb

 

- 쉘스크립트

touch install_ueransim.sh
chmod 777 install_ueransim.sh
vi install_ueransim.sh

 

- bash (의존성 도구 및 UERANSIM 설치)

#!/bin/bash
sudo apt update -y
sudo apt upgrade -y
sudo apt install git -y

cd ~
git clone https://github.com/aligungr/UERANSIM

sudo apt install make -y
sudo apt install gcc -y
sudo apt install g++ -y

sudo apt install libsctp-dev lksctp-tools -y

sudo apt install iproute2 -y
sudo snap install cmake --classic

cd ~/UERANSIM
make -j2

 

- 설치실행

./install_ueransim.sh

 

- UERANSIM 설정

sudo vi ~/UERANSIM/config/open5gs-gnb.yaml

ue 인스턴스의 Private IP : 192.168.46.73
open5gs 인스턴스의 Private IP : 192.168.47.83

...
linkIp: 127.0.0.1   # gNB's local IP address for Radio Link Simulation (Usually same with local IP)
ngapIp: 192.168.46.73   # gNB's local IP address for N2 Interface (Usually same with local IP)
gtpIp: 192.168.46.73    # gNB's local IP address for N3 Interface (Usually same with local IP)

# List of AMF address information
amfConfigs:
  - address: 192.168.47.83
    port: 38412

 

 

- 웹 접속 : 계정(admin), 암호(1423)

 http://ran.innerinfo.cloud:9999

 

Open5gs - Login

 

ran.innerinfo.cloud:9999

 

 

 

- UE 등록

 

☞ 단말 등록 : Register User Equipment (UE) with detail bellow

 

 

- UE 등록 상태

 

$ cat /home/ubuntu/UERANSIM/config/open5gs-ue.yaml | head

# IMSI number of the UE. IMSI = [MCC|MNC|MSISDN] (In total 15 digits)
supi: 'imsi-999700000000001'

 

 

- UERANSIM 실행

# gNB를 실행
cd ~/UERANSIM/build
./nr-gnb -c ../config/open5gs-gnb.yaml

# UE를 실행
sudo ./nr-ue -c ../config/open5gs-ue.yaml

 

 

5g UE 설정
5g GNB 설정

 

패킷 분석  : 외부 통신

: uesimtun0 를 통한 외부 접속을 하며 정상적으로 ICMP(ping), HTTP(curl) 접속 확인됨

 

: UE 에서 받은 트래픽을 감싸서 GTP 터널을 통해 UPF 쪽으로 전달하며, GTP 터널 트래픽이 확인됨

 

아래는 UE 에서 인입된 요청 패킷을, GTP(GPRS Tunneling Protocol) 패킷으로 감싼 정보, PDF Type 에 UL PDU Session container 확인

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함