Open5GS EPCとOpenAirInterface UE/RANによるシミュレーション携帯網

Open5GS v2.0.22以降、EUROCOMのUE/RANシミュレータのOpenAirInterface v1.0.3と接続できるようになりました。そこで、U-PlaneのPDN(Packet Data Network)を試すために、CU分離された携帯網のシミュレーション環境を構築しました。登場する携帯網の構成要素は全てOSS(オープンソース)であり、紹介するシミュレーションの構成例はシンプルです。ここでは、その全体像と設定ファイルについて簡単に説明します。
なお、LTEのコア網に登場する各NF(Network Function)の役割やインターフェースについて概ね知っていることを期待して書いており、これらの説明は省略します。

---

## 目次

- [Open5GS CU分離EPCのシミュレーション携帯網の概要](#open5gs-cu分離epcのシミュレーション携帯網の概要)
- [Open5GS EPCとOAI UE/RANの設定ファイルの変更点](#open5gs-epcとoai-ueranの設定ファイルの変更点)
    - [Open5GS EPC C-Planeの設定ファイルの変更点](#open5gs-epc-c-planeの設定ファイルの変更点)
    - [Open5GS EPC U-Plane1の設定ファイルの変更点](#open5gs-epc-u-plane1の設定ファイルの変更点)
    - [Open5GS EPC U-Plane2の設定ファイルの変更点](#open5gs-epc-u-plane2の設定ファイルの変更点)
    - [OAI UE/RANの設定ファイルの変更](#oai-ueranの設定ファイルの変更点)
        - [UEの設定ファイルの変更点](#ueの設定ファイルの変更点)
        - [RANの設定ファイルの変更点](#ranの設定ファイルの変更点)
- [Open5GS EPCとOAI UE/RANのネットワーク設定](#open5gs-epcとoai-ueranのネットワーク設定)
    - [Open5GS EPC C-Planeのネットワーク設定](#open5gs-epc-c-planeのネットワーク設定)
    - [Open5GS EPC U-Plane1のネットワーク設定](#open5gs-epc-u-plane1のネットワーク設定)
    - [Open5GS EPC U-Plane2のネットワーク設定](#open5gs-epc-u-plane2のネットワーク設定)
    - [OAI UE/RANのネットワーク設定](#oai-ueranのネットワーク設定)
- [Open5GSとOAI UE/RANのビルド](#open5gsとoai-ueranのビルド)
- [Open5GS EPCとOAI UE/RANを実行](#open5gs-epcとoai-ueranを実行)
    - [Open5GS EPC C-Planeを実行](#open5gs-epc-c-planeを実行)
    - [Open5GS EPC U-Plane1とU-Plane2を実行](#open5gs-epc-u-plane1とu-plane2を実行)
    - [OAI RANを実行](#oai-ranを実行)
    - [OAI 5 UEsを実行](#oai-5-uesを実行)
- [google.comにpingする](#googlecomにpingする)
    - [PDN=10.45.0.0/16を経由する場合](#pdn10450016を経由する場合)
- [最後に](#最後に)
- [主な変更履歴](#主な変更履歴)

---

## Open5GS CU分離EPCのシミュレーション携帯網の概要

今回、APN毎に異なるPDNの端点で任意のパケットを流すことを目的に、EPCがC-PlaneとU-Planeに分離された携帯網をシミュレーション用に構築しました。PDNを通してインターネットと通信可能です。
このシミュレーション環境は以下の条件を満たす最小構成になります。

- C-Planeは複数のU-Planeと連携する。
- U-Planeは複数のPDNを管理する。
- 複数のUEは同じPDNに接続する。

構築したシミュレーション環境は以下の通りです。
<img width="800" alt="network-overview.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/e8333abf-1845-376c-cdcd-b841198c568a.png">

注意。UEの`oipX`インターフェースに割り当てられたPDNの端点のIPアドレスは、必ずしも上図の順番になるとは限りません。

EPCとUE/RANに使用しているOSSは以下の通りです。

- EPC - Open5GS v2.4.7 - https://github.com/open5gs/open5gs  
- UE/RAN - OpenAirInterface(OAI) v1.0.3 - https://gitlab.eurecom.fr/oai/openairinterface5g/-/tree/v1.0.3

各VMは以下の通りです。

| VM# | SW & Role | IP address | OS | Memory (Min) | HDD (Min) |
| --- | --- | --- | --- | --- | --- |
| VM1 | Open5GS EPC C-Plane | 192.168.0.111/24 <br> 192.168.0.112/24 | Ubuntu 20.04 | 1GB | 20GB |
| VM2 | Open5GS EPC U-Plane1  | 192.168.0.113/24 <br> 192.168.0.114/24 | Ubuntu 20.04 | 1GB | 20GB |
| VM3 | Open5GS EPC U-Plane2  | 192.168.0.115/24 <br> 192.168.0.116/24 | Ubuntu 20.04 | 1GB | 20GB |
| VM4 | OpenAirInterface UE/RAN | 192.168.0.120/24 | Ubuntu 18.04 | 2GB | 40GB |

VM4のOAI UE/RANのビルドはUbuntu 20.04に対応していないため、Ubuntu 18.04でビルドしました。

加入者情報は以下の通りです。(その他の項目はデフォルト値)

| UE# | IMSI | APN | OP/OPc |
| --- | --- | --- | --- |
| UE0 | 001010000000100 | internet | OPc |
| UE1 | 001010000000101 | internet2 | OPc |
| UE2 | 001010000000102 | internet2 | OPc |
| UE3 | 001010000000103 | ims | OPc |
| UE4 | 001010000000104 | ims | OPc |

これらの情報の登録には、Open5GSが提供するWebUIを使用しました。なお、3GPP認証とキー生成機能(MILENAGE)の試験データとして、[3GPP TS 35.208](https://www.3gpp.org/DynaReport/35208.htm) "4.3 Test Sets"が公開されています。

各PDNは以下の通りです。

| PDN | TUNnel interface of PDN | APN | TUNnel interface of UE | U-Plane# |
| --- | --- | --- | --- | --- |
| 10.45.0.0/16 | ogstun | internet | oip1 | U-Plane1 |
| 10.46.0.0/16 | ogstun2 | internet2 | oip2, oip3 | U-Plane1 |
| 10.47.0.0/16 | ogstun3 | ims | oip4, oip5 | U-Plane2 |

追加情報。Open5GS EPC U-PlaneはRaspberry Pi 4 Model Bで動作しました。OSには[Ubuntu 20.04 (64bit) for Raspberry Pi 4](https://ubuntu.com/download/raspberry-pi)を使用しています。これにより、コンパクトなU-Planeをエッジに配置し、PDNの端点として簡易に使用することができます。なお、この場合のPDNの通信性能については確認していません。

## Open5GS EPCとOAI UE/RANの設定ファイルの変更点

Open5GSとOAI UE/RANのビルド方法は以下を参照して下さい。

- Open5GS v2.4.7 - https://open5gs.org/open5gs/docs/guide/02-building-open5gs-from-sources/
- OAI UE / RAN v1.0.3 - https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/l2-nfapi-simulator/l2-nfapi-simulator-w-S1-same-machine

### Open5GS EPC C-Planeの設定ファイルの変更点

Open5GSでは、PFCPの接続先としてSGW-Uを選択するロジックに使用可能なパラメータは以下の通りです。PFCP(Packet Forwarding Control Protocol)とは、5GCでCU分離のために導入されたプロトコルで、3GPP Rel.14でEPCにも導入されました。

- APN
- TAC (Tracking Area Code)
- e_CellID

なお、TACとe_CellIDはRANの設定項目です。話を簡単にするために、今回はAPNのみ使用しています。Open5GSでSGW-Uを選択するロジックについては、[こちら](https://github.com/open5gs/open5gs/pull/560#issue-483001043)を参照して下さい。

- `open5gs/install/etc/open5gs/mme.yaml`

```diff
--- mme.yaml.orig       2022-04-05 20:54:45.961060045 +0900
+++ mme.yaml    2022-04-05 21:00:44.186198088 +0900
@@ -245,19 +245,19 @@
 mme:
     freeDiameter: /root/open5gs/install/etc/freeDiameter/mme.conf
     s1ap:
-      - addr: 127.0.0.2
+      - addr: 192.168.0.111
     gtpc:
       - addr: 127.0.0.2
     gummei: 
       plmn_id:
-        mcc: 901
-        mnc: 70
+        mcc: 001
+        mnc: 01
       mme_gid: 2
       mme_code: 1
     tai:
       plmn_id:
-        mcc: 901
-        mnc: 70
+        mcc: 001
+        mnc: 01
       tac: 1
     security:
         integrity_order : [ EIA2, EIA1, EIA0 ]
@@ -387,6 +387,7 @@
 #      use_openair: true
 #
 parameter:
+    use_openair: true
 
 #
 # max:
```

OAI UE/RAN v1.0.3に接続するために、以下の行を有効にして下さい。

```
parameter:
    use_openair: true
```

- `open5gs/install/etc/open5gs/sgwc.yaml`

```diff
--- sgwc.yaml.orig      2022-06-04 19:47:04.920150927 +0900
+++ sgwc.yaml   2022-06-04 20:12:49.514600761 +0900
@@ -69,7 +69,7 @@
     gtpc:
       - addr: 127.0.0.3
     pfcp:
-      - addr: 127.0.0.3
+      - addr: 192.168.0.111
 
 #
 # sgwu:
@@ -120,7 +120,10 @@
 #
 sgwu:
     pfcp:
-      - addr: 127.0.0.6
+      - addr: 192.168.0.113
+        apn: [internet, internet2]
+      - addr: 192.168.0.115
+        apn: ims
 
 #
 # parameter:
```

- `open5gs/install/etc/open5gs/smf.yaml`

```diff
--- smf.yaml.orig       2022-06-04 19:47:04.977151107 +0900
+++ smf.yaml    2022-06-04 23:09:08.094446920 +0900
@@ -377,21 +377,19 @@
 #
 
 smf:
-    sbi:
-      - addr: 127.0.0.4
-        port: 7777
     pfcp:
-      - addr: 127.0.0.4
-      - addr: ::1
+      - addr: 192.168.0.112
     gtpc:
       - addr: 127.0.0.4
-      - addr: ::1
     gtpu:
-      - addr: 127.0.0.4
-      - addr: ::1
+      - addr: 192.168.0.112
     subnet:
       - addr: 10.45.0.1/16
-      - addr: 2001:db8:cafe::1/48
+        dnn: internet
+      - addr: 10.46.0.1/16
+        dnn: internet2
+      - addr: 10.47.0.1/16
+        dnn: ims
     dns:
       - 8.8.8.8
       - 8.8.4.4
@@ -440,12 +438,6 @@
 #          l_onoff: true
 #          l_linger: 10
 #
-nrf:
-    sbi:
-      - addr:
-          - 127.0.0.10
-          - ::1
-        port: 7777
 
 #
 # upf:
@@ -501,7 +493,10 @@
 #
 upf:
     pfcp:
-      - addr: 127.0.0.7
+      - addr: 192.168.0.114
+        dnn: [internet, internet2]
+      - addr: 192.168.0.116
+        dnn: ims
 
 #
 # parameter:
```

### Open5GS EPC U-Plane1の設定ファイルの変更点

- `open5gs/install/etc/open5gs/sgwu.yaml`

```diff
--- sgwu.yaml.orig      2022-06-04 19:55:34.619319944 +0900
+++ sgwu.yaml   2022-06-04 20:26:52.317836255 +0900
@@ -98,9 +98,9 @@
 #
 sgwu:
     pfcp:
-      - addr: 127.0.0.6
+      - addr: 192.168.0.113
     gtpu:
-      - addr: 127.0.0.6
+      - addr: 192.168.0.113
 
 #
 # sgwc:
```

- `open5gs/install/etc/open5gs/upf.yaml`

```diff
--- upf.yaml.orig       2022-04-05 20:55:38.304953273 +0900
+++ upf.yaml    2022-06-04 20:28:17.477289334 +0900
@@ -166,12 +166,16 @@
 #
 upf:
     pfcp:
-      - addr: 127.0.0.7
+      - addr: 192.168.0.114
     gtpu:
-      - addr: 127.0.0.7
+      - addr: 192.168.0.114
     subnet:
       - addr: 10.45.0.1/16
-      - addr: 2001:db8:cafe::1/48
+        dnn: internet
+        dev: ogstun
+      - addr: 10.46.0.1/16
+        dnn: internet2
+        dev: ogstun2
 
 #
 # smf:
```

### Open5GS EPC U-Plane2の設定ファイルの変更点

- `open5gs/install/etc/open5gs/sgwu.yaml`

```diff
--- sgwu.yaml.orig      2022-06-04 20:03:06.617169084 +0900
+++ sgwu.yaml   2022-06-04 20:34:13.096027189 +0900
@@ -98,9 +98,9 @@
 #
 sgwu:
     pfcp:
-      - addr: 127.0.0.6
+      - addr: 192.168.0.115
     gtpu:
-      - addr: 127.0.0.6
+      - addr: 192.168.0.115
 
 #
 # sgwc:
```

- `open5gs/install/etc/open5gs/upf.yaml`

```diff
--- upf.yaml.orig       2022-04-05 20:56:57.984902990 +0900
+++ upf.yaml    2022-06-04 20:34:20.489022605 +0900
@@ -166,12 +166,13 @@
 #
 upf:
     pfcp:
-      - addr: 127.0.0.7
+      - addr: 192.168.0.116
     gtpu:
-      - addr: 127.0.0.7
+      - addr: 192.168.0.116
     subnet:
-      - addr: 10.45.0.1/16
-      - addr: 2001:db8:cafe::1/48
+      - addr: 10.47.0.1/16
+        dnn: ims
+        dev: ogstun3
 
 #
 # smf:
```

### OAI UE/RANの設定ファイルの変更点

#### UEの設定ファイルの変更点

- `ue_folder/ci-scripts/conf_files/ue.nfapi.conf`

```diff
--- ue.nfapi.conf.orig  2020-11-22 07:54:40.846830672 +0000
+++ ue.nfapi.conf       2020-09-23 08:01:54.000000000 +0000
@@ -21,8 +21,8 @@
        num_cc = 1;
        tr_n_preference = "nfapi";
        local_n_if_name  = "lo";
-       remote_n_address = "127.0.0.2";
-       local_n_address  = "127.0.0.1";
+       remote_n_address = "127.0.0.1";
+       local_n_address  = "127.0.0.2";
        local_n_portc    = 50000;
        remote_n_portc   = 50001;
        local_n_portd    = 50010;
```

- `ue_folder/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf`

```diff
--- ue_eurecom_test_sfr.conf.orig       2020-11-22 15:33:56.000000000 +0000
+++ ue_eurecom_test_sfr.conf    2020-11-24 02:38:41.104185570 +0000
@@ -86,14 +86,162 @@
     };
 
     SIM: {
-        MSIN="0100001111";
-        USIM_API_K="8baf473f2f8fd09487cccbd7097c6862";
-        OPC="e734f8734007d6c5ce7a0508809e7e9c";
+        MSIN="0000000100";
+        USIM_API_K="465B5CE8B199B49FAA5F0A2EE238A6BC";
+        OPC="E8ED289DEBA952E4283B54E88E6183CA";
         MSISDN="33611123456";
     };
 
     # Home PLMN Selector with Access Technology
-    HPLMN= "20893";
+    HPLMN= "00101";
+
+    # User controlled PLMN Selector with Access Technology
+    UCPLMN_LIST = ();
+
+    # Operator PLMN List
+    OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028");
+
+    # Operator controlled PLMN Selector with Access Technology
+    OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204");
+
+    # Forbidden plmns
+    FPLMN_LIST = ();
+
+    # List of Equivalent HPLMNs
+#TODO: UE does not connect if set, to be fixed in the UE
+#    EHPLMN_LIST= ("20811", "20813");
+    EHPLMN_LIST= ();
+};
+
+UE1:
+{
+    USER: {
+        IMEI="356113022094149";
+        MANUFACTURER="EURECOM";
+        MODEL="LTE Android PC";
+        PIN="0000";
+    };
+
+    SIM: {
+        MSIN="0000000101";
+        USIM_API_K="465B5CE8B199B49FAA5F0A2EE238A6BC";
+        OPC="E8ED289DEBA952E4283B54E88E6183CA";
+        MSISDN="33611123456";
+    };
+
+    # Home PLMN Selector with Access Technology
+    HPLMN= "00101";
+
+    # User controlled PLMN Selector with Access Technology
+    UCPLMN_LIST = ();
+
+    # Operator PLMN List
+    OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028");
+
+    # Operator controlled PLMN Selector with Access Technology
+    OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204");
+
+    # Forbidden plmns
+    FPLMN_LIST = ();
+
+    # List of Equivalent HPLMNs
+#TODO: UE does not connect if set, to be fixed in the UE
+#    EHPLMN_LIST= ("20811", "20813");
+    EHPLMN_LIST= ();
+};
+
+UE2:
+{
+    USER: {
+        IMEI="356113022094149";
+        MANUFACTURER="EURECOM";
+        MODEL="LTE Android PC";
+        PIN="0000";
+    };
+
+    SIM: {
+        MSIN="0000000102";
+        USIM_API_K="465B5CE8B199B49FAA5F0A2EE238A6BC";
+        OPC="E8ED289DEBA952E4283B54E88E6183CA";
+        MSISDN="33611123456";
+    };
+
+    # Home PLMN Selector with Access Technology
+    HPLMN= "00101";
+
+    # User controlled PLMN Selector with Access Technology
+    UCPLMN_LIST = ();
+
+    # Operator PLMN List
+    OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028");
+
+    # Operator controlled PLMN Selector with Access Technology
+    OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204");
+
+    # Forbidden plmns
+    FPLMN_LIST = ();
+
+    # List of Equivalent HPLMNs
+#TODO: UE does not connect if set, to be fixed in the UE
+#    EHPLMN_LIST= ("20811", "20813");
+    EHPLMN_LIST= ();
+};
+
+UE3:
+{
+    USER: {
+        IMEI="356113022094149";
+        MANUFACTURER="EURECOM";
+        MODEL="LTE Android PC";
+        PIN="0000";
+    };
+
+    SIM: {
+        MSIN="0000000103";
+        USIM_API_K="465B5CE8B199B49FAA5F0A2EE238A6BC";
+        OPC="E8ED289DEBA952E4283B54E88E6183CA";
+        MSISDN="33611123456";
+    };
+
+    # Home PLMN Selector with Access Technology
+    HPLMN= "00101";
+
+    # User controlled PLMN Selector with Access Technology
+    UCPLMN_LIST = ();
+
+    # Operator PLMN List
+    OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028");
+
+    # Operator controlled PLMN Selector with Access Technology
+    OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204");
+
+    # Forbidden plmns
+    FPLMN_LIST = ();
+
+    # List of Equivalent HPLMNs
+#TODO: UE does not connect if set, to be fixed in the UE
+#    EHPLMN_LIST= ("20811", "20813");
+    EHPLMN_LIST= ();
+};
+
+UE4:
+{
+    USER: {
+        IMEI="356113022094149";
+        MANUFACTURER="EURECOM";
+        MODEL="LTE Android PC";
+        PIN="0000";
+    };
+
+    SIM: {
+        MSIN="0000000104";
+        USIM_API_K="465B5CE8B199B49FAA5F0A2EE238A6BC";
+        OPC="E8ED289DEBA952E4283B54E88E6183CA";
+        MSISDN="33611123456";
+    };
+
+    # Home PLMN Selector with Access Technology
+    HPLMN= "00101";
 
     # User controlled PLMN Selector with Access Technology
     UCPLMN_LIST = ();
```

#### RANの設定ファイルの変更点

- `enb_folder/ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf`

```diff
--- rcc.band7.tm1.nfapi.conf.orig       2020-11-22 15:33:38.000000000 +0000
+++ rcc.band7.tm1.nfapi.conf    2020-11-24 01:00:23.936598997 +0000
@@ -15,7 +15,7 @@
     // Tracking area code, 0x0000 and 0xfffe are reserved values
     tracking_area_code = 1;
 
-    plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
+    plmn_list = ( { mcc = 001; mnc = 01; mnc_length = 2; } );
 
     tr_s_preference     = "local_mac"
 
@@ -172,7 +172,7 @@
 
 
     ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "CI_MME_IP_ADDR";
+    mme_ip_address      = ( { ipv4       = "192.168.0.111";
                               ipv6       = "192:168:30::17";
                               active     = "yes";
                               preference = "ipv4";
@@ -181,12 +181,12 @@
 
     NETWORK_INTERFACES :
     {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "ens3";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "CI_ENB_IP_ADDR";
-        ENB_INTERFACE_NAME_FOR_S1U               = "ens3";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "CI_ENB_IP_ADDR";
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "enp0s8";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.0.120/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "enp0s8";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.0.120/24";
         ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
-        ENB_IPV4_ADDRESS_FOR_X2C                 = "CI_ENB_IP_ADDR";
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "192.168.0.120/24";
         ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
         
     };
@@ -197,8 +197,8 @@
        {
        num_cc = 1;
        local_s_if_name  = "lo:";                         
-       remote_s_address = "127.0.0.1";
-       local_s_address  = "127.0.0.2"; 
+       remote_s_address = "127.0.0.2";
+       local_s_address  = "127.0.0.1"; 
        local_s_portc    = 50001;
        remote_s_portc   = 50000;
        local_s_portd    = 50011;
```

## Open5GS EPCとOAI UE/RANのネットワーク設定

### Open5GS EPC C-Planeのネットワーク設定

SMF(PGW-C)のIPアドレスを追加します。

```
ip addr add 192.168.0.112/24 dev enp0s8
```

注意。本記事のVirtualBoxの環境では、`enp0s8`は`192.168.0.0/24`のネットワークインターフェースです。環境に応じて変更して下さい。

### Open5GS EPC U-Plane1のネットワーク設定

最初に、`/etc/sysctl.conf`ファイルの以下の行のコメントを外し、OSに反映します。

```
net.ipv4.ip_forward=1
```
```
# sysctl -p
```

次に、UPF(PGW-U)のIPアドレスを追加し、TUNインターフェースとNAPTを設定します。

```sh
ip addr add 192.168.0.114/24 dev enp0s8

ip tuntap add name ogstun mode tun
ip addr add 10.45.0.1/16 dev ogstun
ip link set ogstun up

iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE

ip tuntap add name ogstun2 mode tun
ip addr add 10.46.0.1/16 dev ogstun2
ip link set ogstun2 up

iptables -t nat -A POSTROUTING -s 10.46.0.0/16 ! -o ogstun2 -j MASQUERADE
```

### Open5GS EPC U-Plane2のネットワーク設定

最初に、`/etc/sysctl.conf`ファイルの以下の行のコメントを外し、OSに反映します。

```
net.ipv4.ip_forward=1
```
```
# sysctl -p
```

次に、UPF(PGW-U)のIPアドレスを追加し、TUNインターフェースとNAPTを設定します。

```sh
ip addr add 192.168.0.116/24 dev enp0s8

ip tuntap add name ogstun3 mode tun
ip addr add 10.47.0.1/16 dev ogstun3
ip link set ogstun3 up

iptables -t nat -A POSTROUTING -s 10.47.0.0/16 ! -o ogstun3 -j MASQUERADE
```

### OAI UE/RANのネットワーク設定

```sh
ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
```

## Open5GSとOAI UE/RANのビルド

Open5GSとOAI UE/RANのビルド方法は以下を参照して下さい。

- Open5GS v2.4.7 - https://open5gs.org/open5gs/docs/guide/02-building-open5gs-from-sources/
- OAI UE / RAN v1.0.3 - https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/l2-nfapi-simulator/l2-nfapi-simulator-w-S1-same-machine

注意。Open5GS EPC C-PlaneマシンにMongoDBをインストールして下さい。なお、MongoDBのデータベースを簡単に確認するには、[MongoDB Compass](https://www.mongodb.com/products/compass)が便利です。

```
# apt update
# apt install mongodb
# systemctl start mongodb
# systemctl enable mongodb
```

なお、Open5GS EPC U-PlaneマシンにはMongoDBをインストールする必要はありません。

注意。OAI UE/RANをビルドする際、初回のビルドでは、`build_oai`コマンドのパラメータに`-I`を追加して下さい。次回からは不要です。以下はeNodeBをビルドする場合の例です。

```sh
./build_oai -I --eNB -t ETHERNET -c
```

## Open5GS EPCとOAI UE/RANを実行

最初にEPCを起動し、次にRAN、UEを起動します。

### Open5GS EPC C-Planeを実行

最初に、Open5GS EPC C-Planeを起動します。

- Open5GS EPC C-Plane

```sh
./install/bin/open5gs-mmed &
./install/bin/open5gs-sgwcd &
./install/bin/open5gs-smfd &
./install/bin/open5gs-hssd &
./install/bin/open5gs-pcrfd &
```

### Open5GS EPC U-Plane1とU-Plane2を実行

次に、Open5GS EPC U-Planeを起動します。

- Open5GS EPC U-Plane1

```sh
./install/bin/open5gs-sgwud &
./install/bin/open5gs-upfd &
```

- Open5GS EPC U-Plane2

```sh
./install/bin/open5gs-sgwud &
./install/bin/open5gs-upfd &
```

### OAI RANを実行

OAI eNBを起動し、Open5GS EPCに接続します。

```
# cd ~/enb_folder/cmake_targets
# ./lte_build_oai/build/lte-softmodem -O ../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf 2>&1 | tee enb.log
```

Open5GS C-Planeのログは以下の通りです。

```
06/05 19:10:19.615: [mme] INFO: eNB-S1 accepted[192.168.0.120]:36412 in s1_path module (../src/mme/s1ap-sctp.c:114)
06/05 19:10:19.615: [mme] INFO: eNB-S1 accepted[192.168.0.120] in master_sm module (../src/mme/mme-sm.c:152)
06/05 19:10:19.615: [mme] INFO: [Added] Number of eNBs is now 1 (../src/mme/mme-context.c:1837)
06/05 19:10:19.616: [mme] INFO: eNB-N2[192.168.0.120] max_num_of_ostreams : 2 (../src/mme/mme-sm.c:194)
```

### OAI 5 UEsを実行

OAI 5 UEsを起動し、Open5GS EPCに接続します。その際、コマンドラインのパラメータにUEを5つ使用することを示す`--num-ues 5`を追加して下さい。

```
# cd ~/ue_folder/cmake_targets/tools
# source init_nas_s1 UE
# cd ..
# ./lte_build_oai/build/lte-uesoftmodem -O ../ci-scripts/conf_files/ue.nfapi.conf --L2-emul 3 --num-ues 5 2>&1 | tee ue.log
```

Open5GS C-Planeのログは以下の通りです。5つのUEがEPCに接続し、PDUセッションを確立しました。

```
06/05 19:11:03.431: [mme] INFO: InitialUEMessage (../src/mme/s1ap-handler.c:223)
06/05 19:11:03.431: [mme] INFO: [Added] Number of eNB-UEs is now 1 (../src/mme/mme-context.c:3489)
06/05 19:11:03.431: [mme] INFO:     ENB_UE_S1AP_ID[420141] MME_UE_S1AP_ID[1] TAC[1] CellID[0xe0000] (../src/mme/s1ap-handler.c:363)
06/05 19:11:03.431: [mme] INFO: [001010000000100] Unknown UE by IMSI (../src/mme/mme-context.c:2478)
06/05 19:11:03.431: [mme] INFO: [Added] Number of MME-UEs is now 1 (../src/mme/mme-context.c:2308)
06/05 19:11:03.431: [emm] INFO: [] Attach request (../src/mme/emm-sm.c:203)
06/05 19:11:03.431: [emm] INFO:     IMSI[001010000000100] (../src/mme/emm-handler.c:188)
06/05 19:11:03.490: [mme] INFO: [Added] Number of MME-Sessions is now 1 (../src/mme/mme-context.c:3501)
06/05 19:11:03.491: [sgwc] INFO: [Added] Number of SGWC-UEs is now 1 (../src/sgwc/context.c:210)
06/05 19:11:03.491: [sgwc] INFO: [Added] Number of SGWC-Sessions is now 1 (../src/sgwc/context.c:871)
06/05 19:11:03.492: [gtp] INFO: gtp_connect() [127.0.0.4]:2123 (../lib/gtp/path.c:60)
06/05 19:11:03.493: [smf] INFO: [Added] Number of SMF-UEs is now 1 (../src/smf/context.c:876)
06/05 19:11:03.493: [smf] INFO: [Added] Number of SMF-Sessions is now 1 (../src/smf/context.c:2868)
06/05 19:11:03.493: [smf] INFO: UE IMSI[001010000000100] APN[internet] IPv4[10.45.0.2] IPv6[] (../src/smf/s5c-handler.c:255)
06/05 19:11:03.496: [gtp] INFO: gtp_connect() [192.168.0.114]:2152 (../lib/gtp/path.c:60)
06/05 19:11:03.496: [gtp] INFO: gtp_connect() [127.0.0.4]:2123 (../lib/gtp/path.c:60)
06/05 19:11:03.751: [emm] INFO: [001010000000100] Attach complete (../src/mme/emm-sm.c:1018)
06/05 19:11:03.752: [emm] INFO:     IMSI[001010000000100] (../src/mme/emm-handler.c:237)
06/05 19:11:03.752: [emm] INFO:     UTC [2022-06-05T10:11:03] Timezone[0]/DST[0] (../src/mme/emm-handler.c:243)
06/05 19:11:03.753: [emm] INFO:     LOCAL [2022-06-05T19:11:03] Timezone[32400]/DST[0] (../src/mme/emm-handler.c:247)
06/05 19:11:03.754: [mme] INFO: InitialUEMessage (../src/mme/s1ap-handler.c:223)
06/05 19:11:03.755: [mme] INFO: [Added] Number of eNB-UEs is now 2 (../src/mme/mme-context.c:3489)
06/05 19:11:03.756: [mme] INFO:     ENB_UE_S1AP_ID[16398672] MME_UE_S1AP_ID[2] TAC[1] CellID[0xe0000] (../src/mme/s1ap-handler.c:363)
06/05 19:11:03.757: [mme] INFO: [001010000000101] Unknown UE by IMSI (../src/mme/mme-context.c:2478)
06/05 19:11:03.757: [mme] INFO: [Added] Number of MME-UEs is now 2 (../src/mme/mme-context.c:2308)
06/05 19:11:03.758: [emm] INFO: [] Attach request (../src/mme/emm-sm.c:203)
06/05 19:11:03.758: [emm] INFO:     IMSI[001010000000101] (../src/mme/emm-handler.c:188)
06/05 19:11:03.801: [mme] INFO: [Added] Number of MME-Sessions is now 2 (../src/mme/mme-context.c:3501)
06/05 19:11:03.802: [sgwc] INFO: [Added] Number of SGWC-UEs is now 2 (../src/sgwc/context.c:210)
06/05 19:11:03.802: [sgwc] INFO: [Added] Number of SGWC-Sessions is now 2 (../src/sgwc/context.c:871)
06/05 19:11:03.804: [smf] INFO: [Added] Number of SMF-UEs is now 2 (../src/smf/context.c:876)
06/05 19:11:03.804: [smf] INFO: [Added] Number of SMF-Sessions is now 2 (../src/smf/context.c:2868)
06/05 19:11:03.804: [smf] INFO: UE IMSI[001010000000101] APN[internet2] IPv4[10.46.0.2] IPv6[] (../src/smf/s5c-handler.c:255)
06/05 19:11:03.831: [mme] INFO: InitialUEMessage (../src/mme/s1ap-handler.c:223)
06/05 19:11:03.831: [mme] INFO: [Added] Number of eNB-UEs is now 3 (../src/mme/mme-context.c:3489)
06/05 19:11:03.832: [mme] INFO:     ENB_UE_S1AP_ID[7773174] MME_UE_S1AP_ID[3] TAC[1] CellID[0xe0000] (../src/mme/s1ap-handler.c:363)
06/05 19:11:03.832: [mme] INFO: [001010000000102] Unknown UE by IMSI (../src/mme/mme-context.c:2478)
06/05 19:11:03.833: [mme] INFO: [Added] Number of MME-UEs is now 3 (../src/mme/mme-context.c:2308)
06/05 19:11:03.833: [emm] INFO: [] Attach request (../src/mme/emm-sm.c:203)
06/05 19:11:03.834: [emm] INFO:     IMSI[001010000000102] (../src/mme/emm-handler.c:188)
06/05 19:11:04.063: [emm] INFO: [001010000000101] Attach complete (../src/mme/emm-sm.c:1018)
06/05 19:11:04.064: [emm] INFO:     IMSI[001010000000101] (../src/mme/emm-handler.c:237)
06/05 19:11:04.064: [emm] INFO:     UTC [2022-06-05T10:11:04] Timezone[0]/DST[0] (../src/mme/emm-handler.c:243)
06/05 19:11:04.064: [emm] INFO:     LOCAL [2022-06-05T19:11:04] Timezone[32400]/DST[0] (../src/mme/emm-handler.c:247)
06/05 19:11:04.065: [mme] INFO: InitialUEMessage (../src/mme/s1ap-handler.c:223)
06/05 19:11:04.066: [mme] INFO: [Added] Number of eNB-UEs is now 4 (../src/mme/mme-context.c:3489)
06/05 19:11:04.066: [mme] INFO:     ENB_UE_S1AP_ID[10104933] MME_UE_S1AP_ID[4] TAC[1] CellID[0xe0000] (../src/mme/s1ap-handler.c:363)
06/05 19:11:04.067: [mme] INFO: [001010000000103] Unknown UE by IMSI (../src/mme/mme-context.c:2478)
06/05 19:11:04.067: [mme] INFO: [Added] Number of MME-UEs is now 4 (../src/mme/mme-context.c:2308)
06/05 19:11:04.068: [emm] INFO: [] Attach request (../src/mme/emm-sm.c:203)
06/05 19:11:04.068: [emm] INFO:     IMSI[001010000000103] (../src/mme/emm-handler.c:188)
06/05 19:11:04.085: [mme] INFO: [Added] Number of MME-Sessions is now 3 (../src/mme/mme-context.c:3501)
06/05 19:11:04.086: [sgwc] INFO: [Added] Number of SGWC-UEs is now 3 (../src/sgwc/context.c:210)
06/05 19:11:04.086: [sgwc] INFO: [Added] Number of SGWC-Sessions is now 3 (../src/sgwc/context.c:871)
06/05 19:11:04.088: [smf] INFO: [Added] Number of SMF-UEs is now 3 (../src/smf/context.c:876)
06/05 19:11:04.088: [smf] INFO: [Added] Number of SMF-Sessions is now 3 (../src/smf/context.c:2868)
06/05 19:11:04.088: [smf] INFO: UE IMSI[001010000000102] APN[internet2] IPv4[10.46.0.3] IPv6[] (../src/smf/s5c-handler.c:255)
06/05 19:11:04.114: [mme] INFO: [Added] Number of MME-Sessions is now 4 (../src/mme/mme-context.c:3501)
06/05 19:11:04.115: [sgwc] INFO: [Added] Number of SGWC-UEs is now 4 (../src/sgwc/context.c:210)
06/05 19:11:04.115: [sgwc] INFO: [Added] Number of SGWC-Sessions is now 4 (../src/sgwc/context.c:871)
06/05 19:11:04.116: [smf] INFO: [Added] Number of SMF-UEs is now 4 (../src/smf/context.c:876)
06/05 19:11:04.116: [smf] INFO: [Added] Number of SMF-Sessions is now 4 (../src/smf/context.c:2868)
06/05 19:11:04.117: [smf] INFO: UE IMSI[001010000000103] APN[ims] IPv4[10.47.0.2] IPv6[] (../src/smf/s5c-handler.c:255)
06/05 19:11:04.120: [gtp] INFO: gtp_connect() [192.168.0.116]:2152 (../lib/gtp/path.c:60)
06/05 19:11:04.343: [emm] INFO: [001010000000102] Attach complete (../src/mme/emm-sm.c:1018)
06/05 19:11:04.344: [emm] INFO:     IMSI[001010000000102] (../src/mme/emm-handler.c:237)
06/05 19:11:04.344: [emm] INFO:     UTC [2022-06-05T10:11:04] Timezone[0]/DST[0] (../src/mme/emm-handler.c:243)
06/05 19:11:04.344: [emm] INFO:     LOCAL [2022-06-05T19:11:04] Timezone[32400]/DST[0] (../src/mme/emm-handler.c:247)
06/05 19:11:04.346: [emm] INFO: [001010000000103] Attach complete (../src/mme/emm-sm.c:1018)
06/05 19:11:04.346: [emm] INFO:     IMSI[001010000000103] (../src/mme/emm-handler.c:237)
06/05 19:11:04.347: [emm] INFO:     UTC [2022-06-05T10:11:04] Timezone[0]/DST[0] (../src/mme/emm-handler.c:243)
06/05 19:11:04.347: [emm] INFO:     LOCAL [2022-06-05T19:11:04] Timezone[32400]/DST[0] (../src/mme/emm-handler.c:247)
06/05 19:11:04.348: [mme] INFO: InitialUEMessage (../src/mme/s1ap-handler.c:223)
06/05 19:11:04.349: [mme] INFO: [Added] Number of eNB-UEs is now 5 (../src/mme/mme-context.c:3489)
06/05 19:11:04.350: [mme] INFO:     ENB_UE_S1AP_ID[3105598] MME_UE_S1AP_ID[5] TAC[1] CellID[0xe0000] (../src/mme/s1ap-handler.c:363)
06/05 19:11:04.350: [mme] INFO: [001010000000104] Unknown UE by IMSI (../src/mme/mme-context.c:2478)
06/05 19:11:04.351: [mme] INFO: [Added] Number of MME-UEs is now 5 (../src/mme/mme-context.c:2308)
06/05 19:11:04.351: [emm] INFO: [] Attach request (../src/mme/emm-sm.c:203)
06/05 19:11:04.351: [emm] INFO:     IMSI[001010000000104] (../src/mme/emm-handler.c:188)
06/05 19:11:04.385: [mme] INFO: [Added] Number of MME-Sessions is now 5 (../src/mme/mme-context.c:3501)
06/05 19:11:04.385: [sgwc] INFO: [Added] Number of SGWC-UEs is now 5 (../src/sgwc/context.c:210)
06/05 19:11:04.385: [sgwc] INFO: [Added] Number of SGWC-Sessions is now 5 (../src/sgwc/context.c:871)
06/05 19:11:04.387: [smf] INFO: [Added] Number of SMF-UEs is now 5 (../src/smf/context.c:876)
06/05 19:11:04.387: [smf] INFO: [Added] Number of SMF-Sessions is now 5 (../src/smf/context.c:2868)
06/05 19:11:04.387: [smf] INFO: UE IMSI[001010000000104] APN[ims] IPv4[10.47.0.3] IPv6[] (../src/smf/s5c-handler.c:255)
06/05 19:11:04.631: [emm] INFO: [001010000000104] Attach complete (../src/mme/emm-sm.c:1018)
06/05 19:11:04.632: [emm] INFO:     IMSI[001010000000104] (../src/mme/emm-handler.c:237)
06/05 19:11:04.632: [emm] INFO:     UTC [2022-06-05T10:11:04] Timezone[0]/DST[0] (../src/mme/emm-handler.c:243)
06/05 19:11:04.633: [emm] INFO:     LOCAL [2022-06-05T19:11:04] Timezone[32400]/DST[0] (../src/mme/emm-handler.c:247)
```

Open5GS U-Plane1のログは以下の通りです。3つのGTP-Uセッションが作成されました。

```
06/05 19:11:03.453: [sgwu] INFO: UE F-SEID[CP:0x1 UP:0x1] (../src/sgwu/context.c:157)
06/05 19:11:03.453: [sgwu] INFO: [Added] Number of SGWU-Sessions is now 1 (../src/sgwu/context.c:162)
06/05 19:11:03.457: [upf] INFO: [Added] Number of UPF-Sessions is now 1 (../src/upf/context.c:178)
06/05 19:11:03.457: [gtp] INFO: gtp_connect() [192.168.0.113]:2152 (../lib/gtp/path.c:60)
06/05 19:11:03.457: [gtp] INFO: gtp_connect() [192.168.0.112]:2152 (../lib/gtp/path.c:60)
06/05 19:11:03.457: [upf] INFO: UE F-SEID[CP:0x1 UP:0x1] APN[internet] PDN-Type[1] IPv4[10.45.0.2] IPv6[] (../src/upf/context.c:397)
06/05 19:11:03.458: [gtp] INFO: gtp_connect() [192.168.0.114]:2152 (../lib/gtp/path.c:60)
06/05 19:11:03.715: [gtp] INFO: gtp_connect() [192.168.0.120]:2152 (../lib/gtp/path.c:60)
06/05 19:11:03.764: [sgwu] INFO: UE F-SEID[CP:0x2 UP:0x2] (../src/sgwu/context.c:157)
06/05 19:11:03.764: [sgwu] INFO: [Added] Number of SGWU-Sessions is now 2 (../src/sgwu/context.c:162)
06/05 19:11:03.768: [upf] INFO: [Added] Number of UPF-Sessions is now 2 (../src/upf/context.c:178)
06/05 19:11:03.769: [upf] INFO: UE F-SEID[CP:0x2 UP:0x2] APN[internet2] PDN-Type[1] IPv4[10.46.0.2] IPv6[] (../src/upf/context.c:397)
06/05 19:11:04.048: [sgwu] INFO: UE F-SEID[CP:0x3 UP:0x3] (../src/sgwu/context.c:157)
06/05 19:11:04.048: [sgwu] INFO: [Added] Number of SGWU-Sessions is now 3 (../src/sgwu/context.c:162)
06/05 19:11:04.052: [upf] INFO: [Added] Number of UPF-Sessions is now 3 (../src/upf/context.c:178)
06/05 19:11:04.053: [upf] INFO: UE F-SEID[CP:0x3 UP:0x3] APN[internet2] PDN-Type[1] IPv4[10.46.0.3] IPv6[] (../src/upf/context.c:397)
```

Open5GS U-Plane2のログは以下の通りです。2つのGTP-Uセッションが作成されました。

```
06/05 19:11:04.090: [sgwu] INFO: UE F-SEID[CP:0x1 UP:0x4] (../src/sgwu/context.c:157)
06/05 19:11:04.090: [sgwu] INFO: [Added] Number of SGWU-Sessions is now 1 (../src/sgwu/context.c:162)
06/05 19:11:04.094: [upf] INFO: [Added] Number of UPF-Sessions is now 1 (../src/upf/context.c:178)
06/05 19:11:04.094: [gtp] INFO: gtp_connect() [192.168.0.115]:2152 (../lib/gtp/path.c:60)
06/05 19:11:04.094: [gtp] INFO: gtp_connect() [192.168.0.112]:2152 (../lib/gtp/path.c:60)
06/05 19:11:04.094: [upf] INFO: UE F-SEID[CP:0x1 UP:0x4] APN[ims] PDN-Type[1] IPv4[10.47.0.2] IPv6[] (../src/upf/context.c:397)
06/05 19:11:04.095: [gtp] INFO: gtp_connect() [192.168.0.116]:2152 (../lib/gtp/path.c:60)
06/05 19:11:04.323: [gtp] INFO: gtp_connect() [192.168.0.120]:2152 (../lib/gtp/path.c:60)
06/05 19:11:04.360: [sgwu] INFO: UE F-SEID[CP:0x2 UP:0x5] (../src/sgwu/context.c:157)
06/05 19:11:04.361: [sgwu] INFO: [Added] Number of SGWU-Sessions is now 2 (../src/sgwu/context.c:162)
06/05 19:11:04.365: [upf] INFO: [Added] Number of UPF-Sessions is now 2 (../src/upf/context.c:178)
06/05 19:11:04.366: [upf] INFO: UE F-SEID[CP:0x2 UP:0x5] APN[ims] PDN-Type[1] IPv4[10.47.0.3] IPv6[] (../src/upf/context.c:397)
```

VM4(OAI UEマシン)で`ip addr show`を実行した結果は以下の通りです。TUNインターフェース`oip1`-`oip5`に各PDNのIPアドレスが割り当てられていることが分かります。

```
# ip addr show
...
20: oip1: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
    inet 10.45.0.2/8 brd 10.255.255.255 scope global oip1
       valid_lft forever preferred_lft forever
21: oip2: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
    inet 10.46.0.2/8 brd 10.255.255.255 scope global oip2
       valid_lft forever preferred_lft forever
22: oip3: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
    inet 10.46.0.3/8 brd 10.255.255.255 scope global oip3
       valid_lft forever preferred_lft forever
23: oip4: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
    inet 10.47.0.2/8 brd 10.255.255.255 scope global oip4
       valid_lft forever preferred_lft forever
24: oip5: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/generic 00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00
    inet 10.47.0.3/8 brd 10.255.255.255 scope global oip5
       valid_lft forever preferred_lft forever
...
```

## google.comにpingする

VM4のUE0のTUNインターフェースを指定して、`ping`してみます。

### PDN=10.45.0.0/16を経由する場合

VM2(U-Plane1)で`tcpdump`を実行し、`if=ogstun`を通過するパケットを確認します。

- VM4(UE0)で`ping google.com`

```
# ping google.com -I oip1 -n
PING google.com (142.251.42.206) from 10.45.0.2 oip1: 56(84) bytes of data.
64 bytes from 142.251.42.206: icmp_seq=1 ttl=61 time=63.9 ms
64 bytes from 142.251.42.206: icmp_seq=2 ttl=61 time=63.8 ms
64 bytes from 142.251.42.206: icmp_seq=3 ttl=61 time=62.1 ms
```

- VM2(U-Plane1)で`tcpdump`を実行

```
# tcpdump -i ogstun -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ogstun, link-type RAW (Raw IP), capture size 262144 bytes
19:19:03.967322 IP 10.45.0.2 > 142.251.42.206: ICMP echo request, id 3126, seq 1, length 64
19:19:03.984741 IP 142.251.42.206 > 10.45.0.2: ICMP echo reply, id 3126, seq 1, length 64
19:19:04.966964 IP 10.45.0.2 > 142.251.42.206: ICMP echo request, id 3126, seq 2, length 64
19:19:04.983959 IP 142.251.42.206 > 10.45.0.2: ICMP echo reply, id 3126, seq 2, length 64
19:19:05.966983 IP 10.45.0.2 > 142.251.42.206: ICMP echo request, id 3126, seq 3, length 64
19:19:05.984050 IP 142.251.42.206 > 10.45.0.2: ICMP echo reply, id 3126, seq 3, length 64
```

`oip2`-`oip5`についても同様に、各U-Planeで`tcpdump`を実行し、`ogstunX`を通過するパケットを確認して下さい。

以上で、PDNの端点にTUNインターフェースを作成し、PDNに任意のパケットを流せるようになり、CU分離なプライベートLTEのシミュレーション携帯網として、MECを試す環境を構築できました。

## 最後に

ご存知の方も多いと思いますが、Open5GSの前身はNextEPCです。個人的にOpen5GSを気に入っている理由は以下の通りです。

- 質問や不具合報告の対応が迅速です。
- 2020年2月、[EPCを実運用に投入して成功した事例](https://github.com/open5gs/open5gs/issues/360)が報告されています。

話変わりますが、当初、Open5GS EPCとOpenAirInterface UEの接続はうまく行きませんでした。2020年9月下旬にこれを認識し、Open5GSの開発者に指摘するとともにEUROCOMにも状況を伝えました。

結果、Attach Request時に、MMEがSecurity-Modeの制御手順を開始する際、Security-Mode-Commandメッセージに、3GPP TS 24.301 v14.4から導入されたHashMMEを含める必要があるのですが、OAI UEはこれに対応していないことが判明し、EUROCOMの開発者もこのことを認識しました。

本来、OAI UEが対応するのが筋なのですが、先方の事情でこれに対応することができず、2020年11月にOpen5GS側で対応して頂きました。これにより、UE/RANのシミュレータにOAIを採用し、CU分離に対応したOpen5GS EPCと連携した携帯網を試験的に構築し、GTP-Uを使用することができるようになりました。

CU分離は携帯網のサービス化とMECを実現する上で、有用なアーキテクチャと思います。

最後に、元記事は[Github](https://github.com/s5uishida/open5gs_epc_oai_sample_config)に書いたものです。Open5GSの[チュートリアル](https://open5gs.org/open5gs/docs/)からもリンクして頂きました。

## 主な変更履歴

- [2022.07.13] Open5GS v2.4.7に対応し、SMF(PGW-C)とUPF(PGW-U)に別途、IPアドレスを割当。
- [2021.03.09] Open5GS v2.2.0に対応。
- [2020.12.07] 初版。