Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
XDPを利用したエッジデバイスでのネットワーク制御
Search
Tomoya Amachi
November 13, 2020
Technology
570
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
780
クラウド時代のセキュリティをふりかえる
tomoyamachi
1
1.2k
Integrating Service Mesh with Kubernetes-based connected vehicle platform
tomoyamachi
1
1.2k
Cloud Native Development Design Patterns
tomoyamachi
2
4k
Check Container Images with Original Rules@GoConference 2019 Autumn
tomoyamachi
2
3.7k
Dockerセキュリティ対策の現状と対策ツールの仕組み&使い方
tomoyamachi
2
1.9k
GAE FEのdeployストレスを軽減する10の方法
tomoyamachi
0
510
Other Decks in Technology
See All in Technology
検索技術知識0のエンジニアが広告検索システムを内製化して運用するまで
lycorptech_jp
PRO
0
170
AIQAのナレッジ構築について
qatonchan
1
130
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
180
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
130
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
370
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
230
害獣害虫を自動判別! ペストコントロール支援ビジネス成功のヒント【SORACOM Discovery 2026】
soracom
PRO
0
130
NYC Summit 2026 におけるAmazon Bedrock AgentCore のアップデート
ren8k
3
270
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
180
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
3
1.8k
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
Featured
See All Featured
A better future with KSS
kneath
240
18k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
30 Presentation Tips
portentint
PRO
1
360
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
430
ラッコキーワード サービス紹介資料
rakko
1
4.1M
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