本記事は、docker_open5gsを使用して、4GスマートフォンでVoLTE通話とSMSを試す際の設定について説明します。これにより、国内の場合、プライベートLTE(sXGP)による自営の携帯網で、sXGP対応スマートフォンを用いて、VoLTE通話やSMSを試せると思います。※機器によっては、動作しない可能性があります。また、sXGPはMCC=441,MNC=90
ですが、本記事では、sXGPに限定しない意図から、MCC=001,MNC=01
として説明します。
なお、EPCのコア網に登場する各NF(Network Function)の役割やインターフェースについて概ね知っていることを期待して書いており、これらの説明は省略します。
目次
- ネットワーク構成の概要
- docker_open5gsのopen5gs_hss_cxブランチを使用
- SMS over SGsは使用せず、SMS over IMSのみ使用
- 動作確認バージョンリスト
- 最後に
- 主な変更履歴
ネットワーク構成の概要
この記事のネットワーク構成例は以下になります。
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
...
これ以降は先程と同じ手順になります。なお、osmohlr
とosmomsc
のコンテナを起動する必要はありません。 勿論、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] 初版。