tap0インターフェースにパケットを送信する

tap0インターフェースにパケットを送信する

私は Python を使用して、TAP インターフェイスにパケットを送信しようとしています。Wireshark を使用して TAP インターフェイスを監視していますが、パケットは受信されていません。これは主に、VPN、イーサネット ブリッジング、および Python でのソケット プログラミングの理解を深めるための練習として行っています。

私のシステム設定は次のとおりです。

Ubuntu Desktop 11.10
Python 2.7
eth0 ip: 192.168.1.6
tap0 ip: 10.0.0.1

まず、タップを次のように設定します。

sudo openvpn --mktun --dev tap0
sudo ifconfig tap0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 promisc up

これにより、tap0 インターフェイスが起動し、tap0 経由で 10.0.0.1/24 へのカーネル ルーティング ルールが作成されます。

ルートテーブルは次のとおりです。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 tap0
192.168.1.6     *               255.255.255.0   U     1      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

次に、Python Interactive を起動し、単純な UDP ソケットを作成します。

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto('helloworld',('10.0.0.2',12345))

私は、tap0 で Wireshark モニタリングを使用して sendto コマンドを実行します。現在、ネットワーク上の 10.0.0.2 にホストはありませんが、少なくとも tap0 インターフェイスで送信トラフィックがいくつか表示されるはずです。これを Windows でも再現しましたが、問題なく動作するようです。

問題は Linux の tap0 インターフェイスの設定のどこかにあるとしか考えられません。あるいは、このことに関する私の理解が不十分なのかもしれません。

ありがとう

答え1

は、OpenVPN でのブリッジ トンネリングを目的としています。 などを使用してtap、これをブリッジに接続する必要があります。 br0brctl

この考え方は、たとえばtap0と をブリッジに配置できるというものです。すると、ブロードキャスト トラフィックがこのブリッジを通過します。( から入ってくるブロードキャスト トラフィックは に転送され、その逆も行われますが、ルーティングされた標準的な状況では転送されません。) 経由の OpenVPN トンネルはに「ルーティング」されるのではなく、 に「切り替え」られます。 全体がIP を取得し、またはの代わりに を処理します。 eth0br0tap0eth0tap0eth0br0br0eth0tap0

インターフェースを 1 つだけ持つブリッジを作成し、brctl必要に応じてインターフェースを追加/削除することも可能です。

したがって、tap0ブリッジに入れてブリッジ インターフェイスを処理するか、tunインターフェイスを使用します。

iptablesルールが干渉している 可能性もあります。

更新 - こちらをご覧ください:http://backreference.org/2010/03/26/tuntap-interface-tutorial/- 特にこの抜粋:

タップ インターフェイスと tun インターフェイスの違いは、タップ インターフェイスは完全なイーサネット フレームを出力 (および提供) するのに対し、tun インターフェイスは生の IP パケットを出力 (および提供) する (カーネルによってイーサネット ヘッダーが追加されない) ことです。インターフェイスが tun インターフェイスのように機能するか、タップ インターフェイスのように機能するかは、インターフェイスの作成時にフラグで指定します。

したがって、完全なイーサネット フレームを tap0 に送信しないと、上記の理由により期待どおりに動作しないようです。

関連情報