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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
270
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
200
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.4k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
170
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
310
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
440
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
10
6.6k
Other Decks in Technology
See All in Technology
アラートを見直していたら営業組織への理解にちょっとだけ繋がった話
z63d
0
160
2026 Apache Flink Community Checkpoint
rmetzger
0
210
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
140
レガシーコードに対する loop engineering的なAI開発プロセス導入について
kubell_hr
0
320
うちなーぐちが認識できるなら、秋田弁もいけるはず!? Amazon Transcribe方言チューニング検証
ryouto715
1
130
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
310
田んぼの見回りをIoTで減らしたい!水位監視から電池駆動カメラまでの試行錯誤
itosoft
1
110
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
480
自治体AIコンタクトセンター、何をどこに任せる?~Amazon Connect Customer +Amazon Bedrockの実践知~ / 20261107 Satoshi Torano
shift_evolve
PRO
1
130
少ない人手 限られた予算 それでも守る 消せない・見つける・戻れる オールハザード型BCP on AWS / 20261107 Mitsutoshi Matsuo
shift_evolve
PRO
0
340
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.2k
仕様と現実の間で落とし所を探るリモートMCPの認証・認可 — Sansanの認証基盤における課題と実践
sansantech
PRO
2
240
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
Deep Space Network (abreviated)
tonyrice
0
410
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
300
Making the Leap to Tech Lead
cromwellryan
135
10k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
460
Speed Design
sergeychernyshev
33
2.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
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Ͱ͖Δͷ͔ઓ • Ϋϥυͷཁૉٕज़ͷͻͱͭͷཧղ͕ਂ·Δ͔͠Εͳ͍