あるインターフェイスから着信パケットを読み取り、別のインターフェイスを介してUDPパケットとして送信するために使用されるtun/tapデバイスがあります。これを実装して、tun / tapインターフェイスに送信されるICMPパケットを読み取り、UDPを使用してリモートで取得することもできます。しかし、この問題は、入力インターフェイスのデフォルトゲートウェイをtun / tapデバイスに変更して、tun/tapからすべての着信データを読み取れるようにしようとすると発生します。これが行われると、ルーティングが適切でないため、UDPパケットを送信できません。
また、ソケット通信で「SO_BINDTODEVICE」オプションを試してみましたが、それでも機能しませんでした。tun / tapでwrite()メソッドを使用していないことに注意してください。read()関数を使用してデータを収集し、UDPソケット通信を介して送信しました。
私のアプローチが間違っているか、これを克服するための他の回避策があるかどうかを教えてください。ありがとう。
/********More Details********/
ありがとうロブ。
私が達成しようとしているのは、高遅延チャネルでのIPベースのヘッダー通信(ROHC)のシミュレーションです。
このために、4つの仮想マシンがあります。VM1は通常のデスクトップマシンです。VM2は、(VM1からの)tun / tapを使用してパケットを受け取り、VM4とのUDPベースの通信を行うゲートウェイです。VM3は、レイテンシー、エラー率などのパラメーターを設定できるチャネルです。VM4はWANに接続されています。VM1のユーザーは、通常どおりWANを参照できる必要があります。下の図をご覧ください。
IP Packets
|
| +------------------+ +--------------+ +----------------+
'---|eth1..... | | | | |
| | | | | | |
| tun/tap | | eth0|___|UDP Sock eth0|___
| | | | | | | | | |
| ..UDP Sock|_____|eth1 | | | | | |
| | | | | +tun/tap+ | '
+------------------+ +--------------+ +----------------+ WAN
VM2 VM3(Channel) VM4
アップデート:
Tommiに感謝します。あなたの解決策はうまくいきました。最終的なNATゲートウェイへの片道でUDPパケットを取得できました。しかし、私は今まで逆の働き方をすることができませんでした。iptablesを使用してマスカレードを有効にし、VM1でtuntapへのホストルートを設定しようとしましたが、機能しませんでした。これに関していくつか質問があります。1)VM4で、UDPデータを受信し、tun/tapに書き込みます。これは、カーネルによってWANにルーティングされます。しかし、着信パケットの場合、tun / tapを使用して再度読み取る必要がありますか?この場合、異なるスレッドで読み取りと書き込みを行う必要がありますか?UDPデータとしても転送する必要があるため、これを求めています。ここで何かが足りない場合はお知らせください。もう一度、あなたの助けに感謝します。