ScalaでCaptive Portalを実装しカンファレンスで運用するまで #npstudy

1f745ff900e1be51aedae18cae76593c?s=47 Kurochan
September 05, 2019

ScalaでCaptive Portalを実装しカンファレンスで運用するまで #npstudy

ネットワークプログラマビリティ勉強会で発表した資料です
https://network-programmability.connpass.com/event/143534/

1f745ff900e1be51aedae18cae76593c?s=128

Kurochan

September 05, 2019
Tweet

Transcript

  1. 2.

    黒崎 優太 • 広告配信プラットフォームの開発責任者 • 業務は Scala + AWS •

    イラスト図解でよくわかる ITインフラの基礎知識 • 書きました • AWSのAZ(アベイラビリティーゾーン)とは?AZ 障害が起きたときどうすればよいのか • 最近ちょっとバズりました @kuro_m @kurochan
  2. 4.

    開発している広告システム概況 • ⼊札リクエスト量: 数⼗万リクエスト / 秒 • ⼊札トラフィック: 約8Gbps •

    レスポンスタイム: 100ms以内 • ログの量: 数TB / Day(圧縮状態) ೔ຊͷೖࡳϦΫΤετඵ ೔ຊΞϝϦΧͷϨεϙϯελΠϜ NTFD
  3. 6.

    Contents • Captive Portal x Scala • Captive Portalとは •

    実装, デプロイ, 運⽤ • Wi-Fi in ScalaMatsuri • 設計, 検証, 構築, 運⽤ • トラブル
  4. 10.

    Captive Portalを検知するには • Captive Portal Detection • Captive Portalを検知しポップアップ画⾯を出す仕組み •

    Wi-Fi接続時に意図しないHTTPリダイレクトを検知する • iOS/macOS and Android, Windows, Linux, etc... • 例: • Wi-Fi接続時にバックグラウンドで以下のようなURLを叩く
 http://check.example.com implicitly. • 意図した応答があればインターネットにつながっていると判定し、なにもしない • HTTP Foundを検知するとCaptive Portalだと判断する
  5. 13.
  6. 15.

    OpenFlow • Software Defined Networkの技術のひとつ • Control PlaneとData Planeが分離できる •

    今回はScalaでControl Planeを実装する • OpenFlowのControl Planeの既存の
 実装の例 • Java: Floodlight, Ruby: Trema, Python: Ryu https://qiita.com/ttsubo/items/ addd c d adfcf
  7. 17.

    Performance Test • Simple Controller: packet-inしたらpacket-outするだけ • C . xlarge(

    Core GB) • Mbps • 負荷分散していないので1コアしか使えていない状態 • パフォーマンス的には⼗分だった • 全パケットをScalaで処理したテスト • 実際にはフローはキャッシュされる • キャッシュヒット率が90%なら
 Gbpsくらいは出せそう Scala Application OpenFlow Message The Internet
  8. 18.

    構成 • OpenFlow Gateway • netty • OpenFlow Messageのシリアライズ/デシリアライズ •

    HTTP Server • Akka HTTP • CaptivePortalのWebサーバ • Captive Portal Controller • Akka Streams • パケット処理とOpenFlowのフローの⽣成
  9. 21.

    Captive Portal Controller • 認可済ユーザ: パケットを全て通す • 同様なフローをスイッチに書き込む • 未認可ユーザ:

    DNSパケットは
 全て偽DNSサーバに転送 • 偽DNSサーバは常に同じIPを返す • Akka Streamsで処理を書いた • パケット処理はストリーミング処理
 そのものなので便利でした(後述)
  10. 39.

    Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ OpenFlow Switch
  11. 40.

    Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! Packet Out OpenFlow Switch DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  12. 41.

    Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! Packet Out ِDNS Server OpenFlow Switch DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  13. 42.

    Case: 未認可ユーザ Captive Portal Server The Internet User OpenFlow Switch

    Packet In Unauthorized! Packet Out Fake DNS Server ِDNS response DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  14. 43.

    Case: 未認可ユーザ Captive Portal Server The Internet User OpenFlow Switch

    Packet In Unauthorized! Packet Out Fake DNS Server Captive PortalʹϦμΠϨΫτ DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ ِDNS response
  15. 46.
  16. 47.

    無事動作しました • ⼀部動かない端末が... • Samsung GalaxyシリーズでのみCaptive Portal検知ができず • 何かしらのHTTPのサイト (e.g.

    http://neverssl.com ) を開いてもらうことでリダイレクトしてもらった • 約800ユーザが認証してくれました!
  17. 48.
  18. 50.
  19. 51.

    構成 • Home NOC Operator's Group(AS )の
 データセンタに接続 • データセンタとの間はフレッツのNGN折返し通信

    • ⾼速な回線を提供したかった • やってみたかった The Internet AS59105 Scala Matsuri venue
  20. 52.

    Scala Matsuriの会場 • Wi-Fi Access Points x • Cisco Aironet

    x • Cisco Meraki MR x • PoE Switching Hub x • Router x • NEC IX • Server x • LAN Cable • m
  21. 57.
  22. 60.
  23. 64.
  24. 69.

    Day

  25. 71.
  26. 72.