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
XDPを利用したエッジデバイスでのネットワーク制御
Search
Tomoya Amachi
November 13, 2020
Technology
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
XDPを利用したエッジデバイスでのネットワーク制御
Tomoya Amachi
November 13, 2020
More Decks by Tomoya Amachi
See All by Tomoya Amachi
Azureで守るマルチクラウド
tomoyamachi
0
800
クラウド時代のセキュリティをふりかえる
tomoyamachi
1
1.2k
Integrating Service Mesh with Kubernetes-based connected vehicle platform
tomoyamachi
1
1.2k
Cloud Native Development Design Patterns
tomoyamachi
2
4.1k
Check Container Images with Original Rules@GoConference 2019 Autumn
tomoyamachi
2
3.8k
Dockerセキュリティ対策の現状と対策ツールの仕組み&使い方
tomoyamachi
2
2k
GAE FEのdeployストレスを軽減する10の方法
tomoyamachi
0
520
Other Decks in Technology
See All in Technology
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
100
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
230
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
210
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
210
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
290
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
17
120k
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
150
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
Deep Data Security 機能解説
oracle4engineer
PRO
2
720
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
180
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
230
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
870
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Accessibility Awareness
sabderemane
1
240
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
How to Ace a Technical Interview
jacobian
280
24k
Writing Fast Ruby
sferik
630
63k
Code Review Best Practice
trishagee
74
20k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
260
Transcript
XDPを利用したエッジデバイスでのネットワーク制御 @tomoyamachi
背景 ネットワークが不安定なエッジデバイスで、 アプリケーションごとのネットワーク制御を必要とせず 通信を行いたい。 Vehicle edge Vehicle edge Cloud 4G
Wi-Fi
現在のアーキテクチャ • Transparent Proxy ◦ すべてのリクエストを制御する ▪ 接続可能なネットワークインタフェース制御 ▪ リクエストのバッファリング
▪ 設定時間以上バッファリングした場合、リクエストデータを保存 ◦ 外部から動的に設定の変更が可能 • Manager Process ◦ iptablesの変更 ◦ デフォルトで動作する DNS resolver停止 ◦ 不通時のみ固定値を返却する DNS resolver ◦ 非同期でリクエスト送付
動作例1 : リクエストのバッファリング Offline 1 manager proxy 3. Buffers request
data app 1. Returns a dummy IP 2. Requests data Recover 2 manager envoy 1. Check real ip app 2. Request to target server 3. Return response data
動作例2 : 非同期でのリクエスト管理 request情報のハッシュ値を元に 同一リクエストかを判断
課題 • 既存の手法(iptables)の場合、ネットワーク制御の管理が煩雑 ◦ ネットワークの状態などに応じて、動的に制御を行いたい ◦ iptablesのデバッグが難しく、原因特定が難しい 要求機能 • ネットワークがない状況での名前解決は、ローカルマシン上で行う
• すべてのパケットリクエストを、ローカルマシンで動作する透過プロキシのポートへ 集約する • 透過プロキシが動作するポートからのリクエストのみ、外部へのリクエストを許可す る
今回の解決策 • XDPを利用することにより、 エッジデバイスでもパケット制御をプログラマブルに 行うことができるのではないか。 • 先行事例 ◦ Cilium :
Kubernetesで動作するプロキシ。パケット制御を eBPF&XDPを利用して行う。
XDPとは • ネットワークインタフェースをカーネルレベルでプログラマブルに記述 • C言語のプログラムをeBPFバイトコードにコンパイルできる • eBPFバイトコードを、ユーザランドからそのままロードできる https://medium.com/@fntlnz/load-xdp-programs-using-the-ip-iproute2-command-502043898263
XDPプログラム #define KBUILD_MODNAME "filter" #include <linux/bpf.h> #include <linux/if_ether.h> #include <linux/ip.h>
#include <linux/in.h> #include <linux/udp.h> // DNS resolverをポート54で動かす int dnsredirect (struct xdp_md *ctx) { void *data = (void *)(long)ctx->data; void *data_end = (void *)(long)ctx->data_end; struct ethhdr *eth = data; if ((void*)eth + sizeof(*eth) > data_end) { return XDP_PASS; } struct iphdr *ip = data + sizeof(*eth); if ((void*)ip + sizeof(*ip) > data_end) { return XDP_PASS; } if (ip->protocol == IPPROTO_UDP) { struct udphdr *udp = (void*)ip + sizeof(*ip); if ((void*)udp + sizeof(*udp) <= data_end) { if (udp->dest == ntohs(53)) { udp->dest = ntohs(54); } else if (udp->source == ntohs(54)) { udp->source = ntohs(53); } } } return XDP_PASS; } eBPF バイトコード 生成 verifier (検証) BPF XDP Kernel Land User Land 名前解決をport 54で行う
結果 • ネットワークがない状況での名前解決は、ローカルマシン上で行う • すべてのパケットリクエストを、ローカルマシンで動作する透過プロキシのポートへ 集約する • 透過プロキシが動作するポートからのリクエストのみ、外部へのリクエストを許可す る 動作確認済
動作確認済 動作確認済
評価 • 元々の目的である、iptablesによる制御の複雑度は下げることができた。 ◦ コードを元に、直感的に経路を把握できる ◦ パケット制御する関数を動的に変更できるので、ルールセットの定義が容易 • 原理的にiptablesよりも高速に動作するので、性能試験なども行いたい •
成熟段階の技術のため、今後より成熟していけばコントロールできる部分が増えて いくと予想される • 実際にプロダクトに取り込む場合は、今後のロードマップを確認しながら取り入れた ほうがよい。
今後したいこと • 実装した結果、利用できる関数も充実しており、 ユーザランドでの制御が困難な操作も行えるため、透過Proxy機能をXDPで実装 する手法を検討して実装したい ◦ パケットの解析を行い、リクエスト先に応じて利用する NICを変更する ◦ 名前解決をXDP内の制御のみで完結させる
• eBPFバイトコードをControl Planeから 配信する形式で動作できるかチェック
参照 A practical introduction to XDP https://linuxplumbersconf.org/event/2/contributions/71/attachments/17/9/presentati on-lpc2018-xdp-tutorial.pdf The eXpress
Data Path https://github.com/tohojo/xdp-paper/blob/master/xdp-the-express-data-path.pdf