5Gのモバイルコアをお家に建てる　Open5GS  on Ubuntu 20.04

何度もOSをいれなおしましたが、今度こそミニPC上に　Open5GSによるEPC構築を目指します。

# 参考文献
Open 5GSのドキュメント
https://open5gs.org/open5gs/docs/

# 完成形イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/2f322321-2c90-589c-ce51-a6ee41257a34.png)

# 紆余曲折
　

# User’s Guide

## Quickstart
5GCoreを建てようと思うと、ピンクの部分がごちゃっとしてて難しそうなので、
まずは緑の部分EPCを建てようと思いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/28e32df1-77f6-3db8-32c4-135ae6342537.png)

### 1. Introduction 4G/ 5G NSA Core
SGWとPGWが、C(制御側)とU(データの転送)で分かれている（いわゆるC/U分離　CUPS）なのが若干気になりますが、
ほぼ私の知っているEPCなので、なんとかなりそう。
>The Open5GS 4G/ 5G NSA Core contains the following components:
MME - Mobility Management Entity
HSS - Home Subscriber Server
PCRF - Policy and Charging Rules Function
SGWC - Serving Gateway Control Plane
SGWU - Serving Gateway User Plane
PGWC/SMF - Packet Gateway Control Plane / (component contained in Open5GS SMF)
PGWU/UPF - Packet Gateway User Plane / (component contained in Open5GS UPF)

MME - HSS　で認証したり、端末が移動したときのハンドオーバー制御して、
HSS - PCRF　で認証されたユーザーの情報を渡して、
PCRFがSGW/PGWに流れるデータの転送を制御する
ようなイメージ。

### 2.Install Open5GS with a Package Manager
Ubuntuのパッケージがあるので、簡単にインストールできる。

ミニPCへのUbuntuインストールは下記記事参照
https://qiita.com/kanegae/items/610294ce18e9ae802582

メインPCからミニPCにSSHアクセスして、UbuntuにOpen5GSをインストール
~~~
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:open5gs/latest
$ sudo apt update
$ sudo apt install open5gs
~~~~

・apt update
https://packages.ubuntu.com/focal/
色々まとめて最新化してくれるらしい。
コンパイラ、ライブラリ、エディタ等

・apt install software-properties-common
https://packages.ubuntu.com/ja/bionic-updates/software-properties-common
open sslとかPythonがインストールされるらしい

・add-apt-repository ppa:open5gs/latest
　open 5gsのPPA(Personal Package Archive opne5gs)のリポジトリを追加。
　→open 5gsの各種パッケージがダウンロードできるようになる。

# 3. Install the WebUI of Open5GS
WebUIで加入者データ（電話番号、SIMのキーとか設定できるっぽい）
Node.jsが必要。
・Node.js：非同期型のイベント駆動の JavaScript 環境？（Javaがサーバ上で動く？）

~~~
 $ sudo apt update
 $ sudo apt install curl
 $ curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
 $ sudo apt install nodejs
~~~
Node.js 14.がインストールされたっぽい
・curl  command line tool for transferring data with URL syntax
　https://packages.ubuntu.com/ja/focal/curl
　//HTTPのgetとかputがコマンドラインで送れるっぽい。
  //curl -fsSL がよくわからず。

WebUIがインストールできた様子。
~~~
Download the Open5GS Source Code (v2.4.7)
/home/kaneb1a/open5gs-2.4.7/webui/.babelrc"
pen5gs@2.4.7 build /home/kaneb1a/open5gs-2.4.7/webui
Default Administrator Account [Username:xxxx, Password:xxxx]
~~~

# 4. Configure Open5GS
・HSSに加入者データ（電話番号など）
・PGWにIPルーチングテーブル
・Quick startでは1台のPCですべてのコンポーネントがある前提。loopback addressを使う。

//とりあえず、EPC(4G)コアだけ絵にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/2c3514e0-a1aa-41e9-9d20-9d9165ed9d02.png)

# 4.1. Setup a 4G/ 5G NSA Core
MMEのmcc/mncを変更。
PLMN: Public Land Mobile Network : 携帯事業者の識別番号　001/01
　→せっかくなので、日本の番号にしてみる　国コード：440　事業者コード：19
　　※日本のPLMN割り当てについては 4.1.1. で詳細後述
TAC(TrackingAreaCode)　エリアの識別：各事業者で割り当てるものっぽい
　→デフォルトの1にする。

エディタは nanoを使っておく。

~~~
/etc/open5gs$ sudo nano mme.yaml

mme:
    freeDiameter: /etc/freeDiameter/mme.conf
    s1ap:
      - addr: 127.0.0.2
    gtpc:
      - addr: 127.0.0.2
    gummei:
      plmn_id:
        mcc: 440
        mnc: 19
      mme_gid: 2
      mme_code: 1
    tai:
      plmn_id:
        mcc: 440
        mnc: 19
      tac: 1
    security:
        integrity_order : [ EIA2, EIA1, EIA0 ]
        ciphering_order : [ EEA0, EEA1, EEA2 ]
    network_name:
        full: Open5GS
    mme_name: open5gs-mme0
~~~

mmeとsgwのデーモン再起動
~~~
kaneb1a@beelinkk01a:/etc/open5gs$ sudo systemctl restart open5gs-mmed
kaneb1a@beelinkk01a:/etc/open5gs$ sudo systemctl restart open5gs-sgwud
~~~



## 4.1.1. PLMN補足
参考文献：IoT時代の電気通信番号を巡る現状等について　総務省
　https://www.soumu.go.jp/main_content/000592370.pdf
PLMN-ID = MCC(Mobile Countory Code) + MNC (Mobile Network cord)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/c4a785f3-7ae2-c3c2-e4e0-250e055cda20.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/ea19519e-8e84-ebb4-807e-053a98ae1027.png)

## 4.1.2. TAC補足
参考文献
・IMSIの利用に関する課題について
https://www.soumu.go.jp/main_content/000458410.pdf
・3GPP TS23.003
www.arib.or.jp/english/html/overview/doc/STD-T63v11_00/5_Appendix/Rel12/23/23003-c60.p

TAC(TrackingAreaCode)　エリアの識別：各事業者で割り当てるものっぽい
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/eabf1d3d-8e86-2bef-0e1c-3498dd0915f5.png)

# 4.2. Setup a 5G Core
AMFのmcc/mncを変更。
→せっかくなので、日本の番号にしてみる　国コード：440　事業者コード：19

~~~
amf:
    sbi:
      - addr: 127.0.0.5
        port: 7777
    ngap:
      - addr: 127.0.0.5
    guami:
      - plmn_id:
          mcc: 440
          mnc: 19
        amf_id:
          region: 2
          set: 1
    tai:
      - plmn_id:
          mcc: 440
          mnc: 19
        tac: 1
    plmn_support:
      - plmn_id:
          mcc: 440
          mnc: 19
        s_nssai:
          - sst: 1
    security:
        integrity_order : [ NIA2, NIA1, NIA0 ]
        ciphering_order : [ NEA0, NEA1, NEA2 ]
    network_name:
        full: Open5GS
    amf_name: open5gs-amf0
~~~

AMFデーモンを再起動
~~~
$ sudo systemctl restart open5gs-amfd
~~~

# 4.3. Register Subscriber Information
http://localhost:3000
// Xwindowsを入れてミニPCでlocal hostを叩けWebUIにアクセスできるのですが
// グラフィックのドライバのインストールに失敗し解像度が800 x 600で固定されて見にくい
// メインPCから:3000に接続できない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/02012c95-bb20-c368-74fa-670caa2c46f9.png)

が、local hostのWeb UIを使います。IMSI,K,OPcを設定
・International Mobile Subscriber Identity(IMSI)
　440191234567801
　MCC：440
　MNC：19
  MSIN（Mobile Subscription Identification Number）ユーザID？10桁：1234567801
　補足：MCC：日本　MNC：適当　MNC：適当、
・Subscriber Key(K)：
　
・Operator Key(OPc)

・Authentication Managemnt Field(AMF): 8000 (デフォルト)

IMSとSubscriber Keyと OPcについては下記参照
https://qiita.com/m0ch1m0ch1/items/4c04d4ebb954ca29de97

## 4.3.1. IMSI, K, OPc 
3GPP TS 23.003 Rel 17 3G Security; Security architecture

3.2. Symbols
K	Long-term secret key shared between the USIM and the AuC

6.3	Authentication and key agreement
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/c5c23e9f-87e5-7faa-689b-bc91f9c7db6f.png)
Figure 5: Authentication and key agreement