マシンのユーザー空間から eth0 でリッスンしているアプリケーションに、あたかもリモート マシンから送信されたかのようにパケットを送信しようとしています。
適切なドキュメントが見つからないのは、TUN/TAP デバイスがネットワーク スタックの残りの部分とどのようにやり取りするかということです。パケットがリモート ホスト宛ての場合、eth0 に転送されますか? ローカルホスト宛てのパケットは、デフォルトでユーザー空間アプリケーションに転送されますか? Netfilter スタックに関連して、パケットはカーネルのどの段階で表示されますか?
この動作は十分に文書化されていないようです(http://openvpn.net/archive/openvpn-users/2005-05/msg00224.html、https://www.kernel.org/doc/Documentation/networking/tuntap.txt))。
答え1
tun タップデバイスは、データがイーサネットインターフェースに接続されたワイヤから来るのか、ユーザーランドアプリケーションから来るのかをカーネルが判断できないという点で、カーネルにとって同じように見えます。データが書き込まれると、物理インターフェースデバイス (例: eth0) ではなく、ユーザーランドアプリケーションに転送されます。
ip route
パケットが転送されるインターフェースは、通常どおり、またはで表示できるルーティング テーブルに基づきますnetstat -r
。これは、ローカルホスト宛てのパケットにも適用されます。
さらに、TUN/TAP インターフェースは、ルーティング テーブルに表示されるルートのインターフェースとしても使用できます。