パケットがカーネルを通過する方法

パケットがカーネルを通過する方法

私は、パケットのフィルタリング/管理に関してカーネル内で何が起こっているのか実際には知りませんでした。ユーザースペース(カーネルスペースサブシステムの変更)やカーネルスペースから直接パケットに対して操作を実行できるさまざまなツールがあります。

各ツールと他のツールのやり取りやそのツールの機能を文書化できる場所はありますか?カーネルコードを読むほど技術的でない人のために何が起こっているのかを示す図がどこかにあるべきだと思います。

私の例は次のとおりです。

私のネットワークインターフェイスの1つがパケットを受信し、次のような結果を得ました。

  • 極細糸束
  • iptables
  • IPv4サブシステム(ルーティング)
  • IPV
  • 電子BPF

さて、私はUFWがiptablesのフロントエンドであり、iptablesがNetfilerのフロントエンドであることを知っています。今私たちはカーネルスペースにあるので、ツールはNetfiler、IPV、IPv4、eBPFです。

同様に、NetfilterとIPv4サブシステム間の相互作用は非常に古い(ひどい)サブシステムであるため、簡単に見つけることができるので、文書が不足しているのは奇妙です。この図は相互作用の概要です。 ここに画像の説明を入力してください。

しかし、IPVとeBPFはどうですか?これら2つのパケットがカーネルにあるときに、カーネルサブシステムがパケットに対して操作を実行する実際の順序は何ですか?

私はいつも中に入り、他の人が理解するのを助けようとする素晴らしい人を探しています。http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html

しかし、これはより正式な方法で文書化されるべきではありませんか?私はここでこれらのサブモジュールがどのようにやり取りするかについての説明を探しているわけではありません。検索で直接見つけることができることを知っています。私の質問はもう少し一般的です。なぜこれらのカーネルサブシステム内で何が起こっているのか実際に説明しようとする公式文書がないのでしょうか。私が知らないところに記録されているのでしょうか?これらのツールを説明しない理由はありますか?

私が理解していない場合は謝罪します。私は今こういうことを学び始めました。

ベストアンサー1

私が知っているLinuxネットワークスタックを使用しているほとんどの人は、以下の図を使用しています。ウィキペディアでCC BY-SA 3.0に準拠してライセンスを取得)

ここに画像の説明を入力してください。

ご覧のとおり、netfilterフックに加えて、XFRM処理ポイントと一部eBPFフックポイント。 tc eBPF プログラムは、qdiscs の開始と終了の一部として実行されます。 XDPおよびtc(ソケットレベルなど)以外のBPFネットワークフックポイントは、ここでは文書化されていません。

私が知っている限り、IPVSはnetfilterの上に構築されているので、ここに直接は表示されません。

おすすめ記事