NextEPCを使ってEPCを構築する(UE情報の登録と起動編)

前回でNextEPCの設定が完了しました。
今回は、UE情報の登録を行った後、NextEPCを起動します。

再々掲ですが、参考にしたURLは以下のとおりです。

構築環境

前々回同様、構築環境は、以下の図のとおりです。

EPCの構築対象マシンは、USBのEtherデバイスを2つ増設したThinkPad T430で、OSはUbuntu 16.04 LTSです。
eNodeBやUEについては、既存システムのノードをそのまま使用するため、手は入れません。

UE情報の登録

UE情報の登録は、Web UIを介して行います。
nextepcのビルドディレクトリ配下で以下のコマンドを実行し、WebUIを起動します。

$ cd webapi
$ npm run dev

Webブラウザを起動し、URL欄に以下の内容を指定します。

  • http://localhost:3000/
  • 他のマシンから行う場合は、以下の内容を指定します。

  • http://<構築対象マシンのIPアドレス>:3000/

以下のような画面が表示されますので、Usernameにadmin、Passwordに1423を指定してください。

ログインすると、以下のような画面が表示されます。

左のパネルのSubscriberを選択し、画面右下の”+”を押下すると、以下のような加入者情報の登録画面が表示されます。

UEが使用するSIMの情報に合わせて、IMSI、Subscriber Key、Authentication Management Field、Operator Keyを入力してください。

使用するSIMによっては、Subscriber KeyやOperator Keyが設定されていない場合があります。しかし、Web UI上ではこれらの値を入力しなければ登録することができません。
その場合、一旦何らかの値(例えば、半角空白)などで登録し、後述する登録情報の更新方法を参照し、変更してください。
その後、画面の下部に表示されている”Save”を押下すると、入力した情報がデータベースに登録されます。

登録情報の更新方法

Subscriber KeyやOperator Keyを値なし(null)に設定する場合、Web UI上では値なしで登録できないため、登録情報が保持されているデータベースを直接変更する必要があります。
以下の操作は、予期せぬ動作を引き起こす可能性がありますので、注意して行ってください。

構築対象マシン上で、以下のコマンドを実行します。

$ mongo
> show dbs;
admin    (empty)
local    0.078GB
nextepc  0.078GB
> use nextepc
switched to db nextepc

登録情報の参照

上記操作を行ったコンソール上で以下のコマンドを実行すると、登録されている情報が表示されます。

> db.subscribers.find()
{ "_id" : ObjectId("5c9b2e623d13791d68fb3cf3"), "imsi" : "001010123456000", "pdn" : [ { "apn" : "Internet", "_id" : ObjectId("5c9b2e623d13791d68fb3cf4"), "pcc_rule" : [ ], "qos" : { "qci" : 9, "arp" : { "priority_level" : 8, "pre_emption_vulnerability" : 1, "pre_emption_capability" : 1 } }, "type" : 2 } ], "ambr" : { "downlink" : NumberLong(1024000), "uplink" : NumberLong(1024000) }, "subscribed_rau_tau_timer" : 12, "network_access_mode" : 2, "subscriber_status" : 0, "access_restriction_data" : 32, "security" : { "k" : " ", "amf" : "8000", "op" : null, "opc" : " " }, "__v" : 0 }

登録情報の更新

登録されている情報のSubscriber KeyやOperator Keyをなし(null)に設定する場合、以下のようなコマンドを実行します。
imsiに指定する値は、更新対象の情報によって異なりますので、注意してください。

> db.subscribers.update( { "imsi":"001010123456000"}, { $set: { "security" : { "k" : null, "amf" : "8000", "op" : null, "opc" : null } }})

imsiには対象のレコードを一意に特定するIMSIを指定してください。
実行後、更新実行時と同じIMSIの値を指定して、以下のコマンドを実行してください。

> db.subscribers.find( { "imsi":"001010123456000"})
{ "_id" : ObjectId("5c9b2e623d13791d68fb3cf3"), "imsi" : "001010123456000", "pdn" : [ { "apn" : "Internet", "_id" : ObjectId("5c9b2e623d13791d68fb3cf4"), "pcc_rule" : [ ], "qos" : { "qci" : 9, "arp" : { "priority_level" : 8, "pre_emption_vulnerability" : 1, "pre_emption_capability" : 1 } }, "type" : 2 } ], "ambr" : { "downlink" : NumberLong(1024000), "uplink" : NumberLong(1024000) }, "subscribed_rau_tau_timer" : 12, "network_access_mode" : 2, "subscriber_status" : 0, "access_restriction_data" : 32, "security" : { "k" : null, "amf" : "8000", "op" : null, "opc" : null }, "__v" : 0 }

更新後は再度情報を参照し、意図通りに更新されていることを確認してください。

NextEPCの起動

nextepcのビルドディレクトリ配下で以下のコマンドを実行し、NextEPCを起動します。起動すると、以下のようなメッセージがコンソール上に出力されます。

$ ./nextepc-epcd
NextEPC daemon v0.3.10 - Apr  5 2019 15:07:22

[04/05 16:09:19.832] WARN: pid file /home/bit/nextepc/install/var/run/nextepc-epcd/pid overwritten -- Unclean shutdown of previous NextEPC run? (application.c:113)
  PID[17128] : '/home/bit/nextepc/install/var/run/nextepc-epcd/pid'
  File Logging : '/home/bit/nextepc/install/var/log/nextepc/nextepc.log'
  MongoDB URI : 'mongodb://localhost/nextepc'
  Configuration : '/home/bit/nextepc/install/etc/nextepc/nextepc.conf'
[04/05 16:09:19.836] PCRF try to initialize
[04/05 16:09:19.960] PCRF initialize...done
[04/05 16:09:19.961] PGW try to initialize
[04/05 16:09:20.194] gtp_server() [127.0.0.3]:2123
[04/05 16:09:20.194] PGW initialize...done
[04/05 16:09:20.194] gtp_server() [127.0.0.3]:2152
[04/05 16:09:20.195] INFO: CONNECTED TO 'pgw.localdomain' (TCP,soc#7): (fd_logger.c:93)
[04/05 16:09:20.195] SGW try to initialize
[04/05 16:09:20.196] INFO: CONNECTED TO 'pcrf.localdomain' (TCP,soc#10): (fd_logger.c:93)
[04/05 16:09:20.202] SGW initialize...done
[04/05 16:09:20.202] gtp_server() [127.0.0.2]:2123
[04/05 16:09:20.202] gtp_server() [192.168.4.80]:2152
[04/05 16:09:20.203] HSS try to initialize
[04/05 16:09:20.228] HSS initialize...done
[04/05 16:09:20.228] MME try to initialize
[04/05 16:09:20.483] gtp_server() [192.168.1.130]:2123
[04/05 16:09:20.483] MME initialize...done


[04/05 16:09:20.483] gtp_server() [192.168.4.80]:2123
[04/05 16:09:20.483] INFO: NextEPC daemon start (main.c:157)
[04/05 16:09:20.483] gtp_server() [192.168.60.159]:2123
[04/05 16:09:20.483] gtp_client() [127.0.0.2]:2123
[04/05 16:09:20.483] INFO: CONNECTED TO 'mme.localdomain' (TCP,soc#7): (fd_logger.c:93)
[04/05 16:09:20.483] s1ap_server() [192.168.4.80]:36412
[04/05 16:09:20.483] INFO: CONNECTED TO 'hss.localdomain' (TCP,soc#10): (fd_logger.c:93)

この状態で、既存システムのeNodeBとUEを起動させ、接続が成功するとUEがインターネットへ接続できるようになります。
以下に構築対象マシン上でダンプしたパケットの内容を、いくつか例として示します。

S1SetupRequest

DIAMETER

GTPv2

これで、既存システムのEPCをNextEPCに置き換えることができました。OpenEPCの実装に合わせてNextEPCを改修をするといったこともことなく、スムーズに移行できたことを考えると、各ノード間のインタフェースを厳密に定義し、それに従って実装することの重要性を再認識させられました。

もし、自分でEPCを構築してみたいと思った時には、是非NextEPCを試してみてください。
以上。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*