Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテンツ屋が昔つくった PGW OSSの紹介

コンテンツ屋が昔つくった PGW OSSの紹介

Open Mobile Network Infra Meetup #8 における吉野の発表資料です。
https://omni-jp.connpass.com/event/244922/

#omni_jp

MIXI ENGINEERS
PRO

July 22, 2022
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. コンテンツ屋が昔つくった
    PGW OSSの紹介
    2022/07
    株式会社ミクシィ 吉野純平

    View Slide

  2. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    ⾃⼰紹介
    • 吉野純平
    • 株式会社ミクシィ 開発本部 本部⻑
    • スキル守備範囲
    • ネットワーク関連(IPルーティング、L2、MPLS(L3VPN,LDP) 、伝送初⼼者)
    • モバイル関連(S5,Gp)
    • 映像関連(SMPTE2110,SMPTE2022,配信,WebRTC初⼼者, PTP 2059-2)
    • サーバ運⽤
    • 電⼦回路 初⼼者
    • 3DCAD 初⼼者
    • コントリビューション先 libgtpnl, tungsten fabric(旧open contrail時代), keepalived,
    wireshark
    2

    View Slide

  3. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    我々とモバイル
    • 過去
    • モバイル関連の事業検討がありました
    • PGW/GGSN作りました。
    • 現在
    • ローカル5Gの競技での映像配信活⽤
    • ⾃転⾞につけるカメラ端末を必死に開発
    • JANOG50で製造機器の写真など公開予定
    • TIPSTAR DOME CHIBA内で免許をとって基地局運⽤
    3

    View Slide

  4. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    JANOG50の弊社応募プログラムの宣伝 7/15
    • Day3 2022年7⽉15⽇(⾦) 10:45〜11:30(45分)
    • https://www.janog.gr.jp/meeting/janog50/local5g/
    4

    View Slide

  5. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    運⽤しやすいPGWを作りたかった
    • 迂回が⾃動的にされる
    • メンテナンス時に迂回が⼼理的に楽
    • 障害時の迂回も考慮
    • 単⼀障害でコントロールプレーンがばたつかない感じが良い
    • データプレーンもコントロールプレーンもCIできる
    かなり紆余曲折しながらですが、上記に近づくように模索しました。
    socket + kernel module + tap/netmapなどなど
    5

    View Slide

  6. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    公開したもののサマリー
    • https://github.com/mixigroup/mixi-pgw
    • S5,Gpに対応
    • コントロールプレーンの各処理にOptionalであるPrivate Extensionを付与
    • データベースのレプリケーション機能を活⽤して、データプレーンをミラー
    • レプリケーションは遅延があるので、Private Extesionで即書き換え
    • 冗⻑系にはレプリケーションのみで対応
    • データベースを使ってコントロールプレーンとデータプレーンの分離
    6

    View Slide

  7. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    MySQL系のレプリケーションについて
    • スナップショットと差分伝達(binlog)
    • 以下の2つがあればレプリケーションができる
    • 全体のスナップショット
    • 差分を受け取るために、スナップショットを取った位置のポ
    ジション情報
    =>データプレーンのテーブル再構築、追従に使える
    7

    View Slide

  8. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    実際の処理
    • 起動時に、まずDBのポジションを取得
    • 必要データをselect
    • selectしている間にもポジションが進む
    • selectしたものを⾃分のデータの中に書き込む
    • 確保しておいたポジションから後ろを⾃分のデータに適⽤し続ける
    • 2度漬けしても問題にないのでこれが許される
    8

    View Slide

  9. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    データプレーンとコントロールプレーンの分離とDBでの結合
    9
    L3
    SW
    L3
    SW
    データ
    プレーン
    コントロール
    プレーン
    S5,Gp
    データベース
    通常利⽤
    レプリケー
    ション
    通常利⽤

    View Slide

  10. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    コントロールプレーンの実装
    • GTPv1、GTPv2、GTP-U(echo,error,ICMPv6 RS)の実装
    • キャリア様で公開されている技術条件集に準拠
    • IPv4,IPv6,IPv4v6で動作
    • PCOでのDNSは8.8.8.8などを設定
    • IPv6を付与した時のICMPv6 Router Solicitationに応答する
    • Private Extensionを付与してレスポンスを作る
    10

    View Slide

  11. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    Private Extension IEの実装したもの
    11
    type = 255 length instance
    vender id=??? padding
    magic
    SGW_GTPU_IPV4
    SGW_GTPU_TEID
    UE_IPV4
    UE_TEID (PGW側のTEID)
    PGW_GTPU_IPV4
    • 実際使う時はvender idをianaサイトで登録して使ってください。snmp でも使えます!
    • OSSの中では0で書いてあります。

    View Slide

  12. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    12
    L3
    SW
    L3
    SW
    データ
    プレーン
    コントロール
    プレーン
    S5,Gp
    データベース
    通常利⽤
    レプリケーション
    通常利⽤
    Private Extension付き応答メッセージ

    View Slide

  13. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    なぜPrivate Extension
    • レスポンスに含めたかった
    • リクエストにしかない情報があった
    • SGWのアドレスなどなど
    • まとめてレスポンスに詰めれば必要な情報が揃う
    • プロトコル仕様上問題ないところに情報を⼊れたかった
    13

    View Slide

  14. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    レプリケーションは遅延するからPrivateExtensionをスプーフィングする
    • DBレプリケーションは遅延がでる
    • データプレーン反映前にGTP-Uがくるとまずい
    • GTP-Cのレスポンスに混ぜて即時反映すればいい
    14

    View Slide

  15. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    データプレーンの実装
    • DPDKには物理ポート2portをアサイン
    • 基本的には2ポートをブリッジするスルー動作をする
    • このブリッジはパケットを破棄したり、書き換えたりする
    • 興味のある処理だけに限定して書く GTP encap/decapなど
    15
    DCサーバ
    L3スイッチ L3スイッチ
    ポート
    ポート
    ARPやルーティングプロトコル
    処理

    View Slide

  16. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    テストしやすく
    • データベースでC/D分離されているからテストしやすい
    • 各プレーンで独⽴してテスト可能
    • コントロールプレーンのCI試験
    • リクエストに対するDB書き変わり
    • 応答チェック。Private Extension含む
    • データプレーンのCI試験
    • DB書き代わりに応じた内部テーブル更新
    • PrivateExtensionを⾒た内部テーブル更新
    • 内部テーブルを使ったGTPトンネルヘッダの付け外し
    16

    View Slide

  17. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    テスト全般のコード周り
    • gtestを使ったテストを記載
    • そのためにC++
    • DPDKでもわかりやすいテストが描けるように⼯夫
    • ⼊れるパケットを定義して、ロジックを通し、出⼒をチェッ
    クする
    • DPDKで動くハードウエアがない状態でもテストできるよう
    にした
    17

    View Slide

  18. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    これで冗⻑系まで書くと
    18
    L3
    SW
    L3
    SW
    データ
    プレーン
    コントロール
    プレーン
    S5,Gp
    L3
    SW
    L3
    SW
    データ
    プレーン
    コントロール
    プレーン
    S5,Gp
    右から左にデータプレーンを超えるところと
    左から右にデータプレーンを超えるところを⼀致させたい
    BGPならLP等で強制する

    View Slide

  19. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    まとめ
    • 昔作ったPGWをちょっと整理して公開しました
    • だいぶ試⾏錯誤したデザイン思想です
    • 昔はもっといろんなものがついてました
    • 帯域制御周りのあれこれ
    • 公平制御のためのあれこれでv6頑張った
    • v4とv6が混ざると公平制御が⾟かった
    • データプレーンがマイクロサービスかされてチェーンされて
    ました
    19

    View Slide

  20. ˜NJYJ *OD"MMSJHIUTSFTFSWFE
    この先、余裕を作って、やりたいこと
    • 5GCのUPF実装
    • できるならRU/DU/CU以外は⾃前にしたい
    • ローカル5G⾦かかる
    20

    View Slide