ファイル記述子で作成されたパケットをTapデバイスから受信します。

ファイル記述子で作成されたパケットをTapデバイスから受信します。

ポイントアンドクリックデバイスの使い方を完全に理解するのが困難です。

Tapデバイスを作成して実行してみました。ユーザー空間プログラムはファイル記述子を開き、デバイスに送信されたイーサネットフレームを受信します。 Tapデバイスは10.254.0.1/24のIPアドレスとネットマスクを取得します。
今まではそんなに良くなった。echo "test" | netcat -uq0 10.254.0.2 12345プログラムがパケットを受信し、異なる通信方法を介して別のシステムに転送するプログラムを作成しました。

しかし、反対のアプローチはまったく機能しません。
ユーザ空間プログラムは、有効なイーサネットフレームをタップデバイスのファイル記述子に書き込む。しかしAはnetcat -ul 12345何も受けなかった。と同じですsocat。また、ブリッジを作成してここにタブデバイスを追加してみましたが、やはり機能しませんでした。

WiresharkでTapデバイスを監視すると、すべてのパケットが表示され、すべてのパケットが正しいため混乱します。コマンドの
カウンタは、ユーザ空間プログラムがTapデバイスに書き込むフレームごとにインクリメントされます。これでIPパケットのみが処理されるため、ARPは無効になります。tx packets: XYifconfig
ip link set dev tap0 arp off

私の設定は次のように想像できます。

         host1              (some channel)               host2
netcat --> tap0 --> prog   --------------->    prog  -->  tap0  -->  netcat
<=============== works ========================================>| does not work

Tapデバイスの「もう一方の端」でパケットを受信する方法を知っていますか?それともどこでもっと読むことができますか?

編集2:修正が削除されました。 (間違ったテストの結果、間違った結論が出ました。チェックサムに問題がありました。パケットは有効ですが受信されません。)

ベストアンサー1

いくつかのさらなる調査が原因をnetstat -s見つけるのに役立ちました。逆方向パスフィルタが私のパケットを削除していました。 (まだ理由を完全に理解していない...)

操作するには、タブデバイスのフィルタを緩和モードに設定します。

sudo sysctl -w net.ipv4.conf.tap0.rp_filter=2

(これを設定して無効にします0いいえ私のために動作します。 )

おすすめ記事