LoginSignup
5
3

docker_open5gsによるVoLTEとSMSの設定

Last updated at Posted at 2023-01-18

本記事は、docker_open5gsを使用して、4GスマートフォンでVoLTE通話とSMSを試す際の設定について説明します。これにより、国内の場合、プライベートLTE(sXGP)による自営の携帯網で、sXGP対応スマートフォンを用いて、VoLTE通話やSMSを試せると思います。※機器によっては、動作しない可能性があります。また、sXGPはMCC=441,MNC=90ですが、本記事では、sXGPに限定しない意図から、MCC=001,MNC=01として説明します。
なお、EPCのコア網に登場する各NF(Network Function)の役割やインターフェースについて概ね知っていることを期待して書いており、これらの説明は省略します。


目次


ネットワーク構成の概要

この記事のネットワーク構成例は以下になります。

     eNodeB                Docker host - 172.22.0.0/24
   +---------+           +-------------+
   |         |           |             |
   |         |           |             |
   +---------+           +-------------+
        |                       |
-------------------------------------------------------
       .10                     .20      192.168.0.0/24

参考までに、DockerホストのVMの仕様は以下の通りです。

CPU Cores Memory SSD OS
2 4GB 40GB Ubuntu 22.04

eNodeBには、Dockerホストのネットワーク(172.22.0.0/24)に向かうパケット用に以下のルーティングを設定します。

# ip route add 172.22.0.0/24 via 192.168.0.20

eNodeBにルーティングを設定する機能が無い場合、Dockerホストがdefault GWになるようにネットワークを構成して下さい。

今回構成されるPDNは以下の通りです。

PDN TUNnel interface of PDN APN U-Plane #
192.168.100.0/24 ogstun internet U-Plane1
192.168.101.0/24 ogstun2 ims U-Plane1

docker_open5gsのopen5gs_hss_cxブランチを使用

VoLTEとSMS over IMS / SMS over SGsを試す場合は、open5gs_hss_cxブランチを使用すると便利です。この場合、KamailioのS-CSCFとI-CSCFはOpen5GS HSS(Cx)と通信します。
なお、SMS over SGsでは、実際には2G/3Gの無線は使用せず、コア網の機能(MSC + SMSC + HLR)のみ使用します。

# git clone https://github.com/herlesupreeth/docker_open5gs
# cd docker_open5gs
# git checkout open5gs_hss_cx

docker_open5gsの設定ファイルの変更点

.env)

Item Value
MCC 001
MNC 01
DOCKER_HOST_IP 192.168.0.20
SGWU_ADVERTISE_IP 192.168.0.20

4g-volte-deploy.yaml)

--- 4g-volte-deploy.yaml.orig   2023-08-07 10:58:37.018266553 +0000
+++ 4g-volte-deploy.yaml        2023-08-07 11:00:21.227760253 +0000
@@ -100,8 +100,8 @@
     expose:
       - "8805/udp"
       - "2152/udp"
-    # ports:
-    #   - "2152:2152/udp"
+    ports:
+      - "2152:2152/udp"
     networks:
       default:
         ipv4_address: ${SGWU_IP}
@@ -127,7 +127,6 @@
       - "5868/sctp"
       - "8805/udp"
       - "2123/udp"
-      - "7777/tcp"
       - "9091/tcp"
     networks:
       default:
@@ -187,8 +186,8 @@
       - "36412/sctp"
       - "2123/udp"
       - "9091/tcp"
-    # ports:
-    #   - "36412:36412/sctp"
+    ports:
+      - "36412:36412/sctp"
     networks:
       default:
         ipv4_address: ${MME_IP}

mme/mme.yaml)

eNodeBのTACに合わせて、以下のtacを変更します。

mme:
...
    sgsap:
      addr: OSMOMSC_IP
      map:
        tai:
          plmn_id:
            mcc: MCC
            mnc: MNC
-->       tac: 1
...
    tai:
      plmn_id:
        mcc: MCC
        mnc: MNC
-->   tac: 1
...

Open5GSとKamailioのDockerイメージをビルド

最初に以下をインストールします。

ビルド手順はdocker_open5gsを参照して下さい。

# cd docker_open5gs/base
# docker build --no-cache --force-rm -t docker_open5gs .
...
# cd ../ims_base
# docker build --no-cache --force-rm -t docker_kamailio .
...

docker-compose実行

例として、以下のNFグループ毎に端末を用意して、以下の順番でNFグループの起動を確認しながら実行します。なお、一つの端末でまとめて起動しても良いです。

terminal#1

# set -a
# source .env
# docker compose -f 4g-volte-deploy.yaml up mongo mysql dns webui

terminal#2

# set -a
# source .env
# docker compose -f 4g-volte-deploy.yaml up osmohlr osmomsc

terminal#3

# set -a
# source .env
# docker compose -f 4g-volte-deploy.yaml up hss mme pcrf sgwc sgwu smf upf

terminal#4

# set -a
# source .env
# docker compose -f 4g-volte-deploy.yaml up rtpengine

terminal#5

# set -a
# source .env
# docker compose -f 4g-volte-deploy.yaml up icscf scscf pcscf smsc

Open5GSに加入者情報を登録

SIMのIMSIに紐付けて、電話番号のMSISDNも忘れずに登録して下さい。この自営網でのみ通用する任意の番号で構いません。なお、APN情報は以下の通りに設定して下さい。

APN Type QCI ARP Capability Vulnerablility MBR DL/UL (Kbps) GBR DL/UL (Kbps)
internet IPv4 9 8 Disabled Disabled unlimited/unlimited
ims IPv4 5 1 Disabled Disabled 3850/1530
1 2 Enabled Enabled 128/128 128/128

詳細は以下を参照して下さい。

18. Install Open5GS in the same machine as Kamailio IMS - Install Open5GS from source
https://open5gs.org/open5gs/docs/tutorial/02-VoLTE-setup/

http://192.168.0.20:3000/

user: admin
password: 1423

OsmoHLRにIMSIとMSISDNを登録

osmohlrコンテナにログインして、以下を参考にして登録します。

6.1 Example: Add/Update/Delete Subscriber via VTY
https://downloads.osmocom.org/docs/latest/osmohlr-usermanual.pdf

以下に、加入者情報として、IMSI=001010000001001とMSISDN=1001をOsmoHLRに登録する例を示します。

最初に、osmohlrコンテナにログインします。

# docker exec -it osmohlr /bin/bash

次に、localhostにtelnetします。

# telnet localhost 4258
...
OsmoHLR> enable
OsmoHLR#

次に、IMSI=001010000001001とMSISDN=1001を登録します。

OsmoHLR# subscriber imsi 001010000001001 create
% Created subscriber 001010000001001
    ID: 1
    IMSI: 001010000001001
    MSISDN: none
OsmoHLR# subscriber imsi 001010000001001 update msisdn 1001
% Updated subscriber IMSI='001010000001001' to MSISDN='1001'
OsmoHLR#

実際に、IMSIとMSISDNが登録されていることを確認します。

OsmoHLR# show subscribers all
ID     MSISDN        IMSI              IMEI              NAM
-----  ------------  ----------------  ----------------  -----
1      1001          001010000001001    -------------    CSPS  
 Subscribers Shown: 1
OsmoHLR#

この設定は、SMS over SGsを使用する際に必要になります。

VoLTEとSMSを試す

登録したMSISDN番号に、VoLTE通話とSMSができることを、4Gスマートフォン標準の通話アプリとメッセージアプリで確認します。SMSについては、スマートフォンがSMS over IMSに対応していない場合、機種(or設定)によっては、SMS over SGsでSMSを送信できる場合があります。
なお、SMS over SGsを試す場合、smscコンテナを起動しないことで強制的にCS Fallbackさせる方法があります。

OsmoMSC VTY端末からSMSを送信(SMS over SGs)

OsmoMSC VTY端末上のコマンド操作で、SMSを送信することができます(SMS over SGs)。osmomscコンテナにログインして、以下の通り、コマンドラインからSMSを送信します。

14 Configuring the Core Network
11.3.3 The list command
https://downloads.osmocom.org/docs/latest/osmomsc-usermanual.pdf

例として、OsmoHLRに以下のIMSIとMSISDNが登録されている場合)

IMSI MSISDN SIM
001010000001000 1000 x
001010000001001 1001 o
001010000001002 1002 o

最初に、osmomscコンテナにログインします。

# docker exec -it osmomsc /bin/bash

次に、localhostにtelnetします。

# telnet localhost 4254
...
OsmoMSC> enable
OsmoMSC#
  • SIMに紐付いたMSISDN=1001から、同じくSIMに紐付いたMSISDN=1002にTEST MESSAGEを送信するコマンド操作
OsmoMSC# subscriber msisdn 1002 sms sender msisdn 1001 send TEST MESSAGE
  • SIMに紐付かないMSISDN=1000から、SIMに紐付いたMSISDN=1002にTEST MESSAGEを送信するコマンド操作
OsmoMSC# subscriber msisdn 1002 sms sender msisdn 1000 send TEST MESSAGE

SMS over SGsは使用せず、SMS over IMSのみ使用

SMS over SGを使用せずに、SMS over IMSのみを設定することもできます。 この場合、OsmoHLRとOsmoMSCは必要なく、構成は少し簡単になります。

docker_open5gsの設定ファイルの追加の変更点

以前の構成からの追加の変更は以下の通りです。

4g-volte-deploy.yaml)

MMEのOsmoMSCへの依存関係を削除します。

--- 4g-volte-deploy.yaml.orig   2023-09-01 23:07:44.380709992 +0900
+++ 4g-volte-deploy.yaml        2023-09-01 23:09:48.911421833 +0900
@@ -100,8 +100,8 @@
     expose:
       - "8805/udp"
       - "2152/udp"
-    # ports:
-    #   - "2152:2152/udp"
+    ports:
+      - "2152:2152/udp"
     networks:
       default:
         ipv4_address: ${SGWU_IP}
@@ -127,7 +127,6 @@
       - "5868/sctp"
       - "8805/udp"
       - "2123/udp"
-      - "7777/tcp"
       - "9091/tcp"
     networks:
       default:
@@ -166,7 +165,6 @@
       - sgwu
       - smf
       - upf
-      - osmomsc
     container_name: mme
     env_file:
       - .env
@@ -187,8 +185,8 @@
       - "36412/sctp"
       - "2123/udp"
       - "9091/tcp"
-    # ports:
-    #   - "36412:36412/sctp"
+    ports:
+      - "36412:36412/sctp"
     networks:
       default:
         ipv4_address: ${MME_IP}

mme/mme.yaml)

SGsAP項目を削除します。

--- mme.yaml.orig       2023-09-01 23:07:34.417698185 +0900
+++ mme.yaml    2023-09-01 23:10:34.248245114 +0900
@@ -9,19 +9,6 @@
       dev: MME_IF
     gtpc:
       dev: MME_IF
-    sgsap:
-      addr: OSMOMSC_IP
-      map:
-        tai:
-          plmn_id:
-            mcc: MCC
-            mnc: MNC
-          tac: 1
-        lai:
-          plmn_id:
-            mcc: MCC
-            mnc: MNC
-          lac: 1
     gummei: 
       plmn_id:
         mcc: MCC

eNodeBのTACに合わせて、以下のtacを変更します。

mme:
...
    tai:
      plmn_id:
        mcc: MCC
        mnc: MNC
-->   tac: 1
...

これ以降は先程と同じ手順になります。なお、osmohlrosmomscのコンテナを起動する必要はありません。 勿論、IMSIとMSISDNをOsmoHLRに登録する必要もありません。

動作確認バージョンリスト

open5gs_hss_cxブランチでVoLTEとSMSの動作を確認した際のシステムバージョンは以下の通りです。

docker_open5gs (commit:76206df07ea1571640b71fa25f28cb3ce4265aff) on 2023.08.22
Open5GS v2.6.4 (commit:7f088730ed4bedc12f562e53de44697d5e1f5c6e) on 2023.08.20

最後に

docker_open5gsを用いて、sXGPでVoLTE通話できるようにするために、docker_open5gsの開発者とやり取りし、pcap等のログを取得、調査し、対応して頂きました。結果的に対応した内容はsXGPに限ったものではなく、VoLTEに対応した一般的な4Gスマートフォンを対象に、IMSと連携する際の改善になります。これにより、以前のdocker_open5gsでは4Gスマートフォンの一部の機種でしかVoLTEを使用できませんでしたが、より多くのスマートフォンでVoLTEを試せるようになったと思います。

本記事のように、sXGPでプライベートLTEを構築する場合、データ通信以外にVoLTEやSMSを試したい方もおられると思います。sXGPが使用する周波数は以前、PHSで使用していたBand39(1.9GHz)ですが、市販されているスマートフォンにはsXGPに対応している機種もありますので、sXGP基地局とオープンソースのOpen5GSとKamailio他で自営網を比較的手軽に試すことができると思います。ただ、sXGP基地局とオープンソースのコア網、IMSとの連携は、実際に試してみないと分からないことが多々あると思います。

また、Band39対応と仕様に記載されたスマートフォンの中には、sXGPでデータ通信はできても、VoLTEやSMS(SMS over IMS)ができない機種があるようです。なお、sXGP対応と明示的に紹介されている製品なら使用できるのではと期待しています。

このように、4Gスマートフォンに別途ソフトフォンをインストールすること無く、標準の通話アプリとメッセージアプリを自営網で試すことができ、興味深いです。なお、sXGPの通信速度は、ULが最大4Mbps、DLが最大12Mbpsと大きくはありません。ですが、周波数が1.9GHzのため、WiFiよりも電波の回り込みが期待でき、また、共有バンドではないため、安定した通信が期待できます。SIMによる高い強度のセキュリティもあります。VoLTEとSMSに加えて、この程度の通信速度に収まるデータ通信をセキュアに安定して使用する用途には適しているように思います。コストも含めて、ローカル5Gとは違う視点で様々なユースケースが考えられそうです。

最後に、元記事はGithubに書いたものです。Open5GSのチュートリアルからもリンクして頂きました。

主な変更履歴

  • [2023.09.02] KamailioのSMSCは文字化けせずにマルチバイト文字を送受信できるようになりました。SMS over SGsを使用せずにSMS over IMSのみを使用する構成を追記しました。
  • [2023.01.18] 初版。
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3