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
210
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
180
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.4k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
150
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
290
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
410
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
10
6.5k
Other Decks in Technology
See All in Technology
AIエージェントの権限管理 3: Agentic RAG の Fine grained access control 編
ren8k
1
260
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
750
データ_AIの事業の勝敗をわけるもの
nek0128
1
480
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
170
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
32
21k
絵ではじめるKubernetesセキュリティ
aoi1
5
710
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
490
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
290
CLIライブラリ開発を支える技術
htnabe
0
150
Railsのように考える: See through the Master
snoozer05
PRO
5
1.3k
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
1
340
Featured
See All Featured
Fireside Chat
paigeccino
43
4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
290
Designing for humans not robots
tammielis
254
26k
Ethics towards AI in product and experience design
skipperchong
2
380
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Making Projects Easy
brettharned
120
6.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Marketing to machines
jonoalderson
1
5.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Optimizing for Happiness
mojombo
378
71k
Typedesign – Prime Four
hannesfritz
42
3.2k
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Ͱ͖Δͷ͔ઓ • Ϋϥυͷཁૉٕज़ͷͻͱͭͷཧղ͕ਂ·Δ͔͠Εͳ͍