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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.2k
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
210
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
260
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.2k
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
120
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
280
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.3k
自律型AIエージェントは何を破壊するのか
kojira
0
120
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
310
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
190
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
580
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.8k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Making Projects Easy
brettharned
120
6.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
What's in a price? How to price your products and services
michaelherold
247
13k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
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