NextEPCを使ってEPCを構築する(NextEPCの設定編)

前回でNextEPCを動作させるための事前準備と、NextEPCのビルドが完了しました。
今回は、NextEPCの設定を行います。

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

構築環境

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

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

NextEPCの設定

NextEPCをビルドしインストールすると、ビルドしたディレクトリ配下の./install/etc/配下に設定ファイルが配置されます。

$ ls -lF install/etc/nextepc/
total 36
drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 freeDiameter/
-rw-r--r-- 1 bit bit  236 Mar 26 14:13 hss.conf
-rw-r--r-- 1 bit bit  685 Mar 26 14:13 mme.conf
-rw-r--r-- 1 bit bit 7007 Mar 26 14:13 nextepc.conf
-rw-r--r-- 1 bit bit  239 Mar 26 14:13 pcrf.conf
-rw-r--r-- 1 bit bit  503 Mar 26 14:13 pgw.conf
-rw-r--r-- 1 bit bit  244 Mar 26 14:13 sgw.conf
drwxrwxr-x 2 bit bit 4096 Mar 26 14:13 test/

EPCを構成する各ノード( MME, SGW, PGW, PCRF, and HSS)を個別に起動してもいいのですが、開発用に全ノードを起動できるnextepc-epcdというスクリプトファイルが用意されているので、このファイルを使用してNextEPCを起動します。

nextepc-epcdを使用してNextEPCを起動する場合、設定ファイルは./install/etc/nextepc/nextepc.conf、ログファイルは./install/var/log/nextepc/nextepc.logです。

デフォルトの設定内容

参考のため、変更を加えていないデフォルトの状態のnextepc.confの内容を以下に示します。
設定例がコメントで示されている部分が多いため、設定項目が多いように感じられますが、それほど多くはありません。

  1 db_uri: mongodb://localhost/nextepc
  2
  3 logger:
  4     file: /home/bit/modify_plmn_id/nextepc/install/var/log/nextepc/nextepc.log
  5     trace:
  6         app: 1
  7         s1ap: 1
  8         nas: 1
  9         diameter: 1
 10         gtpv2: 1
 11         gtp: 1
 12
 13 #
 14 # parameter:
 15 #
 16 #  o Number of output streams per SCTP associations.
 17 #      sctp_streams: 30
 18 #
 19 #  o Disable use of IPv4 addresses (only IPv6)
 20 #      no_ipv4: true
 21 #
 22 #  o Disable use of IPv6 addresses (only IPv4)
 23 #      no_ipv6: true
 24 #
 25 #  o Prefer IPv4 instead of IPv6 for estabishing new GTP connections.
 26 #      prefer_ipv4: true
 27 #
 28 #  o Enable Multicast traffic to the UE
 29 #      multicast: true
 30 #
 31 #  o Disable Stateless Address Autoconfiguration for IPv6
 32 #      no_slaac: true
 33 #
 34 #
 35 parameter:
 36     no_ipv6: true
 37
 38 mme:
 39     freeDiameter: mme.conf
 40
 41 #
 42 #  <S1AP Server>>
 43 #
 44 #  o S1AP Server(all address avaiable)
 45 #    s1ap:
 46 #
 47 #  o S1AP Server(0.0.0.0:36412)
 48 #    s1ap:
 49 #      addr: 0.0.0.0
 50 #
 51 #  o S1AP Server(127.0.0.1:36412, [::1]:36412)
 52 #    s1ap:
 53 #      - addr: 127.0.0.1
 54 #      - addr: ::1
 55
 56 #  o S1AP Server(different port)
 57 #    s1ap:
 58 #      - addr: 127.0.0.1
 59 #        port: 36413
 60 #
 61 #  o S1AP Server(address avaiable in `eth0` interface)
 62 #    s1ap:
 63 #      dev: eth0
 64 #
 65     s1ap:
 66
 67 #
 68 #  <GTP-C Server>>
 69 #
 70 #  o GTP-C Server(all address avaiable)
 71 #    gtpc:
 72 #
 73 #  o GTP-C Server(127.0.0.1:2123, [::1]:2123)
 74 #    gtpc:
 75 #      - addr: 127.0.0.1
 76 #      - addr: ::1
 77 #
 78     gtpc:
 79
 80 #
 81 #  <GUMMEI>
 82 #
 83 #  o Multiple GUMMEI
 84 #    gummei:
 85 #      - plmn_id:
 86 #          mcc: 001
 87 #          mnc: 01
 88 #        mme_gid: 2
 89 #        mme_code: 1
 90 #      - plmn_id:
 91 #          - mcc: 002
 92 #            mnc: 02
 93 #          - mcc: 003
 94 #            mnc: 03
 95 #        mme_gid: [3, 4]
 96 #        mme_code:
 97 #          - 2
 98 #          - 3
 99 #
100     gummei:
101       plmn_id:
102         mcc: 001
103         mnc: 01
104       mme_gid: 2
105       mme_code: 1
106
107 #
108 #  <TAI>
109 #
110 #  o Multiple TAI
111 #    tai:
112 #      - plmn_id:
113 #          mcc: 001
114 #          mnc: 01
115 #        tac: [1, 2, 3]
116 #    tai:
117 #      - plmn_id:
118 #          mcc: 002
119 #          mnc: 02
120 #        tac: 4
121 #      - plmn_id:
122 #          mcc: 003
123 #          mnc: 03
124 #        tac: 5
125 #    tai:
126 #      - plmn_id:
127 #          mcc: 004
128 #          mnc: 04
129 #        tac: [6, 7]
130 #      - plmn_id:
131 #          mcc: 005
132 #          mnc: 05
133 #        tac: 8
134 #      - plmn_id:
135 #          mcc: 006
136 #          mnc: 06
137 #        tac: [9, 10]
138 #
139     tai:
140       plmn_id:
141         mcc: 001
142         mnc: 01
143       tac: 12345
144
145     security:
146         integrity_order : [ EIA1, EIA2, EIA0 ]
147         ciphering_order : [ EEA0, EEA1, EEA2 ]
148
149 #
150 #  <Network Name>
151 #    network_name:
152 #        full: NextEPC
153 #        short: Next
154 #
155
156     network_name:
157         full: NextEPC
158
159 hss:
160     freeDiameter: hss.conf
161
162 sgw:
163 #
164 #  ------------------------ MME --------------------------
165 #
166 #  o Specify SGW addresses the GTP-C must connect to
167 #
168 #  o One SGW is defined. If prefer_ipv4 is not true, [fe80::2%lo] is selected.
169 #    gtpc:
170 #      addr:
171 #        - 127.0.0.2
172 #        - fe80::2%lo
173 #
174 #  o Two SGW are defined. MME selects SGW with round-robin manner per UE
175 #    gtpc:
176 #      - addr: 127.0.0.2
177 #      - addr: fe80::2%lo
178 #
179 #  o Three SGW are defined. MME selects SGW with round-robin manner per UE
180 #    gtpc:
181 #      - addr
182 #        - 127.0.0.2
183 #        - fe80::2%lo
184 #      - addr
185 #        - 127.0.0.12
186 #        - fe80::12%lo
187 #      - name: sgw3.nextepc.org
188 #
189 #  ------------------------ SGW --------------------------
190 #
191 #  o GTP-C Server(127.0.0.2:2123, [fe80::2%lo]:2123)
192 #    gtpc:
193 #      addr:
194 #        - 127.0.0.2
195 #        - fe80::2%lo
196 #
197 #  o On SGW, Same Configuration(127.0.0.2:2123, [fe80::2%lo]:2123) as below.
198 #    gtpc:
199 #      - addr: 127.0.0.2
200 #      - addr: fe80::2%lo
201 #
202     gtpc:
203       addr: 127.0.0.2
204
205 #
206 # <SGW Selection Mode>
207 #
208 # o Round-Robin
209 #   (If `selection_mode` is omitted, the default mode is Round-Robin)
210 #
211 #   selection_mode: rr
212 #   gtpc:
213 #     addr: 127.0.0.2
214 #     addr: 127.0.2.2
215 #     addr: 127.0.4.2
216 #
217 # o SGW selection by eNodeB TAC
218 #
219 #   selection_mode: tac
220 #   gtpc:
221 #     - addr: 127.0.0.2
222 #       tac: 26000
223 #     - addr: 127.0.2.2
224 #       tac: [25000, 27000, 28000]
225 #
226
227 #
228 #  <GTP-U Server>
229 #
230 #  o GTP-U Server(all address avaiable)
231 #    gtpu:
232 #
233     gtpu:
234
235 pgw:
236     freeDiameter: pgw.conf
237
238 #
239 #  ------------------------ MME --------------------------
240 #
241 #  o Only first node is attempted. Others are ignored.
242 #  o if HSS provide PGW addresss(per-UE), DB overwrites YAML-configuration.
243 #
244 #  o Two PGW are defined. 127.0.0.3:2123 is attempted. [fe80::3%lo]:2123 is ignored.
245 #    gtpc:
246 #      - addr: 127.0.0.3
247 #      - addr: fe80::3%lo
248 #
249 #  o One PGW is defined. if prefer_ipv4 is not true, [fe80::3%lo] is selected.
250 #    gtpc:
251 #      - addr:
252 #        - 127.0.0.3
253 #        - fe80::3%lo
254 #
255 #  ------------------------ PGW --------------------------
256 #
257 #  o GTP-C Server(127.0.0.3:2123, [fe80::3%lo]:2123)
258 #    gtpc:
259 #      addr:
260 #        - 127.0.0.3
261 #        - fe80::3%lo
262 #
263 #  o On PGW, Same configuration(127.0.0.3:2123, [fe80::3%lo]:2123) as below.
264 #    gtpc:
265 #      - addr: 127.0.0.3
266 #      - addr: fe80::3%lo
267 #
268     gtpc:
269       addr:
270         - 127.0.0.3
271         - ::1
272
273 #
274 #  <GTP-U Server>>
275 #
276 #  o GTP-U Server(127.0.0.3:2152, [::1]:2152)
277 #    gtpu:
278 #      - addr: 127.0.0.3
279 #      - addr: ::1
280 #
281 #  o Same configuration(127.0.0.3:2152, [::1]:2152) as below.
282 #    gtpu:
283 #      name: localhost
284 #
285     gtpu:
286       - addr: 127.0.0.3
287       - addr: ::1
288
289 #
290 #  <UE Pool>
291 #
292 #  o IPv4 Pool
293 #    $ sudo ip addr add 45.45.0.1/16 dev pgwtun
294 #
295 #    ue_pool:
296 #      addr: 45.45.0.1/16
297 #
298 #  o IPv4/IPv6 Pool
299 #    $ sudo ip addr add 45.45.0.1/16 dev pgwtun
300 #    $ sudo ip addr add cafe:1::1/64 dev pgwtun
301 #
302 #    ue_pool:
303 #      - addr: 45.45.0.1/16
304 #      - addr: cafe:1::1/64
305 #
306 #
307 #  o Specific APN(e.g 'volte') uses 45.46.0.1/16, cafe:2::1/64
308 #    All other APNs use 45.45.0.1/16, cafe:1::1/64
309 #    $ sudo ip addr add 45.45.0.1/16 dev pgwtun
310 #    $ sudo ip addr add 45.46.0.1/16 dev pgwtun
311 #    $ sudo ip addr add cafe:1::1/64 dev pgwtun
312 #    $ sudo ip addr add cafe:2::1/64 dev pgwtun
313 #
314 #    ue_pool:
315 #      - addr: 45.45.0.1/16
316 #      - addr: cafe:1::1/64
317 #      - addr: 45.46.0.1/16
318 #        apn: volte
319 #      - addr: cafe:2::1/64
320 #        apn: volte
321 #
322 #  o Multiple Devices (default: pgwtun)
323 #    $ sudo ip addr add 45.45.0.1/16 dev pgwtun
324 #    $ sudo ip addr add cafe:1::1/64 dev pgwtun2
325 #    $ sudo ip addr add 45.46.0.1/16 dev pgwtun3
326 #    $ sudo ip addr add cafe:2::1/64 dev pgwtun3
327 #
328 #    ue_pool:
329 #      - addr: 45.45.0.1/16
330 #      - addr: cafe:1::1/64
331 #        dev: pgwtun2
332 #      - addr: 45.46.0.1/16
333 #        apn: volte
334 #        dev: pgwtun3
335 #      - addr: cafe:2::1/64
336 #        apn: volte
337 #        dev: pgwtun3
338 #
339     ue_pool:
340       - addr: 45.45.0.1/16
341       - addr: cafe::1/64
342
343 #
344 #  <Domain Name Server>
345 #
346 #  o Primary/Secondary can be configured. Others are ignored.
347 #
348     dns:
349       - 8.8.8.8
350       - 8.8.4.4
351       - 2001:4860:4860::8888
352       - 2001:4860:4860::8844
353
354 #
355 #  <P-CSCF>
356 #
357 #  o Proxy Call Session Control Function
358 #
359 #    p-cscf:
360 #      - 127.0.0.1
361 #      - ::1
362 #
363
364 pcrf:
365     freeDiameter: pcrf.conf

このnextepc.confの内容を既存システムの設定に合わせて変更します。

MMEの設定

既存システムのeNodeBに設定されているMMEのIPアドレスが、”192.168.4.80″であったため、その設定に合わせて変更します。

38 mme:
39     freeDiameter: mme.conf
中略)
65     s1ap:
66       addr: 192.168.4.80

SGWの設定

上記と同様にSGWのIPアドレスも変更します。

162 sgw:
(中略)
233     gtpu:
234       addr: 192.168.4.80

NATルータの設定

eNodeBがインターネットに接続できるようにNATの設定を行います。

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -I INPUT -i pgwtun -j ACCEPT

再起動後も有効になるように、rc.localに設定を追加しました。

MCCとMNCの設定

この項目もmmeの設定の一部なのですが、少々分かり難いため、説明を分けました。
mmeの設定には、以下のような項目があります。

140       plmn_id:
141         mcc: 001
142         mnc: 01

PLMNとは、Public Land Mobile Networkの略称で、MCC(Mobile Country Code)とMNC(Mobile Network Code)で構成されるIDです。

この設定をeNodeB側の設定と合わせないと、正常に接続することができません。
注意点として、PLMN_IDとMCC+MNCの対応付けは少々複雑です。

MNCが3桁の場合、以下の組み合わせで構成されます。

PLMN_ID = MCC2桁目、MCC3桁目、MNC1桁目、MCC1桁目、MNC2桁目、MNC3桁目

一方、MNCが2桁の場合、以下の組み合わせで構成されます。

PLMN_ID = MCC2桁目、MCC3桁目、0xF、MCC1桁目、MNC1桁目、MNC2桁目

MNCが2桁の場合は、3桁目に0xFが入った値がPLMN_IDとなります。
例えば、PLMN_IDが0x00f110の場合、MCCは0x001、MNCは0x01になります。

NextEPCのログに出力されたPLMN_IDとeNodeBのMCC、MNCの設定を合わせる際には、この点に注意してください。

ここまでの手順で、NextEPCの設定が完了しました。
次回は、UE情報の登録方法をご紹介します。
以上。

コメントを残す

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

*