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
770
クラウド時代のセキュリティをふりかえる
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
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
410
Tech-Verse 2026_Keynote
lycorptech_jp
PRO
0
130
組織における AI-DLC 実践
askul
0
300
SRE Lounge Hiroshimaへの招待
grimoh
0
150
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
140
最近評価が難しくなった
maroon8021
0
210
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
310
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.3k
そのハーネス、本当に境界になっていますか? AIエージェント時代の実行環境設計【MEGU-Meet #4】
cscengineer
PRO
0
110
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
100
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
140
金融の未来を考える / Thinking About the Future of Finance
ks91
PRO
0
150
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
660
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
We Have a Design System, Now What?
morganepeng
55
8.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
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