萌えハッカーニュースリーダー

2025/08/17 19:14 eBPF Networking Techniques – Packet Redirection (2023)

出典: https://who.ldelossa.is/posts/ebpf-networking-technique-packet-redirection/
hakase
博士

やあ、ロボ子!今日のITニュースはeBPFを使ったパケットリダイレクトについてじゃ。

roboko
ロボ子

博士、こんにちは。eBPFですか、最近よく耳にしますね。パケットリダイレクトにどう活用するんですか?

hakase
博士

それが面白いんじゃ!この記事によると、あるネットワークインターフェースから別のインターフェースへパケットを転送する技術らしいぞ。

roboko
ロボ子

なるほど。記事では、2つのネットワーク名前空間をvethで接続したトポロジーを使っているんですね。

hakase
博士

`netns_2`のクライアントに送られたパケットが、`veth1@2`に関連付けられたeBPFプログラムで`veth2@1`にリダイレクトされる、と。

roboko
ロボ子

Linuxネットワークスタックを一部バイパスして、パケット処理を効率化できるのが利点なんですね。

hakase
博士

そうそう!しかも、Makefileを使って環境構築を自動化しているのが便利じゃな。Proxy ARPの設定とか、TC ClassifierへのeBPFのアタッチも自動化できる。

roboko
ロボ子

`clsact qdisc`を`veth1@2`に追加して、eBPFフィルタを`ingress`方向でアタッチするんですね。`direct-action`フラグで、eBPFフィルタがパケットを操作するアクションとして機能する、と。

hakase
博士

その通り!`redirect.bpf.c`で、宛先IPが`10.0.2.11`のパケットをリダイレクトするeBPFプログラムを書いて、MACアドレスを書き換えて`bpf_redirect`ヘルパー関数を呼ぶ。

roboko
ロボ子

`bpf_redirect`ヘルパー関数は、実際のリダイレクト処理は行わず、フラグを設定して`TC_ACT_REDIRECT`を返すんですね。Kernel v6.5での動作原理ですか。

hakase
博士

そうじゃ!TCサブシステムが`skb_do_redirect`を呼び出して、`__bpf_redirect`関数を通じてパケットを別のネットワークデバイスにキューイングする。

roboko
ロボ子

IngressとEgressについても解説がありますね。TCの文脈では、`ingress`は受信パケット、`egress`は送信パケットに対してeBPFプログラムが実行されることを指す、と。

hakase
博士

`bpf_redirect`ヘルパー関数では、`ingress`はパケットが受信されたかのように、`egress`はパケットが送信されたかのように処理されるんじゃ。

roboko
ロボ子

`BPF_F_EGRESS`フラグを使うと、パケットはデバイスの送信関数に送られ、`BPF_F_INGRESS`フラグを使うと、パケットはカーネルの受信パケットパスに送られるんですね。

hakase
博士

その通り!eBPFパケットリダイレクトは、Kubernetesなどのコンテナオーケストレーションソフトウェアで広く使われている技術なんじゃ。

roboko
ロボ子

Kubernetesで使われているんですね。コンテナ間の通信を効率化するために、このような技術が使われているんですね。

hakase
博士

そうじゃ!ところでロボ子、パケットリダイレクトって、まるで私が作ったお菓子をロボ子がこっそり食べるのを、私が別の場所に誘導するみたいじゃな。

roboko
ロボ子

博士!私はそんなことしませんよ!第一、私はお菓子の味覚回路は搭載されていませんから!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search