본문

Open5GS + UERANSIM 으로 5G 네트워크 구축하기 #1. 구성 및 설치

요새 시간여유가 쪼금 있어서 지난번부터 해보려고했던 5G 가상 네트워크/테스트베드 구축을 해보기로 했다. 몇년전에 해보려고 알아봤을 때는 소스코드가 공개된것들이 완성도도 떨어지고 했는데, 요즘에는 어느정도 완성도있는 솔루션들이 몇몇 나와있는듯 하다. 관련 동향에 대해서는 ETRI의 전자통신동향분석 저널 올 4월자에 게재된 "공개 소프트웨어 기반 5G 프로젝트 개발 동향 분석"이라는 논문을 참고해도 좋을듯 하다.

 

5G Core Network로 Open5GS를 선택한 이유는 사용자층이 어느정도 확보되어있고 문서화가 그나마 잘되어있어서 처음 접근하기 유리하였기 때문이다. 그리고 지금은 5G RAN 부분을 UERANSIM Simulator를 사용해서 테스트해봤지만 곧있으면 SDR 장치로 실제 단말과 연동을 테스트해보려고 하는데, 그때도 Open5GS의 호환성이 좋을것으로 생각했기 때문이다. 물론 3GPP 스펙에 나와있는대로 구현만 되어있으면 interoperablilty는 보장되었다 할수있겠지만 혹시해서..

 

아무튼 Open5GSUERANSIM을 사용해서 5G 네트워크를 구축하는 방법에 대해서 아래에 적어보기로 한다. 우선 구축환경으로는 VirtualBox가 설치된 컴퓨터 위에 Node#1 (5G CN), Node#2 (5G RAN) 두개의 Ubuntu Desktop 20.04 LTS 인스턴스를 만들었다. 또한 이 둘은 VirtualBox상에서 "호스트 전용 어댑터" 로 연결되어 192.168.19.0/24 대역을 사용하도록 설정하여 각각 192.168.19.11, 192.168.19.12를 사용하며 서로 통신한다.

 

Open5GS는 패키지 설치 또는 소스코드 빌드로, UERANSIM은 소스코드 빌드로 구동 가능하다. Open5GS를 패키지로 설치하면 설정이 간편해져서 여기에는 패키지 설치 방법을 적도록 한다. 혼동을 방지하기 위해 각 설치페이지(Open5GS, UERANSIM)에 있는 내용을 거의 그대로 (apt install '-y' 만 추가) 가져왔다. 상세한 내용 및 디버깅관련해서는 다음 글에서 다룰 예정이다.

1. Node#1 (5G CN)

1-1. Open5GS 설치

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

sudo apt update
sudo apt install curl -y

curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install nodejs -y

curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash -
​​
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

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

1-2. Open5GS 설정

1. 단말 등록하기

http://localhost:3000 에 들어가서 (Username : admin / Password : 1423) 아래와 같이 IMSI: 901700000000001 단말을 등록해준다. UERANSIM 과 함께 하나의 UE만 테스트할 경우에는 다른 부분들은 따로 변경해줄 필요는 없다.

 

2. UPF 설정하기

/etc/open5gs/upf.yaml 파일을 수정해서 gtpu 주소를 아래와 같이 변경한 후

systemctl restart open5gs-upfd 명령을 수행하여 서비스를 재시작한다.

upf:
    gtpu:
      - addr: 192.168.19.11

 

3. AMF 설정하기
/etc/open5gs/amf.yaml 파일을 수정해서 ngap 주소를 아래와 같이 변경한 후

systemctl restart open5gs-amfd 명령을 수행하여 서비스를 재시작한다

amf:
    ngap:
      - addr: 192.168.19.11

2. Node#2 (5G RAN)

2-1. UERANSIM 설치

sudo apt update
sudo apt upgrade
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

2-2. UERANSIM 설정

1. gNodeB 설정하기

~/UERANSIM/config/open5gs-gnb.yaml 파일을 수정해서 gNodeB와 AMF간의 연결을 위한 IP를 설정해준다.

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

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

 

2-3. UERANSIM 실행

Deamon으로 동작하는 Open5GS는 따로 사용자가 프로그램을 실행시켜줄 필요는 없지만 UERANSIM에서는 터미널을 세개를 띄워서 하나는 gNodeB을 구동하고 또 하나는 UE를 동작, 그리고 마지막 하나는 ping을 구동하여 UE 트래픽 테스트를 할 수 있도록 한다. 

 

1. gNodeB 실행하기

cd ~/UERANSIM/build
./nr-gnb -c ../config/open5gs-gnb.yaml

 

2. UE 실행하기 (sudo로 실행)

cd ~/UERANSIM/build
sudo ./nr-ue -c ../config/open5gs-ue.yaml

 

3. Traffic 테스트하기

ping -I uesimtun0 google.com

 

3. 실행결과

1. Node#1 구동화면 (5G CN) - Google에서 Ping 응답받는중

2. Node#2 구동화면 (gNodeB+UE) - Google로 Ping 실행중

Glossary:

UE - User Equipment

AMF - Access and Mobility Management Function
SMF - Session Management Function
UPF - User Plane Function
AUSF - Authentication Server Function
NRF - NF Repository Function
UDM - Unified Data Management
UDR - Unified Data Repository
PCF - Policy and Charging Function
NSSF - Network Slice Selection Function
BSF - Binding Support Function

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.