web-dev-qa-db-ja.com

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インタラクティブを開始し、単純な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インターフェースのセットアップのどこかにあるとしか思えません。それか、このことについての私の平凡な理解。

ありがとう

2
Pete

tapは、OpenVPNでのブリッジトンネリング用です。brctlを使用してbr0などのブリッジにジャンクションすることになっています。

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

インターフェースが1つしかないブリッジを作成し、必要に応じてbrctlを使用してインターフェースを追加/削除することは完全に可能です。

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

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

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

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

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

2
LawrenceC