RAN CN 테스트베드 구축/OAI+Free5GC (RAN-Core)

VMware 환경에서 OAI gNB ↔ free5GC 연동하기 (NG Setup)

gksyb4235 2026. 4. 28. 16:00

OAI에 Free5GC Core 연결하기


개요


OpenAirInterface(OAI) 5G RAN은 기본적으로 OAI-CN5G 코어와 연동되도록 설정되어 있다. 

기본 구성에서는 OAI-CN5G의 모든 컴포넌트가 같은 docker 네트워크(192.168.70.128/26) 위에서 동작하며, 
gNB가 192.168.70.132의 OAI AMF에 SCTP로 연결하는 구조다.

 

여기에서는 OAI-CN5G를 완전히 내리고, VMware (192.168.200.100, host-only network) 내에서 돌아가는 docker-compose로 실행 중인 free5GC v4.2.2를 코어 네트워크로 사용하는 것이다.

[VMware VM: OAI gNB 192.168.200.128]      [VMware VM: free5GC 192.168.200.100]
    |                                        |
    | 192.168.200.128 (host-only)            | 192.168.200.100 (host-only)
    |                                        |
  OAI gNB ──── SCTP (N2) ──────────────────> AMF (port 38412, forwarded)
          ──── GTP-U (N3) ──────────────────> UPF (port 2152/udp, forwarded)
                                             |
                                      docker bridge: 10.100.200.0/24
                                      (AMF: 10.100.200.21, UPF: 10.100.200.11)
                                      (NRF, SMF, UDM, AUSF, UDR, PCF 등)

 

주요 구성 요소

 

  • OAI gNB VM (192.168.200.128): OAI gNB와 UE가 실행되는 VM
    • UE는 network namespace ue1 내에서 실행
    • N2 인터페이스로 AMF와 NGAP 통신
    • N3 인터페이스로 UPF와 GTP-U 터널 통신
  • free5GC VM (192.168.200.100): docker-compose로 free5GC v4.2.2 실행
    • Docker 내부 네트워크: 10.100.200.0/24
    • AMF는 SCTP 포트 38412를 호스트로 포워딩
    • UPF는 GTP-U 포트 2152/udp를 호스트로 포워딩
  • 핵심 설정 포인트
  • AMF 설정: N2 인터페이스를 외부에서 접근 가능하도록 SCTP 포트 포워딩
  • UPF 설정:
    • N3 인터페이스를 0.0.0.0으로 바인딩하여 모든 인터페이스에서 수신
    • GTP-U 포트 2152/udp를 호스트로 포워딩
    • NAT 설정으로 UE 트래픽을 인터넷으로 라우팅
  • SMF 설정: UPF의 N3 endpoint를 **호스트 IP (192.168.200.100)**로 설정 (Docker 내부 IP가 아님)

 

 

**Note**

시도 구성 실패 원인 판단
1 OAI = WSL,
free5GC = VirtualBox VM
WSL 네트워크/커널 특성상 SCTP, gNB 쪽 커널 네트워크 요구사항 처리에 제약 비추천
2 OAI = VirtualBox VM,
free5GC = VirtualBox VM
VirtualBox 환경에서 OAI가 요구하는 CPU 가상화 기능, 특히 AVX 계열 지원 문제 발생 가능 OAI 구동 불안정
3 OAI = VMware VM,
free5GC = VirtualBox VM
VMware Host-only와 VirtualBox Host-only는 서로 다른 가상 스위치라 직접 통신 불가 네트워크 연결 복잡
4 OAI = VMware VM,
free5GC = VMware VM
같은 VMware VMnet을 공유 가능. NAT + Host-only 구성이 깔끔함 추천

 

 

OAI 쪽 수정해야 되는 파일 - 
/home/user/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf


1-1. PLMN 변경 (MCC/MNC)

# 변경 전
plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; ...

# 변경 후
plmn_list = ({ mcc = 208; mnc = 93; mnc_length = 2; ...

 

OAI-CN5G 기본 PLMN은 001/01이지만, free5GC 기본 PLMN은 208/93이다. 

gNB가 AMF에 NGAP Setup Request를 보낼 때 PLMN 정보가 포함되는데, 

AMF의 plmnSupportList와 일치하지 않으면 Setup Failure로 거부된다.

 

이때 gNB에 3개의 Network Slice가 정의한다.

snssaiList = ({ sst = 1; sd = 0x000001}, { sst = 2; sd = 0x000002; }, { sst = 3; sd = 0x000003; })

 

이 값을 기준으로 free5GC 쪽으로 맞춰야 한다.

 

 

1-2. AMF IP 주소 변경

 

# 변경 전
amf_ip_address = ({ ipv4 = "192.168.70.132"; });

# 변경 후
amf_ip_address = ({ ipv4 = "192.168.200.100"; });

 

OAI-CN5G AMF는 docker 네트워크 192.168.70.132에 있었지만, 

이제 free5GC AMF가 VM의 host-only IP 192.168.56.100에서 SCTP를 listen한다. 

gNB는 이 주소로 SCTP 연결을 시도한다.

 

 

1-3. gNB 네트워크 인터페이스 변경

# 변경 전
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
GNB_IPV4_ADDRESS_FOR_NGU    = "192.168.70.129/24";

# 변경 후
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.200.128/24";
GNB_IPV4_ADDRESS_FOR_NGU    = "192.168.200.128/24";

 

GNB_IPV4_ADDRESS_FOR_NG_AMF: gNB가 AMF와 SCTP(N2) 통신할 때 사용하는 자신의 IP이다. 

gNB가 위치한 VM의 IP인 192.168.200.128로 설정한다.

 

GNB_IPV4_ADDRESS_FOR_NGU: gNB가 UPF와 GTP-U(N3) 통신할 때 사용하는 자신의 IP이다. 

같은 인터페이스를 사용하므로 동일하게 설정한다.

 

 

 

 

Free5GC 쪽 수정해야 되는 파일


free5GC는 free5gc-compose 디렉토리에서 docker-compose로 실행된다. 외부 OAI gNB와 연동하기 위해서는 AMF, UPF, SMF 설정을 수정해야 한다.

 

 

1. docker-compose.yaml 수정


- UERANSIM 비활성화


기본 구성에 포함된 UERANSIM 컨테이너는 사용하지 않으므로 주석 처리한다.

# ueransim:
#   container_name: ueransim
#   image: free5gc/ueransim:latest
#   command: ./nr-gnb -c ./config/gnbcfg.yaml
#   volumes:
#     - ./config/gnbcfg.yaml:/ueransim/config/gnbcfg.yaml
#     - ./config/uecfg.yaml:/ueransim/config/uecfg.yaml
#   cap_add:
#     - NET_ADMIN
#   devices:
#     - "/dev/net/tun"
#   networks:
#     privnet:
#       aliases:
#         - gnb.free5gc.org
#   depends_on:
#     - free5gc-amf
#     - free5gc-upf

 

- AMF 포트 포워딩 설정


AMF는 N2 인터페이스(SCTP)를 통해 외부 gNB와 통신한다. 기본 설정에 이미 포트 포워딩이 되어 있지만, 확인이 필요하다.

free5gc-amf:
  container_name: amf
  image: free5gc/amf:v4.2.2
  command: ./amf -c ./config/amfcfg.yaml
  volumes:
    - ./config/amfcfg.yaml:/free5gc/config/amfcfg.yaml
    - ./cert:/free5gc/cert
  environment:
    GIN_MODE: release
  ports:
    - "38412:38412/sctp"  # ← N2 인터페이스 (NGAP over SCTP)
    - "8000:8000"
    - "9091:9091"
  networks:
    privnet:
      ipv4_address: 10.100.200.21
      aliases:
        - amf.free5gc.org
  depends_on:
    - free5gc-nrf

 

  • 설명:
    • 38412:38412/sctp: 호스트의 38412 포트를 컨테이너의 38412 포트로 포워딩
    • 외부 gNB는 192.168.200.100:38412로 연결하면 Docker 내부의 AMF(10.100.200.21:38412)에 도달

 

- UPF 포트 포워딩 설정

# docker-compose.yaml
services:
  free5gc-upf:
    container_name: upf
    image: free5gc/upf:v4.2.2
    command: bash -c "./upf-iptables.sh && ./upf -c ./config/upfcfg.yaml"
    volumes:
      - ./config/upfcfg.yaml:/free5gc/config/upfcfg.yaml
      - ./config/upf-iptables.sh:/free5gc/upf-iptables.sh
    cap_add:
      - NET_ADMIN
    ports:
      - "2152:2152/udp"  # ← N3 인터페이스 (GTP-U)
    networks:
      privnet:
        ipv4_address: 10.100.200.11  # 고정 IP 할당
        aliases:
          - upf.free5gc.org

 

  • 2152:2152/udp: 호스트의 2152 포트를 컨테이너의 2152 포트로 포워딩
  • 외부 gNB는 192.168.200.100:2152로 GTP-U 패킷을 전송하면 Docker 내부의 UPF(10.100.200.11:2152)에 도달
  • cap_add: NET_ADMIN: UPF가 네트워크 설정(라우팅, iptables 등)을 변경할 수 있도록 권한 부여

 

- Docker Network 설정

# docker-compose.yaml
networks:
  privnet:
    ipam:
      driver: default
      config:
        - subnet: 10.100.200.0/24
    driver_opts:
      com.docker.network.bridge.name: br-free5gc

 

  • Docker bridge 네트워크 privnet을 10.100.200.0/24 대역으로 생성
  • 브리지 이름을 br-free5gc로 지정하여 호스트에서 식별 가능

 

 

- NF 고정 IP 할당

 

Docker bridge 네트워크에서 IP를 고정하지 않으면 컨테이너를 재시작할 때마다 IP가 바뀔 수 있다. 

모든 주요 NF에 고정 IP를 할당하여 안정적인 통신을 보장한다.

 

# docker-compose.yaml
services:
  free5gc-nrf:
    networks:
      privnet:
        ipv4_address: 10.100.200.10  # 고정 IP
        aliases:
          - nrf.free5gc.org

  free5gc-amf:
    networks:
      privnet:
        ipv4_address: 10.100.200.21  # 고정 IP
        aliases:
          - amf.free5gc.org

  free5gc-upf:
    networks:
      privnet:
        ipv4_address: 10.100.200.11  # 고정 IP
        aliases:
          - upf.free5gc.org

  free5gc-smf:
    networks:
      privnet:
        ipv4_address: 10.100.200.15  # 고정 IP
        aliases:
          - smf.free5gc.org

  # 다른 NF들도 동일하게 고정 IP 할당
  free5gc-ausf:
    networks:
      privnet:
        ipv4_address: 10.100.200.12
        aliases:
          - ausf.free5gc.org

  free5gc-nssf:
    networks:
      privnet:
        ipv4_address: 10.100.200.13
        aliases:
          - nssf.free5gc.org

  free5gc-pcf:
    networks:
      privnet:
        ipv4_address: 10.100.200.14
        aliases:
          - pcf.free5gc.org

  free5gc-udm:
    networks:
      privnet:
        ipv4_address: 10.100.200.16
        aliases:
          - udm.free5gc.org

  free5gc-udr:
    networks:
      privnet:
        ipv4_address: 10.100.200.17
        aliases:
          - udr.free5gc.org

 

  • Docker bridge 네트워크 내에서 각 NF에 고정 IP를 할당
  • aliases로 Docker 내부 DNS 이름을 설정하여 *.free5gc.org로 서로 통신 가능
  • network_mode: host나 /etc/hosts 수정은 필요 없음
  • Docker의 내장 DNS가 자동으로 alias를 resolve하여 NF 간 통신 처리

 

 

2. config/amfcfg.yaml 수정


- ngapIpList 변경

# config/amfcfg.yaml
configuration:
  amfName: AMF
  ngapIpList:  # AMF가 SCTP를 listen할 IP 주소
    - 10.100.200.21  # Docker 내부 고정 IP
  ngapPort: 38412

 

  • ngapIpList는 AMF가 SCTP 소켓을 bind(listen)할 IP 주소이다
  • Docker bridge 네트워크에서 AMF의 고정 IP인 10.100.200.21을 사용한다
  • 외부 gNB는 192.168.200.100:38412로 연결하면, 포트 포워딩을 통해 Docker 내부의 AMF(10.100.200.21:38412)에 도달한다

 

 

2-2. SBI 설정 변경

# config/amfcfg.yaml
configuration:
  sbi:
    scheme: http
    registerIPv4: 10.100.200.21  # NRF에 등록할 IP
    bindingIPv4: 0.0.0.0         # 모든 인터페이스에서 listen
    port: 8000

 

  • registerIPv4: AMF가 NRF에 자신을 등록할 때 사용하는 IP
    • NRF는 Docker bridge 네트워크(10.100.200.0/24)에 있으므로 AMF의 Docker 고정 IP를 사용
  • bindingIPv4: SBI HTTP 서버를 bind할 IP
    • 0.0.0.0으로 설정하면 모든 인터페이스에서 listen하여 Docker 내부 NF들과 통신 가능

 

 

2-3. snssaiList 변경

# config/amfcfg.yaml
configuration:
  plmnSupportList:
    - plmnId:
        mcc: 208
        mnc: 93
      snssaiList:
        - sst: 1
          sd: 000001
        - sst: 2
          sd: 000002
        - sst: 3
          sd: 000003

 

gNB에서 정의한 3개 슬라이스와 정확히 일치시킨다. 

AMF는 gNB의 NGAP Setup Request에 포함된 슬라이스 정보를 자신의 plmnSupportList.snssaiList와 비교하여, 

하나도 매칭되지 않으면 Setup Failure를 응답한다.

 

 

Free5GC 쪽 수정해야 되는 파일 - config/smfcfg.yaml


3-1. snssaiInfos 변경

# config/smfcfg.yaml
configuration:
  snssaiInfos:
    - sNssai:
        sst: 1
        sd: 000001
      dnnInfos:
        - dnn: internet
          dns:
            ipv4: 8.8.8.8
            ipv6: 2001:4860:4860::8888
    - sNssai:
        sst: 2
        sd: 000002
      dnnInfos:
        - dnn: internet
          dns:
            ipv4: 8.8.8.8
            ipv6: 2001:4860:4860::8888
    - sNssai:
        sst: 3
        sd: 000003
      dnnInfos:
        - dnn: internet
          dns:
            ipv4: 8.8.8.8
            ipv6: 2001:4860:4860::8888

 

  • SMF가 지원하는 슬라이스 목록을 gNB/AMF와 동일하게 맞춘다.
  • UE가 PDU Session 수립을 요청할 때 AMF가 SMF를 선택하는데, 이때 SMF의 snssaiInfos에 해당 S-NSSAI가 없으면 PDU Session 수립이 실패한다.
  • DNS 설정도 각 슬라이스별로 지정 가능.

 

 

3-2. sNssaiUpfInfos 변경

sNssaiUpfInfos:
  - sNssai:
      sst: 1
      sd: 000003
    dnnUpfInfoList:
      - dnn: internet
        pools:
          - cidr: 10.60.0.0/16
        staticPools:
          - cidr: 10.60.100.0/24
  - sNssai:
      sst: 2
      sd: 000001
    dnnUpfInfoList:
      - dnn: internet
        pools:
          - cidr: 10.61.0.0/16
        staticPools:
          - cidr: 10.61.100.0/24
  - sNssai:
      sst: 3
      sd: 000002
    dnnUpfInfoList:
      - dnn: internet
        pools:
          - cidr: 10.62.0.0/16
        staticPools:
          - cidr: 10.62.100.0/24

 

각 슬라이스별로 UE에 할당할 IP 풀을 분리한다. Slice 1은 10.60.0.0/16, Slice 2는 10.61.0.0/16, Slice 3은 10.62.0.0/16 대역을 사용한다. 

SMF는 PDU Session 수립 시 해당 슬라이스의 IP 풀에서 UE에 IP를 할당하고, UPF에 PFCP Session Establishment Request를 보내 포워딩 룰을 설치한다.

3개째 슬라이스(10.62.0.0/16)는 free5GC 기본 설정에 없던 대역이므로, UPF의 dnnList에도 추가해야 한다 
(upfcfg.yaml에서 처리).

 

 

3-3. UPF N3 Endpoint 설정

외부 gNB가 UPF와 GTP-U 터널을 생성하려면, SMF가 gNB에게 호스트 IP를 알려줘야 한다.

# config/smfcfg.yaml
configuration:
  userplaneInformation:
    upNodes:
      UPF:
        type: UPF
        nodeID: upf.free5gc.org
        addr: upf.free5gc.org  # N4 (PFCP) 주소
        interfaces:
          - interfaceType: N3
            endpoints:
              - 192.168.200.100  # ← 호스트 IP (외부에서 접근 가능)
            networkInstances:
              - internet

 

  • endpoints를 upf.free5gc.org (Docker 내부 IP 10.100.200.11)로 설정하면 외부 gNB가 접근할 수 없다
  • 반드시 호스트 IP 192.168.200.100으로 설정해야 한다
  • SMF는 PDU 세션 생성 시 이 주소를 gNB에게 전달하고, gNB는 이 주소로 GTP-U 터널을 생성한다

 

 

Free5GC 쪽 수정해야 되는 파일 - config/upfcfg.yaml


4-1. dnnList에 세 번째 슬라이스 IP 풀 추가

# config/upfcfg.yaml
dnnList:
  - dnn: internet
    cidr: 10.60.0.0/16
    natifname: eth0  # NAT 인터페이스
  - dnn: internet
    cidr: 10.61.0.0/16
    natifname: eth0
  - dnn: internet
    cidr: 10.62.0.0/16
    natifname: eth0

 

  • natifname: eth0: UE 트래픽을 외부 인터넷으로 NAT하기 위한 인터페이스
  • UPF 컨테이너의 eth0는 Docker bridge에 연결되어 있으며, 호스트를 통해 인터넷에 접근

 

4-2. GTP-U 인터페이스 설정

# config/upfcfg.yaml
gtpu:
  forwarder: gtp5g
  ifList:
    - addr: 0.0.0.0  # 모든 인터페이스에서 listen
      type: N3

 

  • addr: 0.0.0.0: UPF가 모든 인터페이스에서 GTP-U 패킷을 수신하도록 설정
  • 포트 포워딩으로 들어오는 패킷을 받을 수 있도록 함

 

 

 

5. WebUI에 Subscriber 등록!


192.168.200.100:5000으로 접속 (ID: admin, PW: free5gc)

 

 

여기 Subscriber에 IMSI, OPc Key, ST, SSD 등을 정확하게 기입한다.

 

 

 

 

 

 

출력되는 Log 분석


먼저 Free5GC의 NF를 Build한다.

cd ~/free5gc-compose
docker compose up -d

 

 

 

다음으로 gNB를 빌드한다.

cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim

 

로그는 다음과 같다.

# gNB 실행 시작
./nr-softmodem ... --rfsim

# SA 모드 정상 기동
[UTIL] running in SA mode

# 설정 파일 로딩 / 셀 설정 완료
[RRC] Read in ServingCellConfigCommon ...
[NR_RRC] cell PLMN 208.93 Cell ID 12345678 is in service

# AMF 연결 성공
[GNB_APP] Parsed IPv4 address for NG AMF: 192.168.200.128
[NGAP] Send NGSetupRequest to AMF
[NGAP] Received NGSetupResponse from AMF

# F1(CU/DU) 연결 성공
[NR_RRC] Received F1 Setup Request ...
[NR_RRC] Accepting DU ... sending F1 Setup Response
[MAC] received F1 Setup Response from CU

# RFSIM 대기중 (UE 아직 안 붙음)
[HW] Running as server waiting opposite rfsimulators to connect
[HW] No connected device, generating void samples...

 

gNB + AMF + Cell 서비스는 정상.
UE(rfsim client)는 아직 미접속.

 

 

다음으로 ue1.conf 파일을 실행한다.

cd ~/openairinterface5g/tools/scripts
sudo ./multi-ue.sh -c1
sudo ./multi-ue.sh -o1

sudo ip netns exec ue1 /home/user/openairinterface5g/cmake_targets/ran_build/build/nr-uesoftmodem \
  -O /home/user/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/ue1.conf \
  -r 106 \
  --numerology 1 \
  --band 78 \
  -C 3619200000 \
  --rfsim \
  --uicc0.imsi 208930000000001 \
  --rfsimulator.serveraddr 10.201.1.100 \
  --telnetsrv \
  --telnetsrv.listenport 9095

 

UE 측의 로그는 다음과 같다.

# UE측 로그
nr-uesoftmodem ... --rfsim --uicc0.imsi 208930000000001 --rfsimulator.serveraddr 10.201.1.100

# rfsim gNB 연결 성공
[HW] Trying to connect to 10.201.1.100:4043
[HW] Connection to 10.201.1.100:4043 established

# 셀 탐색/동기화 성공
[PHY] Initial sync: pbch decoded sucessfully
[PHY] Initial sync successful, PCI: 0
[PHY] UE synchronized!

# SIB1 수신 성공
[NR_RRC] SIB1 decoded

# Random Access 성공
[MAC] Initialization of 4-Step CBRA procedure
[PHY] PRACH [UE 0] ...
[PHY] [UE 0] RAR-Msg2 decoded
[NR_MAC] Found RAR with the intended RAPID 28
[NR_MAC] RA-Msg3 transmitted
[MAC] 4-Step RA procedure succeeded. CBRA: Contention Resolution is successful.

# RRC 연결 성공
[NR_RRC] Received NR_RRCSetup
[NR_RRC] State = NR_RRC_CONNECTED
[NR_RRC] Generating RRCSetupComplete

# NAS Registration 시작
[NAS] Generate Initial NAS Message: Registration Request
[NAS] Received NR_NAS_CONN_ESTABLISH_IND

# 무선 품질
[NR_PHY] [UE 0] RSRP = -42 dBm

 

rfsim 연결 성공 → PBCH 디코딩 성공 → UE 동기화 성공 → SIB1 수신 성공 → PRACH/RAR/Msg3/Msg4 Random Access 성공 → RRC_CONNECTED 진입 → NAS Registration Request 생성

 

다음은 gNB 측의 로그이다.

# Random Access 시작
[NR_PHY] Initiating RA procedure with preamble 28
[NR_MAC] UE RA-RNTI 0113 TC-RNTI 8fd2: initiating RA procedure

# Msg2(RAR) 전송 / Msg3 수신
[NR_MAC] Send RAR to RA-RNTI 0113
[NR_MAC] PUSCH with TC_RNTI 0x8fd2 received correctly

# UE 컨텍스트 생성
[NR_RRC] Create UE context: UE ID 1 RNTI 8fd2

# Msg4 / RA 완료
[NR_RRC] Send RRC Setup
[NR_MAC] Received Ack of Msg4. CBRA procedure succeeded (UE Connected)

# RRC 연결 완료
[NR_RRC] Received RRCSetupComplete (RRC_CONNECTED reached)

# NAS Registration 절차
[NGAP] Selected PLMN MCC 208 MNC 93
[NGAP] Create UE context (ID 1) for AMF

# 보안 절차 완료
[NR_RRC] Selected security algorithms: ciphering 0, integrity 2
[NR_RRC] Generate SecurityModeCommand
[NR_RRC] Received Security Mode Complete

# UE Capability 완료
[NR_RRC] Generate NR UECapabilityEnquiry
[NR_RRC] Received UE capabilities

# Initial Context Setup 완료
[NR_RRC] Send message to sctp: NGAP_InitialContextSetupResponse

# PDU Session 생성 시작
[NGAP] PDUSESSIONSetup initiating message
[NR_RRC] received PDU Session Resource Setup Request

# GTP 터널 생성
[GTPU] Create tunnel ... outgoing 2 to remote IPv4 192.168.200.100

# DRB 생성 / RRC 재설정
[PDCP] added drb 1 to UE ID 1
[RLC] Added drb 1 to UE 36818
[NR_RRC] Generate RRCReconfiguration

# PDU Session 최종 성공
[NR_RRC] Received RRCReconfigurationComplete
[NR_RRC] PDU Session Setup Response: ID=10
[NGAP] Encoded PDU Session Transfer (10)

# 링크 품질
UE RNTI 8fd2 in-sync average RSRP -44
ulsch_errors 0
dlsch_errors 0

 

이 로그는 gNB 입장에서 UE 접속이 완전히 성공한 상태이다.

UE가 PRACH preamble 28로 접속 요청했고, Msg1 → Msg2(RAR) → Msg3 → Msg4 ACK 까지 완료되었다.

즉 UE가 셀에 정상 Attach 시작!

 

이후 RRC 연결 성공으로 UE는 idle 상태를 벗어나 gNB와 제어 연결 완료.

InitialContextSetupResponse로, UE ↔ AMF Registration 정상 완료된 후,

PDU Session ID = 10, Create tunnel, DRB 1 생성로 UE에 IP 데이터 세션 생성 완료 후 GTP-U 터널까지 연결된다.

이 과정에서 AMF측 로그는 다음과 같다.

# gNB NG 연결 수립
Create a new NG connection for: 192.168.200.128:33975
Handle NGSetupRequest
Send NG-Setup response

# UE 최초 접속 / Registration 시작
Handle InitialUEMessage
New RanUe [RanUeNgapID:1][AmfUeNgapID:1]
Handle Registration Request
RegistrationType: Initial Registration

# 가입자 식별
5GSMobileIdentity SUCI ...
New AmfUe ...
supi: imsi-208930000000001

# 인증 절차 성공
Authentication procedure
Send Authentication Request
Handle Authentication Response

# 보안 절차 성공
Send Security Mode Command
Handle Security Mode Complete

# 등록 완료
Handle InitialRegistration
Send Registration Accept
Send Initial Context Setup Request
Handle InitialContextSetupResponse
Handle Registration Complete

# UE 상태 Registered 진입
transition from [ContextSetup] to [Registered]

# PDU Session 생성 요청
Handle UL NAS Transport
Transport 5GSM Message to SMF
Select SMF ... dnn: internet
create smContext[pduSessionID: 10] Success

# gNB로 세션 설정 전달
Send PDU Session Resource Setup Request
Handle PDUSessionResourceSetupResponse

 

이 AMF 로그는 5GC 코어망 관점에서 UE 등록과 데이터 세션 생성이 완전히 성공했다는 뜻이다.

 

 

SMF 로그는 다음과 같다.

# SMF 기동
Start SBI server (listen on smf.free5gc.org:8000)
PFCP Listen on 10.100.200.15:8805

# SMF ↔ UPF PFCP 연결 성공
Sending PFCP Association Request to UPF 10.100.200.11
Received PFCP Association Setup Accepted Response
UPF(10.100.200.11) setup association

# UE PDU Session 요청 수신
Receive Create SM Context Request
HandlePDUSessionEstablishmentRequest
supi: imsi-208930000000001
pdu_session_id: 10

# UE IP 할당
Allocated UE IP address: 10.60.0.1
Selected UPF: UPF
Allocated PDUAdress[10.60.0.1]

# 정책/과금 관련 경고
BSF selection failed: no BSF instances found
chf selection error: no CHF found

# PCC Rule 설치
Install PCCRule[PccRuleId-1]
Install PCCRule[PccRuleId-2]

# UPF에 PFCP 세션 생성 성공
Sending PFCP Session Establishment Request
Received PFCP Session Establishment Accepted Response

# SM Context 생성 성공
POST /nsmf-pdusession/v1/sm-contexts | 201

# gNB 응답 이후 PFCP 세션 수정 성공
Receive Update SM Context Request
Received PFCP Session Modification Accepted Response from AN UPF
POST /modify | 200

# 이후 반복 로그
No report need to be charged

 

SMF 기동 후 → UPF와 PFCP Association 성공 → UE PDU Session 요청 수신 → UE IP 10.60.0.1 할당 → UPF 선택 → PFCP Session Establishment 성공 → SM Context 생성 성공 → PFCP Session Modification 성공의 순이다.

 

 

이후 UE 1에서 8.8.8.8로 Ping을 보내면..

# ue1 네임스페이스 존재 확인
sudo ip netns list

#ue ip주소 확인
sudo ip netns exec ue1 ip route

# ue1 단말의 모든 외부 트래픽은 5G 인터페이스(oaitun_ue1)로 보내라
sudo ip netns exec ue1 ip route add default dev oaitun_ue1

# UE 단말(namespace ue1) 안에서 Google DNS 서버(8.8.8.8)로 ping
sudo ip netns exec ue1 ping -c 4 8.8.8.8

 

 

위 명령은 UE1이 Google DNS 서버까지 도달 가능한지 테스트하는 것으로,

최종 경로는 UE1 → gNB → AMF/SMF/UPF → NAT → Internet → 8.8.8.8가 된다.

이를 통해 5G SA 전체망이 정상 동작함을 확인할 수 있다.

 

 

 

WebUI에서도 imsi-208930000000001 사용자가 제대로 Connected됨을 확인할 수 있다!