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

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

Kurochan
September 05, 2019

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

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

Kurochan

September 05, 2019
Tweet

More Decks by Kurochan

Other Decks in Technology

Transcript

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

    イラスト図解でよくわかる ITインフラの基礎知識 • 書きました • AWSのAZ(アベイラビリティーゾーン)とは?AZ 障害が起きたときどうすればよいのか • 最近ちょっとバズりました @kuro_m @kurochan
  2. 開発している広告システム概況 • ⼊札リクエスト量: 数⼗万リクエスト / 秒 • ⼊札トラフィック: 約8Gbps •

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

    実装, デプロイ, 運⽤ • Wi-Fi in ScalaMatsuri • 設計, 検証, 構築, 運⽤ • トラブル
  4. 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. 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
  6. Performance Test • Simple Controller: packet-inしたらpacket-outするだけ • C . xlarge(

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

    HTTP Server • Akka HTTP • CaptivePortalのWebサーバ • Captive Portal Controller • Akka Streams • パケット処理とOpenFlowのフローの⽣成
  8. Captive Portal Controller • 認可済ユーザ: パケットを全て通す • 同様なフローをスイッチに書き込む • 未認可ユーザ:

    DNSパケットは
 全て偽DNSサーバに転送 • 偽DNSサーバは常に同じIPを返す • Akka Streamsで処理を書いた • パケット処理はストリーミング処理
 そのものなので便利でした(後述)
  9. Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ OpenFlow Switch
  10. Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! Packet Out OpenFlow Switch DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  11. Case: 未認可ユーザ Captive Portal Server The Internet User Packet In

    Unauthorized! Packet Out ِDNS Server OpenFlow Switch DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  12. Case: 未認可ユーザ Captive Portal Server The Internet User OpenFlow Switch

    Packet In Unauthorized! Packet Out Fake DNS Server ِDNS response DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ
  13. Case: 未認可ユーザ Captive Portal Server The Internet User OpenFlow Switch

    Packet In Unauthorized! Packet Out Fake DNS Server Captive PortalʹϦμΠϨΫτ DNSύέοτͷ޲͖ઌΛ
 ِͷDNSαʔόʹॻ͖׵͑Δ ِDNS response
  14. 無事動作しました • ⼀部動かない端末が... • Samsung GalaxyシリーズでのみCaptive Portal検知ができず • 何かしらのHTTPのサイト (e.g.

    http://neverssl.com ) を開いてもらうことでリダイレクトしてもらった • 約800ユーザが認証してくれました!
  15. 構成 • Home NOC Operator's Group(AS )の
 データセンタに接続 • データセンタとの間はフレッツのNGN折返し通信

    • ⾼速な回線を提供したかった • やってみたかった The Internet AS59105 Scala Matsuri venue
  16. 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
  17. Day