OAIを使い仮想マシン上で5Gシステムの実験環境を構築する方法
本記事の目的
OAIの「5g_f1_rfsimulator」環境
今回は、以下のOAIのソフトウェアを使って、試験環境を構築します。
https://gitlab.eurecom.fr/oai/openairinterface5g
このソフトウェアは、CIのために、様々な構成を使って試験ができる環境が用意されています。今回は、例としてCU/DUを分離した5Gシステムを構築できる以下の構成を使って、実験環境を構築します。
https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/develop/ci-scripts/yaml_files/5g_f1_rfsimulator
上記は以下の5g_rfsimulatorがベースになっています。この実験環境はUEからDUの無線区間はrfsimulatorというシミュレータを使って模擬することで、UEから外部ネットワークまでのEnd to Endの通信を模擬することができます。具体的な実行方法の説明は以下にありますので、これを参考にして、上記の環境を動かしていきます。
https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/develop/ci-scripts/yaml_files/5g_rfsimulator
今回、構築する試験環境は以下のdocker-compose.yamlにて定義されています。
https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/develop/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
この定義を図にすると以下になります。このようなネットワークの実験環境を構築してみたいと思います。
図1 構築する5Gネットワークのテスト環境
用意する環境と事前準備
- OS: Ubuntu 20.04
- CPU:16コア
- メモリ:8GB
- ストレージ:64GB (環境構築後は7GB程度を消費)
環境の構築方法
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.gitクローンしたソースコードの以下の場所に移動します。
cd ./openairinterface5g/ci-scripts/yaml_files/5g_f1_rfsimulatorこのディレクトリにあるdocker-compose.yamlに、構築する全てのソフトウェアの定義が記載されています。ただし、"docker-compose up -d"の一つのコマンドで環境を起動することはサポートされていません。以下のように、ステップを踏んで、順番にソフトウェアを起動します。
docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn docker-compose up -d oai-cu docker-compose up -d oai-du docker-compose up -d oai-nr-ue上記のコマンドを実行すると、必要なdokcerイメージがダウンロードされていない場合は、それらのイメージをダウンロードすることも自動で実施されます。上記のコマンドを実行すると、最終的には以下のようにdockerイメージがダウンロードされます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE oaisoftwarealliance/oai-nr-ue develop fd4575f44c6a 3 days ago 542MB oaisoftwarealliance/oai-gnb develop 21c5ab35fe31 3 days ago 720MB mysql 8.0 91b53e2624b4 12 days ago 565MB oaisoftwarealliance/trf-gen-cn5g focal 2f53b8349504 4 months ago 246MB oaisoftwarealliance/oai-smf v1.5.0 c4e57c5f5f24 5 months ago 137MB oaisoftwarealliance/oai-amf v1.5.0 02b4144bafb4 5 months ago 144MB oaisoftwarealliance/oai-nrf v1.5.0 ecd320f67e16 5 months ago 134MB oaisoftwarealliance/oai-spgwu-tiny v1.5.0 4a507079626f 5 months ago 118MBまた、起動するdockerコンテナは以下のようになります。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 763769781e9f oaisoftwarealliance/oai-nr-ue:develop "/opt/oai-nr-ue/bin/…" 6 minutes ago Up 6 minutes (healthy) rfsim5g-oai-nr-ue 449bb7092657 oaisoftwarealliance/oai-gnb:develop "/opt/oai-gnb/bin/en…" 11 minutes ago Up 11 minutes (healthy) rfsim5g-oai-du 250233887e9b oaisoftwarealliance/oai-gnb:develop "/opt/oai-gnb/bin/en…" 11 minutes ago Up 11 minutes (healthy) rfsim5g-oai-cu 4808d04411f1 oaisoftwarealliance/trf-gen-cn5g:focal "/bin/bash -c ' ipta…" 15 minutes ago Up 15 minutes (healthy) rfsim5g-oai-ext-dn 09c16e73bf27 oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 "python3 /openair-sp…" 15 minutes ago Up 15 minutes (healthy) 2152/udp, 8805/udp rfsim5g-oai-spgwu 633d32ccb235 oaisoftwarealliance/oai-smf:v1.5.0 "python3 /openair-sm…" 15 minutes ago Up 15 minutes (healthy) 80/tcp, 8080/tcp, 8805/udp rfsim5g-oai-smf 2cc85d196c19 oaisoftwarealliance/oai-amf:v1.5.0 "python3 /openair-am…" 15 minutes ago Up 15 minutes (healthy) 80/tcp, 9090/tcp, 38412/sctp rfsim5g-oai-amf f2d6cc28c264 mysql:8.0 "docker-entrypoint.s…" 15 minutes ago Up 15 minutes (healthy) 3306/tcp, 33060/tcp rfsim5g-mysql b03385fdb5fc oaisoftwarealliance/oai-nrf:v1.5.0 "python3 /openair-nr…" 15 minutes ago Up 15 minutes (healthy) 80/tcp, 9090/tcp rfsim5g-oai-nrfこの記事では割愛しますが、"docker logs -f "を実行すれば、各コンテナのコンソールログを見ることができます。UEのアタッチなど、各イベントにて、各コンテナが実行する処理を、このコンソールログから追うことができます。
UEから外部ネットワークへの通信確認
docker exec -ti rfsim5g-oai-nr-ue bashUEコンテナの中でip adコマンドを実行すると、oaitun_ue1というインタフェースができていることを確認できます。このインタフェースに、5Gコアから割り当てられたIPアドレス(この例では12.1.1.2)が設定されています。
# ip ad 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: oaitun_ue1: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet 12.1.1.2/24 brd 12.1.1.255 scope global oaitun_ue1 valid_lft forever preferred_lft forever 24: eth0@if25: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:c0:a8:47:96 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.71.150/26 brd 192.168.71.191 scope global eth0 valid_lft forever preferred_lft foreverこのoaitun_ue1を使って外部ネットワークにpingを実行すると、以下のように疎通することが確認できます。
# ping -I oaitun_ue1 10.XX.XX.XX PING 10.XX.XX.XX (10.XX.XX.XX) from 12.1.1.2 oaitun_ue1: 56(84) bytes of data. 64 bytes from 10.XX.XX.XX: icmp_seq=1 ttl=62 time=29.5 ms 64 bytes from 10.XX.XX.XX: icmp_seq=2 ttl=62 time=28.5 ms 64 bytes from 10.XX.XX.XX: icmp_seq=3 ttl=62 time=17.7 ms 64 bytes from 10.XX.XX.XX: icmp_seq=4 ttl=62 time=15.2 ms 64 bytes from 10.XX.XX.XX: icmp_seq=5 ttl=62 time=23.7 ms 64 bytes from 10.XX.XX.XX: icmp_seq=6 ttl=62 time=28.7 msこのとき、DUからCU、CUからUPFの通信は全てpublic_netの名前が付いたブリッジインタフェースに流れています。ですので、public_netインタフェースに流れるフレームをtcpdumpにてキャプチャすると、pingフレームが以下のようにカプセリングされていることが分かります。
図2 DUからCU方向のカプセル化されたpingフレーム 図3 CUからUPF方向のカプセル化されたpingフレーム
まとめ
OAIを使った、5GのEnd to Endの通信を確認できる環境の構築方法をご紹介しました。実際に試していただくと、OAIにて用意されたネットワーク構成を構築するだけなら、それほど手間をかけずに環境を作れることが分かると思います。また、ネットワークの構成を変えた実験環境を構築したい場合は、途中でご紹介したdocker-compose.yamlの定義を変更することで所望の実験環境を構築することができます。
この記事が何かの役に立てば幸いです。