Mounten eines Dateisystems über das Internet

10

Ich habe eine Webanwendung erstellt, die auf einem virtuellen Server für einen meiner Kunden ausgeführt wird. Es enthält die Möglichkeit, Dateien hochzuladen, diese Dateien möchten sie jedoch jetzt auf einem Server in ihrem Büro speichern.

Der einfachste Weg, dies zu tun, besteht darin, das Dateisystem über das Internet direkt auf dem virtuellen Server bereitzustellen. Ich habe Erfahrung mit dem Mounten von NFS über ein internes Netzwerk, bin mir jedoch nicht sicher, ob dies in diesem Szenario funktionieren würde.

Irgendwelche Gedanken? Ich kann immer neue Software schreiben, um die Dateien zu übertragen, aber dies wäre eine einfache Lösung!

Hinweis: Der Server im Büro ist ein Ubuntu 12-Server, der auf einem virtuellen Server in einer Windows Hyper-V-Umgebung ausgeführt wird. Das VPS mit der Web-App ist Ubuntu 11.04

Ben Holness
quelle
Ist die Sicherheit ein Problem für diese Dateien?
Adrian Cornish
rsync via cron job.
Ignacio Vazquez-Abrams
@AdrianCornish - nicht wirklich, obwohl eine sichere Lösung bevorzugt würde.

Antworten:

12

Noch hat niemand sshfs erwähnt . Wenn Sie sich in einer modernen Linux-Distribution befinden und SSH-Zugriff auf den Remote-Host haben, ist dies so einfach wie:

sshfs user@hostname:/remote/directory /local/directory

Die Leistung ist durchaus akzeptabel (aber bei weitem nicht so schnell wie eine gestreamte Synchronisierung wie rsync, wenn Sie das gesamte Verzeichnis benötigen).

Andy Ross
quelle
Dies scheint die bisher beste Lösung zu sein. In den häufig gestellten Fragen heißt es sogar: "Ressourcen können über langsame und unzuverlässige (entfernte) Verbindungen bereitgestellt werden." Eine andere Webseite sagt mir, dass "sshfs -o Server wieder verbinden: / path / to / mount" automatisch wieder eine Verbindung herstellen wird, wenn die Verbindung unterbrochen wird.
3

NFS ist von Natur aus unsicher. Es wäre eine sehr schlechte Wahl, um eine Verbindung über das Internet herzustellen.

Ich mag den Beitrag, in dem rsync erwähnt wird. Anstatt cron zum Auslösen der Übertragung zu verwenden, würde ich hoffen, dass Sie den rsync-Job einfach über Ihren Code ausführen können, der den Datei-Upload verwaltet.

Wenn der Upload abgeschlossen ist, synchronisieren Sie die Datei mit ihrem Server.

Ich würde erwarten, dass Sie für die Übertragung eine sichere Verbindung zu ihrem Server herstellen müssen.

Wenn Sie möchten, können Sie die eingehenden Dateien zur Übertragung in eine Liste einfügen, die Namen nach dem erfolgreichen Kopieren entfernen und sich eine Failover-Funktion geben, falls etwas mit der Verbindung passiert.

Wie bereits jemand anderes betont hat, ist rsync für die Verarbeitung von Dateigruppen oder einer Hierarchie (danke, Rechtschreibprüfung) ausgelegt, sodass dies nicht so schwer zu erreichen ist.


quelle
1
rsync hat keine Probleme mit SSH als Transport.
Ignacio Vazquez-Abrams
Die Web-App speichert die Dateien bereits auf dem lokalen Server und verweist dort auf sie. Auf dem lokalen Server ist kein Speicherplatz vorhanden, daher müssen sie nach der Übertragung entfernt werden. Dies bedeutet, dass neuer Code geschrieben wird. Daher suche ich nach Möglichkeit zuerst nach einer bereitgestellten Lösung.
1

NFS kann von Natur aus unsicher sein, aber das ist nicht die Schuld des Dienstes. Telnet und FTP sind ebenfalls von Natur aus unsicher, werden jedoch seit Jahrzehnten im offenen Internet verwendet. Wenn ein verschlüsselter VPN-Tunnel eingerichtet wird, ist das Fehlen einer NFS-Verschlüsselung irrelevant.

Auch wenn eine Firewall so konfiguriert ist, dass nur eine bestimmte Remote-Host-Adresse eine Verbindung zum NFS-Mountpoint herstellen kann, ist eine reine NFS-Verbindung größtenteils vor Hacking geschützt, mit Ausnahme von Drei-Buchstaben-Agenturen, die den Internetverkehr abhören und auf die eine leistungsstarke Entschlüsselung zugreifen kann Knacken Sie trotzdem Ihre verschlüsselten Remoteverbindungen.

Ich sehe, dass einige Versionen von NFS standardmäßig UDP verwenden, was wahrscheinlich auf die Probleme mit der Internetzuverlässigkeit zurückzuführen ist. UDP-Pakete können verloren gehen, wenn die Verbindung überlastet ist und keine erneute Übertragung automatisch versucht wird. Wenn Sie eine zuverlässige Verbindung wünschen, stellen Sie sicher, dass Ihr NFS TCP-Pakete über das Internet verwendet (oder nur dazu gezwungen ist).

Dale Mahalko
quelle
1
> Telnet und FTP sind ebenfalls von Natur aus unsicher, aber beide werden seit Jahrzehnten im offenen Internet verwendet. Obwohl dies zutrifft, halte ich dies nicht für einen guten Punkt, da es im Allgemeinen als (sehr) schlechte Praxis angesehen wird, diese über das Internet zu verwenden jetzt. Mozilla schlägt sogar vor, unverschlüsselte http zu verwerfen .
Ian D. Scott
0

NFS kann über eine Firewall erfolgen. Wenn Sie suchen, werden Sie andere finden, die diesen Prozess versucht haben und erfolgreich waren. Dies ist jedoch nicht so einfach wie das Öffnen von Ports und scheint von der Version von NFS abhängig zu sein, die ausgeführt wird.

rsync ist ein ausgezeichneter Vorschlag und hat viel Flexibilität. Dies wäre jedoch ein Prozess, der außerhalb Ihrer App ausgeführt wird. rsync kann die Synchronisierung lokaler Dateiaktualisierungen durchführen und ein gesamtes Verzeichnis mit anderen Ordnern synchronisieren.

ssh wäre eine weitere sichere Option und würde nur das Öffnen eines einzelnen Ports erfordern. Ich habe dies in der Vergangenheit zwischen Windows- und Linux-Systemen verwendet und sowohl innerhalb einer App als auch bei der Planung des Prozesses gut funktioniert.

Ich bin mir sicher, dass es andere Möglichkeiten gibt, um das zu erreichen, wonach Sie suchen, aber wir benötigen weitere Informationen zu den Dateitypen, die es gibt, und wenn Sie sie zu einer Seite verknüpfen oder mit etwas Komplexerem streamen.

Tim Koscielski
quelle
Ich verstehe die Alternativen, das Mounten des Dateisystems wäre die einfachste Lösung. Ich weiß nur nicht, wie stabil NFS über das Internet im Gegensatz zu einem internen Netzwerk ist. Was passiert, wenn die Verbindung unterbrochen wird usw. oder wenn es eine neuere Alternative gibt, die dafür ausgelegt ist?
0

NFS-Mounts können mit automount durchgeführt werden, wodurch der Mount bei einem Fehler weiterhin versucht wird. Die einzige Möglichkeit, ihn über die Pipes zu verwenden, besteht darin, einen VPN oder eine andere sichere Verbindung zu verwenden (eigentlich würde ich das aber nicht in Betracht ziehen, aber Sie klingen fest auf die Idee).

Selbst bei Verwendung von automount wird der Upload wahrscheinlich fehlschlagen oder beschädigt, wenn ein Netzwerkproblem vorliegt und Sie die Uploads auf den NFS-Mount stellen, es sei denn, Sie speichern die Datei lokal und kopieren sie dann bei erfolgreichem Upload.


quelle