티스토리 뷰
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 소개
UERANSIM 은 5G 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


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

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

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

'Open5GS' 카테고리의 다른 글
| [수도권ICT 네트워크 4기] KAFKA 실습 (0) | 2025.10.29 |
|---|---|
| [수도권ICT 네트워크 4기] 스프링부트 실습 (0) | 2025.10.29 |