Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Implementing a Captive Portal in Scala
Search
Kurochan
June 19, 2019
Technology
4.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Implementing a Captive Portal in Scala
社内勉強会で話したもの
Kurochan
June 19, 2019
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
1.2k
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
240
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
190
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.4k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
160
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
300
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
420
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
10
6.5k
Other Decks in Technology
See All in Technology
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
210
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
Local CI × GitHub Actions
gogutan
2
190
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
510
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
Refining Active Record
shugo
0
150
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
940
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Optimizing for Happiness
mojombo
378
71k
Embracing the Ebb and Flow
colly
88
5.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
New Earth Scene 8
popppiees
4
2.7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Transcript
Implementing a Captive Portal in Scala @kuro_m88
ScalaͰύέοτΛॻ͖͍͑ͨ • ScalaͰύέοτॲཧ͕ͨ͘͠ͳͬͨ • ཧ༝ޙड़͠·͢ • ScalaͰݱ࣮తʹύέοτॲཧ͢Δํ๏͋Δͷ͔ʁ • ͲͷϨΠϠ·Ͱૢ࡞Ͱ͖Δͷ͔
ScalaͰύέοτΛಈతʹॻ͖͑Δํ๏ • libpcap? • Ͱ͖ͳ͘ͳ͍͚Ͳ͠ΜͲͦ͏ɺ͏ͪΐͬͱָ͕͍ͨ͠ • ϧʔςΟϯάϓϩτίϧʁ • ѼઌͰϧʔςΟϯάͰ͖Δ͕ɺૹ৴ݩͰϧʔςΟϯάͰ͖ͳ͍ •
Policy Based Routing͕͋Δ͕ɺ੍ޚ͕Ή͔ͣͦ͠͏ • iptables? • Ͱ͖ͳ͘ͳͦ͞͏ɺScalaͰ੍ޚ͢ΔͷͲ͏͢ΔΜ͚ͩͬ… • Segment Routing? • ࠷৽ٕज़?ա͗ͯͲ͜·Ͱ͑Δͷ͔Α͘Θ͔Βͳ͍… • OpenFlow? • ͳΜ͔ฉ͍ͨ͜ͱ͋Δɺ͍͚ͦ͏ͳؾ͕͖ͯͨ͠
OpenFlow • Software Defined Network(ͷͨΊͷ௨৴ϓϩτίϧ) • SDN: Ϋϥυͷཁૉٕज़ͱͯͯ͠͞Ε͍ͯΔ(ͨ?) • ίϯτϩʔϧϓϨʔϯͱσʔλϓϨʔϯΛ
• ίϯτϩʔϧϓϨʔϯ͕ࣗ༝ʹ࣮Ͱ͖Δ • 2011ʹversion 1.1͕ग़ͨ + https://www.nic.ad.jp/ja/newsletter/No52/0800.html
OpenFlowͷ֓ཁ • 5ͰΘ͔Δɺ͜Ε·ͰͷSDNಈ • https://qiita.com/ttsubo/items/9062addd7c24d5adfcf3 • Ͳ͏ॲཧ͍͍͔ͯ͠Θ͔Βͳ͍ύέοτ => ίϯτϩʔϥʔʹసૹ •
ίϯτϩʔϥʔ => ड͚औͬͨύέοτͷॲཧΛεΠονʹࢦࣔ • ίϯτϩʔϥʔ => ॲཧͷύλʔϯΛ ༧ΊεΠονʹڭ͓͑ͯ͘ (ίϯτϩʔϥʹసૹ͞Εͳ͍ͷͰߴ)
OpenFlowίϯτϩʔϥʔͷطଘͷ࣮ • Python: Ryu • Ruby: Trema • Java: Floodlight
• Java: OpenDaylight • ࠓճϑϨʔϜϫʔΫΛΘͳ͍Ͱ ࣗલͰ࣮ͯ͠ΈΔ • OpenDaylightͷϝοηʔδͷύʔα͚ͩطଘ࣮Λྲྀ༻
OpenFlowίϯτϩʔϥʔΛScalaͰ࣮͢Δ • HTTPͷ௨৴͚ͩΛNAT͢Δ(ߦ͖)
OpenFlowίϯτϩʔϥʔΛScalaͰ࣮͢Δ • HTTPͷ௨৴͚ͩΛNAT͢Δ(ؼΓ)
OpenFlowίϯτϩʔϥʔΛScalaͰ࣮͢Δ • HTTPͷ௨৴͕͖ͨΒίϯτϩʔϥʔʹసૹ͢Δ
༧උ࣮ݧ • ScalaͰͲΕ͘Β͍ύέοτΛॲཧͰ͖Δͷ͔࣮ݧͯ͠ΈΔ • Packet in => Packet out ͢Δ͚ͩͷίϯτϩʔϥʔΛ
netty + Akka StreamsͰ࣮ • OpenFlowController + Open vSwitch: c5.2xlarge • iperf3Ͱଌఆ
༧උ࣮ݧ݁Ռ • 200Mbps, 150K packets / sec͘Β͍సૹͰ͖ͨ • ύέοτͷԟ෮Ԇ2~3ms͘Β͍ •
࠷େͷసૹੑೳ͕200Mbpsఔͱ͍͏͜ͱ͕Θ͔ͬͨ
༧උ࣮ݧ݁Ռ • Կॲཧ͠ͳ͍࣌ͷ࠷େͷసૹੑೳ͕200MbpsఔͰͳ͍ͷ͔ʁ • ͳ͍ • ࠓճͯ͢ͷύέοτΛίϯτϩʔϥʔܦ༝ʹ͕ͨ͠ɺϢʔβ͝ͱͷύ έοτͷॲཧํ๏ΛεΠονʹهԱ͓͚ͤͯ͞ίϯτϩʔϥʔʹ௨৴͕ ͘Δͷॳճͷ1ύέοτ͚ͩɺ͋ͱεΠονͷసૹੑೳ •
࣮ݧͰOpen vSwitch(ԾεΠονΛར༻)ɺϓϩτίϧʹޓੑ͕͋Δ ͷͰཧεΠονಉ༷ʹίϯτϩʔϧՄೳ
ͳΜͰScalaͰύέοτΛॻ͖͑ͨ͘ͳͬͨͷ͔ • Scala MatsuriͷWi-FiεϙϯαʔΛ͠·͢ʂ • ۀͩͱׂʹ߹Θͳ͔ͬͨܦҢΛฉ͍ͨͷͰɺͬͯΈ͍ͨਓୡͰΔ • Wi-Fiʹෆຬ͕ग़͍ͯͨΒ͍͠ͷͰɺྔͰԥΓ͍ͨʂʂ • ͬͯΈ͍ͨ͜ͱΛΔ
• PublicΫϥυΛΘͣʹࣗ࡞͢Δ • ΠϯλʔωοτଓΛ Home NOC Operator's Groupʹ ఏڙ͍ͯͨͩ͘͠
ͳΜͰScalaͰύέοτΛॻ͖͑ͨ͘ͳͬͨͷ͔ • Scala MatsuriͳͷͰΠϯϑϥʹScalaΛऔΓೖΕ͍ͨ • Scalaཁૉ͕ͪΐͬͱͰೖͬͯΕਖ਼ͳΜͰ͍͍ • LT/ΞϯΧϯϑΝϨϯεͷωλʹͳΓͦ͏ͳ͜ͱΛΓ͍ͨ • Captive
PortalΛ࡞ͬͯΈΔ…ʁ
Captive Portalͱʁ • Free Wi-Fiʹଓ͢Δͱ͖ʹॳճʹϒϥβભҠ͢Δͭ • نͱ͔ʹಉҙ͢ΔϘλϯԡ͢ͱΠϯλʔωοτʹͭͳ͕Δ (߹ʹΑͬͯೝূ) • ͜ΕΛScalaͰ࣮ͯ͠ΈΔ
Captive Portal͕Ͳ͏ͬͨΒ࣮ݱͰ͖Δͷ͔ • ࣮ࡍͷΈΑ͘Βͳ͍ͷͰ૾Ͱ࣮͢Δ • ͨͿΜҎԼ͕࣮ݱͰ͖Ε͍͍ • ೝՄ͍ͯ͠ͳ͍(IP)͔Βͷhttp௨৴ڧ੍ϦμΠϨΫτ • ೝՄ͍ͯ͠Δ(IP)͔Βͷ௨৴Πϯλʔωοτʹ௨͢
• ಛఆͷwebϖʔδͰϘλϯΛԡ͢ͱೝՄ͢Δ
Captive Portalը໘ʹભҠͤ͞ΔΈ • Captive Portal Detection • OS͕Captive PortalΛݕग़͢ΔͨΊʹཪଆͰҎԼͷURLΛͨͨ͘ •
Android: http://connectivitycheck.gstatic.com/generate_204 • iOS/Mac: http://captive.apple.com/hotspot-detect.html • Windows: http://www.msftncsi.com/ncsi.txt • ظ͞ΕΔϨεϙϯε͕ฦ͖ͬͯͨ => Πϯλʔωοτଓ͕͋Δ • Ϩεϙϯε͕͔͑ͬͯ͜ͳ͍ => Πϯλʔωοτଓ͕ͳ͍ • ϦμΠϨΫτ͞Εͨ => Captive PortalΛݕ
Captive PortalΛ࣮͢Δʹ • ૹ৴ݩͷೝՄ/ະೝՄ IPʹԠͯ͡ύέοτΛॻ͖͑Δඞཁ͕͋Δ • ૹ৴ݩ͕ೝՄࡁͩͬͨ߹ Α͏ͦ͜ը໘(ೝূ) Πϯλʔωοτ Captive
Portal (webαʔό) Ϣʔβ OpenFlow Switch
Captive PortalΛ࣮͢Δʹ • ૹ৴ݩͷೝՄ/ະೝՄ IPʹԠͯ͡ύέοτΛॻ͖͑Δඞཁ͕͋Δ • ૹ৴ݩ͕ະೝՄͩͬͨ߹ Α͏ͦ͜ը໘(ೝূ) Πϯλʔωοτ Captive
Portal (webαʔό) Ϣʔβ OpenFlow Switch ✗
Implementing a Captive Portal in Scala • server: netty •
controller: Akka Streams • http: Akka Http OpenFlow Switch server http controller
·ͱΊ • Scala MatsuriͰScalaΛΠϯϑϥʹΈࠐΜͰΈΑ͏ͱ͍ͯ͠Δ • ؒʹ߹͏ͷ͔·ͩΘ͔Βͳ͍ • ಉ࣌ଓ1000ΫϥΠΞϯτنͷͱ͜ΖͰॳ৺ऀ͕SDNͰ͖Δͷ͔ઓ • Ϋϥυͷཁૉٕज़ͷͻͱͭͷཧղ͕ਂ·Δ͔͠Εͳ͍