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
580
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
790
クラウド時代のセキュリティをふりかえる
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.7k
Dockerセキュリティ対策の現状と対策ツールの仕組み&使い方
tomoyamachi
2
2k
GAE FEのdeployストレスを軽減する10の方法
tomoyamachi
0
510
Other Decks in Technology
See All in Technology
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
2
530
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
560
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
170
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
250
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
160
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
840
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
290
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
330
関東Kaggler会発表資料
takoi
1
260
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
Digitization部 紹介資料
sansan33
PRO
2
7.7k
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.5k
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Making Projects Easy
brettharned
120
6.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
450
Between Models and Reality
mayunak
4
400
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Believing is Seeing
oripsolob
1
190
First, design no harm
axbom
PRO
2
1.3k
From π to Pie charts
rasagy
0
300
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