38
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

LTEを自作してみる(Part1)

はじめに

プライベートLTEって??

5Gに期待が膨らんでいく今日この頃、プライベートLTEという言葉が注目されています。LTE(簡単に言うとスマホがインターネットと通信するためのネットワーク)はドコモやソフトバンクなどの通信事業者が所有しているLTE設備により実現できており、それを自分たちで作っちゃおうというのがプライベートLTEです。

プライベートLTEはさまざまな分野での利用が期待されています。
- Wi-Fiよりセキュリティに優れた無線ネットワークの実現
- 災害時における迅速な通信網の復旧

プライベートLTEが普及するキーとなってくるのがオープンソース(OSS)です。
今まではLTEの設備というと特定のメーカーが製造している高価なネットワーク機械により構成されていました。それが仮想化(NFVとか言ったりもしますね)により汎用機器とソフトウェアで構成できるようになりました。これにオープンソースが加わることにより、LTE設備を安価に構成することが可能となりました。

OSS LTE

現在、さまざまなOSS LTEが開発されています。その中で有名なものとしては

  • OpenAirInterface
  • srsLTE
  • NextEPC

今回はOpenAirInterface(以後 OAI)を実際にセットアップして、動かしてみます。

OpenAirInterface

  • OpenAirInterface Software Alianceが提供するEUTRANおよびEPCのアプリケーション
  • ソース(※1)
  • C言語でできている
  • 機能
    • EUTRAN
      • eNodeB
      • シミュレータ(※2)
    • EPC
      • MME
      • HSS
      • SPGW(SGW + PGW)

image.png

※1
gitlabへのリンクですが、OAIはgithubでもソースを管理しているようです。どちらがメインなのかはよくわかりません。

※2
EUTRANのシミュレータはOAI SIMと呼ばれ、[ UE ] or [ eNodeB ] or [ UE & eNodeB ]をシミュレートすることが可能です。

セットアップ(EPC)

では実際にUbuntu VM上にEPCをセットアップしてみましょう。

セットアップ手順はGitLabのWikiにTutorialとして記載されています。

1.VM作成

以下の通りUbuntu VMを作成します。

  • ホスト名: epc01
  • OS: Ubuntu 16.04
  • Spec
    • CPU : 2vcore
    • Memory : 4GB
    • Disk : 50GB
  • Network
    • ens3 : 管理用インターフェース
    • ens9 : 内部通信(EUTRAN-EPC)用インターフェース
    • ens10 : インターネット接続インターフェース image.png

2.カーネルUpgrade

カーネルのバージョンアップが要件となっています。

# uname -a
Linux epc01 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# git clone https://gitlab.eurecom.fr/oai/linux-4.7.x.git
# cd linux-4.7.x
# dpkg -i linux-headers-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb linux-image-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb
# reboot

# uname -a
Linux epc01 4.7.7-oaiepc #1 SMP Sun Oct 16 22:45:31 CST 2016 x86_64 x86_64 x86_64 GNU/Linux

3.ホスト名設定

ホスト名を変更し、/etc/hostsを編集します。
/etc/hostsには自信とmmeとhssのエントリーを追加します。
mmeとhssのエントリーにはFQDNも登録しておきます。(ドメイン名は任意のものを付けてください。)

# cat /etc/hostname
epc01

# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       epc01
127.0.1.1       mme.epc.lte             mme
127.0.1.1       hss.epc.lte             hss

4.ソースファイルのダウンロード

ソースファイルをダウンロードする際にバージョンを指定します。(今回は0.5.0)
(OAIはリリース/バージョンによって挙動が変わったり、安定感に欠けているような気がします。そのため再現性確保のためにバージョンを指定していた方がよいです。)

# git clone --depth 1 -b v0.5.0  https://gitlab.eurecom.fr/oai/openair-cn.git
# cd openair-cn

5.HSSのインストール

# pwd
/root/openair-cn
# cd scripts/
# ./build_hss -i

image.png
MySQLのrootパスワードの設定を求められるので、任意のパスワードを入力します。

image.png
apache2を選択します。

image.png Noを選択します。

HSS not compiled, to compile it, re-run build_hss without -i 

上記の出力が表示されるため、-iなしでもう一度ビルドを実行します。

# ./build_hss

oai_hss installed

6.MMEのインストール

# ./build_mme -i

image.png
Yesを選択します。

MME not compiled, to compile it, re-run build_mme without -i option

-iなしで再び実行します。

# ./build_mme 

mme installed

7.SPGWのインストール

# ./build_spgw -i

SPGW not compiled, to compile it, re-run build_spgw without -i option
# ./build_spgw 

spgw installed

8.設定ファイルの配置

設定ファイルのテンプレートを/usr/local/etc/oaiへコピーします。

# cd /root/openair-cn/etc
# cp ./mme.conf /usr/local/etc/oai/
# cp ./hss.conf /usr/local/etc/oai/
# cp ./spgw.conf /usr/local/etc/oai/
# cp ./acl.conf /usr/local/etc/oai/freeDiameter/
# cp ./mme_fd.conf /usr/local/etc/oai/freeDiameter/
# cp ./hss_fd.conf /usr/local/etc/oai/freeDiameter/

9.設定ファイルの編集

① mme.conf

MMEの設定ファイルの以下の箇所を変更します。

/usr/local/etc/oai/mme.conf
24   REALM                                 = "epc.lte";                # YOUR REALM HERE

153  MME_INTERFACE_NAME_FOR_S1_MME         = "ens9";                         # YOUR NETWORK CONFIG HERE
154  MME_IPV4_ADDRESS_FOR_S1_MME           = "172.16.0.52/24";                 # YOUR NETWORK CONFIG HERE
item value description
REALM epc.lte /etc/hostsに登録したMMEのドメイン名
MME_INTERFACE_NAME_FOR_S1_MME ens9 EUTRANと接続するIFのIF名
MME_IPV4_ADDRESS_FOR_S1_MME 172.16.0.52/24 上記IFのIPアドレス

② spgw.conf

SPGWの設定ファイルの以下の箇所を変更します。

/usr/local/etc/oai/spgw.conf
30  SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP    = "ens9";                       # STRING, interface name, YOUR NETWORK CONFIG HERE, USE "lo" if S-GW run on eNB host
31  SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP      = "172.16.0.52/24";             # STRING, CIDR, YOUR NETWORK CONFIG HERE

79  PGW_INTERFACE_NAME_FOR_SGI            = "ens10";                        # STRING, YOUR NETWORK CONFIG HERE
80  PGW_MASQUERADE_SGI                    = "yes";                           # STRING, {"yes", "no"}. YOUR NETWORK CONFIG HERE, will do NAT for you if you put "yes".

90  IPV4_LIST = (
91                   "1.1.1.0/24"                                           # STRING, CIDR, YOUR NETWORK CONFIG HERE.
92               );
item value description
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP ens9 EUTRANと接続するIFのIF名
SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP 172.16.0.52 上記IFのIPアドレス
PGW_INTERFACE_NAME_FOR_SGI ens10 インターネットと接続するIFのIF名
PGW_MASQUERADE_SGI yes SGIと通信する際にNATするか
IPV4_LIST 1.1.1.0/24 UEに割り当てるアドレスのアドレス範囲

③ hss.conf

HSSの設定ファイルの以下の箇所を変更します。

/usr/local/etc/oai/hss.conf
25  MYSQL_user   = "root";  # Database server login
26  MYSQL_pass   = "rootroot";  # Database server password
item value description
MYSQL_user root mysqlのrootユーザ名
MYSQL_pass rootroot mysqlのrootユーザのパスワード

④ mme_fd.conf

MMEのDiameter設定ファイルの以下の箇所を変更します。

※fd = FreeDiamater

/usr/local/etc/oai/freeDiameter/mme_fd.conf
4    Identity = "mme.epc.lte";
5    Realm = "epc.lte";

103  ConnectPeer= "hss.epc.lte" { ConnectTo = "127.0.1.1"; No_SCTP ; No_IPv6; Prefer_TCP; No_TLS; port = 3868;  realm = "epc.lte";};
item value description
Identity mme.epc.lte MMEのFQDN
Realm epc.lte MMEのドメイン名
ConnectPeer hss.epc.lte 接続先HSSのFQDN
ConnectTo 127.0.1.1 接続先HSSのIPアドレス
realm epc.lte 接続先HSSのドメイン名

⑤ hss_fd.conf

/usr/local/etc/oai/freeDiameter/hss_fd.conf
7   Identity = "hss.epc.lte";
11  Realm = "epc.lte";
item value description
Identity hss.epc.lte HSSのFQDN
Realm epc.lte HSSのドメイン名

10.証明書のインストール

# cd /root/openair-cn/scripts
# ./check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.lte.epc
# ./check_mme_s6a_certificate /usr/local/etc/oai/freeDiameter/ mme.lte.epc

11.ビルド

./build_hss -c
./build_mme -c
./build_spgw -c

12.MySQLへのデータ登録

HSSは自身のデータベースとしてMySQLを使用します。そのためMySQLにOAI EPC関連のデータを登録する必要があります。

# ./run_hss -i ~/openair-cn/src/oai_hss/db/oai_db.sql
<Ctrl + C>

13.MySQLのアップデート

前の手順でOAI EPC関連のデータがMySQLに登録されましたが、まだデフォルト状態のためアップデートする必要があります。

oai_dbデータベースのmmedidentityテーブルに以下のようにデータを追加します。

# mysql -u root -p

mysql> use oai_db;
mysql> insert into mmeidentity values(7, "mme.epc.lte","epc.lte", 0);
mysql> select * from mmeidentity;
+---------------+------------------------+---------------+-----------------+
| idmmeidentity | mmehost                | mmerealm      | UE-Reachability |
+---------------+------------------------+---------------+-----------------+
|             2 | mme2.openair4G.eur     | openair4G.eur |               0 |
|             1 | nano.openair4G.eur     | openair4G.eur |               0 |
|             5 | abeille.openair4G.eur  | openair4G.eur |               0 |
|             4 | yang.openair4G.eur     | openair4G.eur |               0 |
|             3 | mme3.openair4G.eur     | openair4G.eur |               0 |
|             6 | calisson.openair4G.eur | openair4G.eur |               0 |
|             7 | mme.epc.lte            | epc.lte       |               0 |
+---------------+------------------------+---------------+-----------------+

14.HSSの起動

# pwd
/root/openair-cn/scripts
# ./run_hss

....................................................

Initializing s6a layer: DONE

15.MMEの起動

# ./run_hss

....................................................

000261 00030:842323 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0033    ======================================= STATISTICS ============================================

000262 00030:842336 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0034                   |   Current Status| Added since last display|  Removed since last display |
000263 00030:842338 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0036    Connected eNBs |          0      |              0              |             0               |
000264 00030:842341 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0038    Attached UEs   |          0      |              0              |             0               |
000265 00030:842343 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0040    Connected UEs  |          0      |              0              |             0               |
000266 00030:842346 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042    Default Bearers|          0      |              0              |             0               |
000267 00030:842348 7F70057FA700 DEBUG MME-AP src/mme_app/mme_app_statistics.c:0044    S1-U Bearers   |          0      |              0              |             0               |

上記のようにSTATISTICSテーブルが定期的に表示されるようになれば、起動成功です。

16.SPGWの起動

# ./run_spgw

....................................................
000099 00000:866227 7F49E90FF700 DEBUG UDP    /src/udp/udp_primitives_server.c:0356    Initializing UDP task interface
000100 00000:867361 7F49E90FF700 DEBUG UDP    /src/udp/udp_primitives_server.c:0364    Initializing UDP task interface: DONE
000101 00000:867376 7F49E90FF700 DEBUG S11    oot/openair-cn/src/s11/s11_sgw.c:0259    Initializing S11 interface
....................................................

これでMME/HSS/SPGWが起動しました。

一度ここでVMの中でOAI EPCがどのように稼働しているか整理してみました。(もしかしたら間違えてるかも)
image.png

MME/HSS/SPGW各プロセスが上記のようにループバックインターフェースで接続しています。各プロセスが独立しているので、コンテナによるマイクロサービス化もやってみたいなーとか思ったり。。。

長くなったので今回はここまでとします。

最後に

今回はOAIのEPCをセットアップしました。
次回はOAI SIMをセットアップしてOAI EPCに接続させてみます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
38
Help us understand the problem. What are the problem?