ubuntuusers.de

Fernwartung per VPN

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

gnude

Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

Hallo, ich habe eine Frage.... mir schwebt eine Fernwartungslösung auf freier Software vor, die möglichst einfach zu benutzen sein soll.

Die Situation ist folgende: Die Zentrale hat ein Netzwerk in dem mein Rechner eine feste IP Adresse hat. Verschiedene Filialen sind per VPN angebunden, haben aber eigene Adresskreise. Von der Filiale aus ist ein Zugriff auf das Netz der Zentrale möglich. Die Rechner in den Filialen bekommen per DHCP die Adressen zugewiesen, so das man nie sicher sein kann dort die gleichen vorzufinden.

Ich möchte gern auf den Filialen einen VNC Server starten, der dann eine Verbindung zu meinen Client aufbaut (von dem die IP Adresse ja bekannt ist) so das ich jederzeit auf die Rechner in den Filialen zugreifen kann.

Ich hätte die Möglichkeit den Filialen eine Datei zu senden, die dann auf dem Desktop abgelegt wird. Gibt es für sowas eine Lösung oder ein Idee wie man das angehen kann?

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5561

Wie identifiziertst du dann die Clients, wenn die immer andere IP-Adressen haben? Oder gibts da zumindest eindeutige DNS-Eintraege?

gnude schrieb:

Ich hätte die Möglichkeit den Filialen eine Datei zu senden, die dann auf dem Desktop abgelegt wird. Gibt es für sowas eine Lösung oder ein Idee wie man das angehen kann?

Da hilft die VNC nicht weiter, sondern eher SSH.

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1125

Eine Namensauflösung sollte es ja geben und so kannst du direkt über den Namen und die Domäne den Rechner erreichen officepc01.mydomain

Alternativ scanne das gewünschte Netz mit z.B. nmap bzw. Zenmap und du bekommst die IP-Adresse und den Namen der Rechner mit offenem VNC Port.

gnude

(Themenstarter)
Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

Bei Remmina gibt es den Punkt "VNC eingehende Verbindungen" und dort lauscht das Programm dann auf einen Port. Ich habe gedacht es gibt Server, die dann selbstständig die Verbindung aufbauen zum Client- Rechner wenn von diesem die IP bekannt ist.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11237

Wohnort: München

Nur um das mal vom Ablauf zusammenzufassen: Der Mitarbeiter, der Unterstützung braucht, klickt einen Starter auf dem Desktop an und darauf hin soll dein Rechner eine VNC-Verbindung zum VNC-Server auf dem Rechner des Mitarbeiters aufbauen?

Eine Idee wäre ein Dienst auf deinem Rechner, der auf eingehende HTTP-Anfragen reagiert und dann die Verbindung initiiert - dann könntest du auf dem Client einen GET-Request über eine .desktop-Datei, ein Browser-Lesezeichen oder ähnliches verfügbar zu machen:

1
2
#!/bin/bash
curl http://IP_DEIN_RECHNER:5000/vnc

Und auf deinem Rechner (mit installiertem Paket python3-flask) hast du dann z.B. eine vnc_connector.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python3
import subprocess
import sys
from concurrent.futures import ThreadPoolExecutor
from flask import Flask, request

executor = ThreadPoolExecutor()
app = Flask(__name__)
connections = set()

def open_vnc_client(addr):
    global connections
    if not addr in connections:
        connections.add(addr)
        cmd = ['/usr/local/bin/connect_vnc', addr]
        print("executing", " ".join(cmd))
        try:
            r = subprocess.check_output(cmd)
        except Exception as e:
            print("executing", " ".join(cmd), "failed:", repr(e), file=sys.stderr)
        try:
            connections.remove(addr)
        except KeyError: pass

@app.route('/vnc')
def init_vnc():
    executor.submit(open_vnc_client, request.remote_addr)
    return "ok", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, threaded=True)

Dann brauchst du noch ein ausführbarer Skript /usr/local/bin/connect_vnc (wenn du einen anderen Pfad willst, kannst du das im Code anpassen), das als erstes Argument die IP-Addresse des Gegenüber nimmt und die Verbindung aufbaut (du solltest einen SSH-Agent eingerichtet haben und dich mit einem Public Key am Gegenüber authentifizieren können - vgl. Gesicherte VNC-Verbindung über SSH), also z.B. rudimentär falls du dich mit dem Benutzer user am Client per SSH anmelden kannst:

1
2
#!/bin/bash
vncviewer -via "user@$1" localhost:0 

Das Python-Skript kannst ausführbar machen und dann z.B. aus einer Shell heraus so starten (natürlich kannst du dir dafür auch einen Starter basteln oder es als Hintergrunddienst in deiner Desktop-Sitzung einrichten):

./vnc_connector.py 

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5561

gnude schrieb:

wenn von diesem die IP bekannt ist.

Wenn die IPs bekannt sind, wo ist dann das Problem?

Und warum willst du per VNC eine Datei auf den Desktop transferieren? Ist dir das haendisch nicht zu muehsam?

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1125

sebix schrieb:

gnude schrieb:

wenn von diesem die IP bekannt ist.

Wenn die IPs bekannt sind, wo ist dann das Problem?

Es ist wohl nur die IP in der Zentrale bekannt.

gnude schrieb:

Bei Remmina gibt es den Punkt "VNC eingehende Verbindungen" und dort lauscht das Programm dann auf einen Port. Ich habe gedacht es gibt Server, die dann selbstständig die Verbindung aufbauen zum Client- Rechner wenn von diesem die IP bekannt ist.

Was du suchst ist: Reverse-VNC-Verbindung-ueber-SSH-Verbindung

Den Datei Transport kann man ja dann über vnc machen.

1. Alternative:

Der Hilfesuchende führt ein Skript aus mit ungefähr folgendem Inhalt:

ifconfig -a > info.txt 
mail -s "test" myname@mydomain.de < info.txt

Das heißt du bekommst seine IP Adresse via e-Mail. Quelle: Funktionstest

2. Alternative

Der Hilfesuchende führt ein Skript aus mit ungefähr folgendem Inhalt:

ifconfig -a | nc 127.0.0.1 8080

Das heißt du bekommst seine IP Adresse über den Port 8080 den du wie folgt abhörst:

nc -l 8080

Quelle: Simpler-Dateitransfer

Antworten |