Hallo,
hab folgendes Problem:
ich würde gerne einen virtuellen Netzwerkadapter mit C softwaremäßig
implementieren. Ich hab irgendwo gelesen, dass es möglich ist, Daten von
einem virtuellen Netzwerkadapter mithilfe einer VPN-Software zu
verschlüsseln und einer physikalischen Netzwerkkarte zu übergeben. Hat
jemand Erfahrung wie eine solche VPN-Software aufgebaut ist, bzw. Ideen
wie man sowas programmieren könnte? Mein Ziel ist es IP-Pakete zu
verschicken ohne Ethernet-Rahmen, sondern mit einem eigenen Schicht
2-Rahmen/Protokoll.
Könnte das vlt. auch mit WinSock funktionieren bzw. mit einer
Open-Socket-Programmieren (gibt es sowas?)
Vlt. auch eine Art Windows-/Linus-Treiber-Programmierung?
Über Ideen und Anregungen wäre ich sehr erfreut;)
Schönes WE euch!
Ist sowas vlt. auch unter Windows möglich? Die Hardware, die ich
verwende, verwendet wiederum Windows-kompatible Software bzw. Quellcode
der nur Windows-spezifisch ist (Zum Beispiel wird die WinAPI teilw.
verwendet).
Kann mir da jmd. helfen?
Vielen Dank
Iceman schrieb:
> Mein Ziel ist es IP-Pakete zu> verschicken ohne Ethernet-Rahmen, sondern mit einem eigenen Schicht> 2-Rahmen/Protokoll.> [...] Linus [...]
Unter Linux gibts tun/tap, damit kannst Du virtuelle Netzwerkadapter
erzeugen, die Daten landen dann in Deinem Programm. Handhabung ist
einfach, Dokumentation in den Manual Pages ausreichend. Wird IIRR von
manchen VPN-Implementierungen verwendet.
Stephan
Danke Stephan für die Info;)
Ich muss mich nochmal in meiner Fragestellung korrigieren. Es spielt bei
meiner Übertragung keine Rolle, ob es sich um IP-Pakete handelt. Die
Technologie sollte jedoch kompatibel zu Ethernet (802.3 oder 802.11)
sein.
Dazu müsste ich dann das TAP verwenden. Kannst du OpenVPN empfehlen? Da
soll das tun/tap schon dabei sein?
Viele Grüße
Iceman schrieb:
> Dazu müsste ich dann das TAP verwenden.
Jup.
> Kannst du OpenVPN empfehlen? Da> soll das tun/tap schon dabei sein?
"tun/tap schon dabei sein" schön&gut, OpenVPN ist ja auch nur ne
Software für einen gaaanz besonderen Zweck. Das heisst:
- Hinter "tun"/"tap" verstecken sich im Prinzip Treiber, die der
Linux-Kernel zur Verfügung stellt. Was Du/er/sie/es damit anfänsgt
bleibt Dir/ihm/ihr/ihnen überlassen.
- OpenVPN nutzt tap zur Übertragung von Datenpaketen gemäß des
GRE-Protokolls. Das ist eine mögliche Anwendung des tap-Devices. Wie
auch immer man griffig auf Deutsch sagen würde, im englischen hiesse es
in etwa "OpenVPN complements the kernel-side tap device with user-space
functionality to build up a virtual private network between two (or
more) peers". (Das Wort des Tages ist hier `complements'). Sprich: tap
ist ein generischer (d.h. allgemein verwendbarer kernelseitiger
Gerätetreiber) und OpenVPN eine Userspace-Anwendung, die dieses Gerät in
spezieller Weise benutzt und dabei auf ganz bestimmten Semantiken dieses
Gerätes aufbaut.
In diesem Sinne bietet tap nur eine (von vielen) Möglichkeiten, quasi
beliebige Datenpakete zu übertragen; tap ist halt IIRR auf
Ethernet-Frames als Layer-X-Protokoll festgenagelt.
Wie das ganze unter Windows aussieht? Bestimmt ganz anders, keine Ahnung
:-)
Stephan
Hallo Stephan,
das Winsock Beispiel konnt ich problemlos runterladen;) Danke dafür.
Allerdings wird mir das wahrscheinlilch nicht so sehr weiterhelfen, wenn
ich doch unter Linux den virtuellen Netzwerkadapter programmiere... Ich
werd mal sehen wie sich das entwickelt. Hast du noch
Infos/Tools/Literatur über die tun/tap Geschichte, die mir weiterhelfen
könnten?
Danke im Voraus
Gruss
Hallo zusammen,
Ich bin beim stöbern auf diesen Thread gestoßen und habe eigentlich ein
ganz ähnliches Problem wie Iceman. Um das Problem zu verdeutlichen habe
ich schon mal ein Blockbild angehangen.
Ich möchte ebenfalls über Ethernet/IP von außen auf ein privates
(drahtloses) Netzwerk mit eigenem Protokollstapel zugreifen. Dieses
Netzwerk ist per USB-Adapter mit meinem Rechner (Linux) verbunden. Über
ein zu erstellendes C-Programm soll nun eine Kommunikation zwischen
eigenem drahtlosen Netzwerk und dem virtuellen Netzwerkadapter (VTUN)
hergestellt werden (Übergabe der Nutzdaten, Hinzufügen/Entfernen der
entsprechen Header etc.).
Meine Fragen sind nun eigentlich, ob dieser Denkansatz und die
Verwendung eines virtuellen Netzwerkadapters richtig ist, und ob die
Kommunikation und das Weiterleiten der Pakete zwischen virtueller und
realer Netzwerkkarte automatisch (durch den Kernel oder VTun?!)
übernommen wird?
Vielen Dank schon mal.
Christoph P. schrieb:
> ob die> Kommunikation und das Weiterleiten der Pakete zwischen virtueller und> realer Netzwerkkarte automatisch (durch den Kernel oder VTun?!)> übernommen wird?
Ja, müssen halt entsprechende Routes, NAT rules, etc eingestellt sein.
Christoph P. schrieb:
> ob dieser Denkansatz und die> Verwendung eines virtuellen Netzwerkadapters richtig ist
Eigentlich nicht. Was du willst ist eigentlich ein Kernel-Treiber der
dein USB-Gerät als Netzwerk-Device verfügbar macht. Dein Ansatz kopiert
die Daten erstmal über Tun/Tap vom Kernel- in den Userspace, nur damit
der "Treiber" dort es wieder zurück, über die USB-Devicenodes, in den
Kernel-Space verschiebt.
Wenn du das USB-Device selber entwickelst: Mal an CDC-Ethernet gedacht?
Hallo Ernst und danke erstmal für die aufschlussreiche Antwort.
Ich hatte im Grunde auch schon die Ahnung, dass mein Weg etwas
umständlich ist und es evtl. andere Umsetzungsmöglichkeiten gibt.
CDC Ethernet kannte ich noch nicht, werde ich mir am Montag aber
gleichmal genauer anschauen und mich dann zur gegebenen Zeit
zurückmelden.
Schönes Wochenende noch!
Hallo,
Ich habe mir CDC Ethernet mal angeschaut. Da es eigentlich nicht
angedacht ist, die USB-Firmware bzw. den Stack anzupassen (und um CDC
Ethernet zu erweitern), ist das wohl nicht ganz der passende
Ansatzpunkt.
Zweite Idee war folgende:
Zwar kann ich wohl auch von Haus aus dem Linux-Kernel sagen, dass er
meinem USB-Gerät eine IP-Adresse geben soll und als Netzwerkgerät
einhängt, müsste dann aber auch in diesem Fall wieder die
Geräte-Firmware um einen IP-Stack erweitern. Hm, da beißt sich die Katze
wohl ein bisschen in den Schwanz.
Gibt es keine reine PC-seitige Softwarelösung?