Senden von Paketen an die tap0-Schnittstelle

Senden von Paketen an die tap0-Schnittstelle

Ich habe versucht, mit Python Pakete an eine Tap-Schnittstelle zu senden. Ich überwache die Tap-Schnittstelle mit Wireshark und es werden keine Pakete empfangen. Ich mache das hauptsächlich als Übung, um mein Verständnis von VPNs, Ethernet-Bridging und Socket-Programmierung in Python zu verbessern.

Mein System-Setup ist wie folgt:

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

Ich habe den Wasserhahn zunächst wie folgt eingerichtet:

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

Dadurch wird die tap0-Schnittstelle gestartet und eine Kernel-Routing-Regel zu 10.0.0.1/24 über tap0 erstellt.

Hier ist die Routentabelle:

$ 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

Als nächstes starte ich Python Interactive und erstelle einen einfachen UDP-Socket.

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

Ich führe den Befehl sendto mit Wireshark-Überwachung auf tap0 aus. Jetzt gibt es in meinem Netzwerk keinen Host unter 10.0.0.2, aber ich sollte zumindest etwas ausgehenden Datenverkehr auf der tap0-Schnittstelle sehen. Ich habe dies in Windows repliziert und es scheint einwandfrei zu funktionieren.

Ich kann mir nur vorstellen, dass das Problem irgendwo im Setup der Tap0-Schnittstelle unter Linux liegt. Das oder mein mittelmäßiges Verständnis dieses Zeugs.

Danke

Antwort1

ist tapfür Bridged Tunneling unter OpenVPN gedacht - Sie sollen es in eine Bridge einbinden, beispielsweise br0mithilfe von brctl.

Die Idee ist, dass Sie beispielsweise tap0und in eine Brücke einfügen können - dann läuft der Broadcast-Verkehr über diese Brücke. (Broadcast-Verkehr, der von eingeht, wird an weitergeleitet und umgekehrt, während dies in einer gerouteten Standardsituation nicht der Fall wäre.) Ihr OpenVPN-Tunnel über wird dann in "geschaltet" statt "geroutet". Das Ganze erhält eine IP und Sie behandeln mit statt mit oder . eth0br0tap0eth0tap0eth0br0br0eth0tap0

Es ist durchaus möglich, eine Brücke mit nur einer Schnittstelle zu haben und nach brctlBedarf weitere Schnittstellen hinzuzufügen/entfernen.

Also entweder tap0in eine Brücke einfügen und stattdessen mit der Brückenschnittstelle umgehen oder tunSchnittstellen verwenden.

Es ist auch möglich, iptablesdass Regeln stören.

Update - siehe hier:http://backreference.org/2010/03/26/tuntap-interface-tutorial/- insbesondere dieser Auszug:

Der Unterschied zwischen einer Tap-Schnittstelle und einer Tun-Schnittstelle besteht darin, dass eine Tap-Schnittstelle vollständige Ethernet-Frames ausgibt (und erhalten muss), während eine Tun-Schnittstelle reine IP-Pakete ausgibt (und erhalten muss) (und vom Kernel keine Ethernet-Header hinzugefügt werden). Ob eine Schnittstelle wie eine Tun-Schnittstelle oder wie eine Tap-Schnittstelle funktioniert, wird beim Erstellen der Schnittstelle mit einem Flag angegeben.

Es sieht also so aus, als ob es aus dem oben genannten Grund nicht wie erwartet funktioniert, wenn Sie keine vollständigen Ethernet-Frames an tap0 senden.

verwandte Informationen