とんとんとんねる

解いた人:nonnonno

参照した問題・解説のサイト:とんとんとんねる

使用環境・ツール

コントロールプレーンがないユーザープレーン環境

コントロールプレーン・ユーザプレーンとは

コントロールプレーンとは、ネットワークの制御を担うもののこと。
単一のソフトウェアによってネットワークの構成や制御を柔軟かつ動的に行う技術の総称のことを指す。
ユーザプレーン機能は、無線アクセスネットワークとデータネットワークとの間のデータパケットを処理する。
ちなみにデータプレーンとは、あるインタフェースから別のインタフェースにパケット・フレームを転送する全ての機能とプロセス。

5Gをテーマとする上でコントロールプレーン・ユーザプレーンの働きを考える。
参考リンク

そもそも端末は、通信するときに2種類の信号を基地局とやり取りしている。1つは、端末がどの基地局と接続するのか、端末が通信できる状況にあるかどうかを判断する制御信号。この信号を「コントロールプレーン(Control-Plane)信号」といい、その頭文字をとってCプレーン信号と呼ぶ。

もう1つは、写真をダウンロードしたり、ウェブサイトでショッピングをしたりといった、実際のデータを伝送する信号。これを「ユーザーデータ(User-Plane)信号」、頭文字をとってUプレーン信号という。

CとUは端末と基地局の間でやりとりする信号のこと。
従来、端末が通信するとき、2つの信号を必ず同じ基地局とやりとりしていた。
5Gネットワークでは、このCプレーンとUプレーンを分離して、別の基地局と通信できるようにしている。
なお、4Gの基地局がカバーするエリアの中に5Gの基地局のエリアが含まれていることは事前知識。
Cプレーンは広範囲をカバーする4Gの基地局に接続し、Uプレーン信号は速度で勝る5Gの基地局に接続する。
そうすることで、基地局の切り替えがスムーズになり、まだ5Gに対応していないエリアでも、4G->5Gへの切り替えによる通信切断が防げる。

トポロジ

とんとんとんねるの一枚目の画像。

UPFとは

UPFはUser Plane Functionの略称で、スマホなどで利用するデータパケットの転送を担うルータのこと。

DNとは

DNはData Networkの略で、インターネットや何らかのサービスを提供するサーバが接続されたネットワークの総称である。

問題文でされた操作・バグの内容

5G環境を構築する実験環境のためのコントロールプレーンがないユーザープレーン環境で、手元のgNodeBから $ ping 192.168.21.50 をしても応答がない。

理想の終了状態

手元のgNodeBから $ ping 192.168.21.50 をすると応答が返ってくる。
通信はトンネルインターフェースで行うこと。

トンネルインタフェースとは

間に複数のネットワーク機器が挟まれた状態のネットワーク機器同士をあたかも直結しているかのように見せる、論理インタフェース。

考えられる原因とその検証・修正手順

今回はこのケースには当てはまらないが、一般的に、VPN接続自体が失敗する場合の原因のほとんどはVPNルータの設定ミスである。
宛先となる対向ルータのアドレスや事前共有鍵などの通信に必要な情報を合わせる必要があり、それらが揃っていない場合が多い。
以下に、VPN接続が確立しているがpingなど実際の通信ができない場合に考えられる原因を挙げる。
参考

パソコンのファイアウォールの設定

悪意のある第三者に端末の存在やOSなどの情報を知られて攻撃に悪用されることを防ぐため、ファイアウォールがpingを通さない設定になっている可能性がある。
そのため、一旦ファイアウォールをオフにしてみることが有効である。

パケットフィルタリングの設定ミス

ルータの設定として、pingなどのICMPのプロトコルを利用するものは通過するようにフィルターで定義されていないと、pingパケットは通過できない。

経路設定ミス

VPNでは、宛先ネットワークとして対向の拠点のネットワークアドレスを設定する必要があり、ミスが起きやすい箇所である。

解説

原因

GTPv1-Uと呼ばれる、モバイルにおけるトンネリングプロトコルのユーザプレーン通信を題材とした問題。
これはGTPv1-UにはTEIDと呼ばれるトンネリングのアンカーになるIDが存在するが、それらが設定されていないことに起因する。

GTPv1-Uとは

GTPとは、General Packet Radio System Tunneling Protocol というトンネリングプロトコルである。
GTPプロトコルにはU-planeとC-planeがある。

TEIDとは

Tunnel Endpoint Identifierの略称。
GTPで各セッションを認識するための識別子である。

本問題の解き方の鍵としては、GTPv1-Uがどのようなフォーマットで行われるかを理解する必要がある。

解決方法

tcpdumpを使いこなして解く。

サービスの障害やエラーを表示するロギング・サービスであるjournalctlで、実行コンフィグがあるディレクトリを確認できる。
すると、systemdの挙動のコンフィグが /opt/netprob/init.shで展開されていることがわかり、実行コンフィグがここにあることがわかる。
gNBというホストにおけるinit.shのコンフィグの --f-tid 200として、 hdr-creation 0 200 192.168.21.33 2152 として期待されている200のTEIDに揃える。

#!/bin/sh
sleep 0.1
ip addr add 10.0.0.1/24 dev lo
sh /home/adam/libgtp5gnl/tools/gtp5g-link add gtptun --ran &
sleep 0.1
sh /home/adam/libgtp5gnl/tools/gtp5g-tunnel add far gtptun 1 --action 2
sh /home/adam/libgtp5gnl/tools/gtp5g-tunnel add far gtptun 2 --action 2 --hdr-creation 0 100 192.168.21.34 2152
sh /home/adam/libgtp5gnl/tools/gtp5g-tunnel add pdr gtptun 1 --pcd 1 --hdr-rm 0 --ue-ipv4 10.0.0.1 --f-teid 200 192.168.21.33 --far-id 1
sh /home/adam/libgtp5gnl/tools/gtp5g-tunnel add pdr gtptun 2 --pcd 2 --ue-ipv4 10.0.0.1 --far-id 2
ip r add 192.168.21.48/28 dev gtptun

受け取り側のTEIDと送られる側のTEIDを期待通りにしておく必要がある。