VPN-Verbindung herstellen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    VPN-Verbindung herstellen

    Hallo Leute,

    ist es machbar, mittels einem VB.Net bzw. C# Programm eine VPN Verbindung zwischen 2 Computern herzustellen,
    die keiner Freigabe von Ports im Router bedarf?

    Momentan arbeite ich mit TeamViewer, da dabei eben keine Portfreigaben benötigt werden -
    Allerdings benötige ich nun eine eigene Anwendung, die neben der VPN Verbindung auch noch einige Netzwerkrouten und Ähnliches automatisch einrichtet.

    Es geht dabei um eine Fernwartungslösung für SPS-Steuerungen,
    für die keine Einstellungen im Netzwerk der Firma vorgenommen werden müssen, da dies bei den meisten Unternehmen eher ungern gemacht wird.

    Über Antworten würde ich mich wirklich sehr freuen!

    Viele Grüße,
    JoRu1407

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JoRu1407“ ()

    JoRu1407 schrieb:

    ist es machbar, mittels einem VB.Net bzw. C# Programm eine VPN Verbindung zwischen 2 Computern herzustellen,
    die keiner Freigabe von Ports im Router bedarf?

    Nein, auf direktem Wege ist das nicht möglich.

    JoRu1407 schrieb:

    TeamViewer, da dabei eben keine Portfreigaben benötigt werden

    TeamViewer benötigt dafür einen externen Server, der die nötigen Portfreigaben hat. Erkundige dich nach "UDP Hole Punching". Das zu implementieren ist nicht schwer, sodass deine Kunden nur eine Datei ausführen müssen. Diese gibt dir mit dem erwähnten Verfahren einen Port frei, über den du frei verfügen kannst.

    Es gibt auch noch VNC-Connectback, bei dem du nur beim Verbindungsaufbau der Server bist (und "zu Hause" einen freien Port brauchst) und danach zum Client wirst (zur Administration). Die c't hat mal darüber berichtet und stellt sogar eine dynamisch generierte ausführbare Datei bereit.
    Gruß
    hal2000
    Hallo hal2000, vielen Dank für deine Antwort!

    hal2000 schrieb:

    Erkundige dich nach "UDP Hole Punching". Das zu implementieren ist nicht schwer, sodass deine Kunden nur eine Datei ausführen müssen. Diese gibt dir mit dem erwähnten Verfahren einen Port frei, über den du frei verfügen kannst.

    Das hört sich zwar interessant an, aber das Problem besteht eher darin, dass die Firmen keine Ports freigeben wollen.

    hal2000 schrieb:

    Es gibt auch noch VNC-Connectback, bei dem du nur beim Verbindungsaufbau der Server bist (und "zu Hause" einen freien Port brauchst) und danach zum Client wirst (zur Administration).

    Auch das ist leider nicht möglich, da Maschinen von den verschiedensten Standorten aus ferngewartet werden.


    Wäre es möglich, einen Server mit entsprechenden Portfreigaben selber aufzusetzen, um ein ähnliches System wie TeamViewer aufzubauen oder ist das zu aufwendig?
    Ich würde auch gerne auf TeamViewer oder andere Lösungen setzen (wir besitzen bereits ne kommerzielle TeamViewer Lizenz), allerdings habe ich noch kein solches System gefunden, dass eine vernünftige API oder zumindest eine Skript-/Konsolenversion anbietet.

    Kennt Ihr diesbezüglich vllt. was?

    Vielen Dank vorab schon mal!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JoRu1407“ ()

    JoRu1407 schrieb:

    Das hört sich zwar interessant an, aber das Problem besteht eher darin, dass die Firmen keine Ports freigeben wollen.

    Das müssen sie auch nicht - du bohrst dir selbst ein (vorübergehendes) Loch in ihre Firewall. Wenn deine Kunden TeamViewer erlauben und denken, dass ihre Firewall damit dicht bleibt, sind sie ... naja... unwissend. Ein Remotezugriff ist auf Systeme hinter einer undurchlässigen Firewall nicht möglich, auch nicht per TeamViewer. Die Alternative wäre persönliche Anwesenheit bei jedem Kunden.
    Gruß
    hal2000

    hal2000 schrieb:

    auch nicht per TeamViewer

    Gibt es da wirklich je nach Firewallkonfiguration ebenfalls Probleme?
    Bisher hats nämlich mit TeamViewer immer funktioniert...

    Ich werde mir jetzt mal ein bisschen was zum Thema UDP Hole Punching anschauen.
    Wenn das "Hole gepuncht" ist, wie baue ich dann meine VPN-Verbindung auf? Mit Widnwos Komponenten?

    JoRu1407 schrieb:

    Gibt es da wirklich je nach Firewallkonfiguration ebenfalls Probleme?
    Bisher hats nämlich mit TeamViewer immer funktioniert...
    TV funktioniert, sobald eine Internetverbindung besteht. Das liegt daran, dass TV besagtes Verfahren benutzt, um die Firewall für einen Tunnel zu öffnen.

    JoRu1407 schrieb:

    Wenn das "Hole gepuncht" ist, wie baue ich dann meine VPN-Verbindung auf? Mit Widnwos Komponenten?

    Ganz so einfach ist das nicht. Du kannst das genannte Verfahren nicht mit VPN kombinieren, weil VPN TCP-Ports benötigt.

    Ich habe bisher nicht wirklich verstanden, was du überhaupt willst - nur, dass du auf ein gesichertes Netzwerk zugreifen und irgendwelche Skripte ausführen willst. Und dann?
    Gruß
    hal2000
    Hallo hal2000,

    ich habe bisher wirklich ein bisschen in Rätseln gesprochen :D

    Also... Die Firma eines Bekannten stellt Maschinensteuerungen (SPS) für Folienkonfektionsmaschinen her.
    Um bei Softwarefehlern nicht immer zum Kunden reisen zu müssen, soll nun eine, sowohl für die Kunden als auch für die Firma einfache Fernwartungslösung her - Und darum soll ich mich kümmern.

    Das eigentliche Problem, was es zu lösen gibt, ist, dass die Kunden in Ihrem Router nicht immer Ports bzw. VPN-Passtrough für einen dahinterliegenden VPN Router freigeben wollen.
    Es ist so, dass wir nun für jede Maschine ein eigenständiges Netzwerk mittels eines einfachen Routers aufbauen wollen (wird sowieso benötigt // IP Adressenbereich 10.0.0.X).
    Innerhalb dieses Netzwerkes hängen dann alle möglichen Ethernetkomponenten, auf die aus der Ferne zugegriffen werden soll. Außerdem hängt in diesem Netzwerk momentan eben ein kleiner mini XP Rechner,
    auf dem TeamViewer installiert und Routing aktiviert ist. Das Maschineninterne Netzwerk muss dann nur mit einem LAN-Kabel mit dem Router der Firma verbunden werden, um Internetzugriff zu erlangen.

    Wir stellen dann von unserem Büro aus eine TeamViewer VPN Verbindung mit dem mini XP Rechner im Maschineninternen Netzwerk her.
    Auf dem Computer in unserem Büro wird dann folgende Netwzerkroute eingerichtet:
    route add 10.0.0.0 mask 255.255.255.0 <TeamViewerVPNip>

    Sobald diese Route eingerichtet ist, können wir dann von unserem Büro aus mit den normalen IP Adressen der Geräte im internen Netzwerk der Maschine von außen auf diese Geräte zugreifen -
    Ohne in der Firewall oder dem Router des Kunden irgendwelche Portforwardings eingerichtet zu haben.

    Hier einmal eine kleine Grafik zur Veranschaulichung:


    Ich hoffe, ich konnte das jetzt einigermaßen verständlich rüberbringen :D


    Jetzt möchte ich allerdings von TeamViewer weg, da es dafür keine Schnittstelle gibt und obiges Vorgehen durch eine eigene Anwendung automatisiert werden soll.
    Ich suche also nach einer Alternative zu TeamViewer - Entweder selber entwickelt oder ein anderes Produkt. :)

    JoRu1407 schrieb:

    Ich hoffe, ich konnte das jetzt einigermaßen verständlich rüberbringen

    Ja, jetzt ist mir klar, worum es geht. Danke :)

    JoRu1407 schrieb:

    Das eigentliche Problem, was es zu lösen gibt, ist, dass die Kunden in Ihrem Router nicht immer Ports bzw. VPN-Passtrough für einen dahinterliegenden VPN Router freigeben wollen.

    Dein größtes Problem ist, dass du keine Verbindung zum Remotehost (MiniXP) herstellen kannst. Außerdem kannst du auf MiniXP keine Aktionen manuell ausführen. Diese beiden Einschränkungen machen die Sache kompliziert. Ich könnte mir aber folgende Lösung vorstellen:

    Eine Anwendung auf dem MiniXP hält eine permanente Verbindung zu einem Server. Dieser dient als Vermittler zwischen allen MiniXPs und dem Administratorrechner. Der Server unterhält also ein Verzeichnis aller erreichbaren Instanzen und kann auch mit diesen kommunizieren. Der Administrator stellt eine Verbindung zum Vermittlungsserver her und baut darüber einen Tunnel zum passenden MiniXP auf. Wenn die Anwendung auf dem MiniXP weitere Ports öffnet (auf localhost), wird eine Verbindung mit OpenVPN möglich, die über die aufgebaute Verbindung weitergereicht wird. Das könnte so aussehen:

    Maschinennetzwerk <--> MiniXP (OpenVPN-Server, TunnelClient) <-- NAT-Router --> Vermittlungsserver <--> Admin-Rechner (TunnelClient, OpenVPN-Client)

    Ich würde OpenVPN benutzen, weil dabei nur ein Port benötigt wird. IPSec braucht schon mindestens zwei, sodass deine Anwendung die Datenströme in den Tunnel multiplexen muss. Das macht das Ganze nur unnötig kompliziert. Du brauchst also eine Anwendung, die wie SSH unter Linux Ports über einen Tunnel forwarden kann und gleichzeitig wie TeamViewer einen Vermittlungsserver verwendet, um einen NAT-Router zu umgehen. Das ist ambitioniert, aber machbar. In einem zweiten Stadium könnte man das Hole Punching integrieren, sodass der Vermittlungsserver nur noch für den Verbindungsaufbau benötigt wird.
    Gruß
    hal2000
    Hallo hal2000,

    ich denke, ich werde auf jeden Fall auf OpenVPN setzen,
    da sich dafür entsprechende Server einrichten lassen (sollen), sodass sich darüber 2 Clients miteinander verbinden können.

    Was die eigene Oberfläche angeht, kann man glaube ich mithilfe des Management Interfaces von OpenVPN
    openvpn.net/index.php/open-sou…management-interface.html
    relativ easy die Verbindung über eine eigene Applikation aufbauen - Hat damit vllt. schon jemand Erfahrungen?

    JoRu1407 schrieb:

    ich denke, ich werde auf jeden Fall auf OpenVPN setzen,
    da sich dafür entsprechende Server einrichten lassen (sollen), sodass sich darüber 2 Clients miteinander verbinden können.

    Jetzt, wo du es sagst, habe ich nochmal danach gesucht. OpenVPN lässt sich scheinbar so konfigurieren, dass ein Relay-Server die Vermittlung übernimmt. Dann hast du aber noch das Problem, dass die Verbindung vom MiniXP aus zum Relay hergestellt werden muss, was wieder Anwesenheit erfordert. Man könnte natürlich auch einen zeitgesteuerten Job anlegen, der die Verbindung wiederherstellt, wenn sie verloren gegangen ist. Da ich bisher wenig mit OpenVPN gearbeitet habe, kann ich dir bei der Konfiguration nicht viel weiterhelfen. Die Dokumentation ist aber nicht allzu kompliziert, sollte also gehen.
    Gruß
    hal2000