openvpn kann keine Konfigurationen bei einer neuen 14.04-Installation importieren

20

Bearbeiten: Wurde behoben, als der Patch mit VPN-Konfiguration hinzugefügt wurde. Verwenden Sie Linux / Ubuntu jetzt nicht mehr.

Ich habe den OpenVPN Network-Manager folgendermaßen sudo apt-get install network-manager-openvpninstalliert:, der auch das gnome-Paket installiert.

Dadurch war es möglich, Konfigurationen unter 13.10 zu importieren. Bei meiner Neuinstallation kann ich jedoch auf die .confDateien verweisen. Nach dem Klicken auf "Importieren" verschwindet der Manager jedoch und es wird keine Verbindung hinzugefügt.

Ich habe versucht, es manuell einzurichten, was funktioniert hat, aber meine Verbindung bricht nach einer Weile ab, vermutlich, weil ich nicht alle Details der sehr detaillierten Konfiguration manuell festgelegt habe.

Herstellen einer Verbindung über das Terminal mit folgendem Befehl: sudo openvpn --config /path/to/openvpn.confIch wurde nach einem Benutzernamen und einem Kennwort gefragt, konnte dann jedoch keine Verbindung herstellen.

Was kann ich tun, um das zu beheben? Ich brauche wirklich mein VPN, jede Hilfe wird sehr geschätzt.

Bearbeiten: Es ist ein Fehler / 1294899

Für die Wiedereröffnungswarteschlange: Jemand hat ein extrem gutes Workaround dafür und er hat eine Bearbeitung verwendet, um dies einzufügen, aber dies verdient seine eigene Antwort: Abstimmung für die Wiedereröffnung ...

vaioonbuntu
quelle
Starten Sie es von der Kommandozeile aus, prüfen Sie, ob ein Fehler auftritt, und suchen Sie danach (oder fügen Sie ihn zu dieser Frage hinzu).
Rinzwind

Antworten:

26

Sie haben Recht, es ist ein Netzwerkmanager-Fehler. Aber ich (und Sie auch) können es umgehen, indem Sie openvpn von der Befehlszeile aus ausführen. Sie haben wahrscheinlich schon ein paar dieser Schritte ausgeführt, aber nur für den Fall (und zum Wohle anderer) werde ich eine vollständige Schritt-für-Schritt-Anleitung ausführen.

Installieren Sie zuerst die erforderlichen Pakete

sudo apt-get install network-manager network-manager-openvpn network-manager-openvpn-gnome

Dateien erstellen Diese Dateien müssen jederzeit sicher und privat aufbewahrt werden

  1. Erstellen Sie ein Verzeichnis mit dem Namen openvpn in Ihrem Ausgangsverzeichnis. Kopieren Sie Ihre VPN-Client-Datei (umbenannt in client.ovpn) in das Verzeichnis openvpn
  2. Optional: Behalten Sie eine Originalkopie der Datei bei - nennen Sie sie client.ovpn.orig
  3. Als nächstes erstellen wir 4 Dateien im openvpn-Verzeichnis.
  4. Am Ende dieser Datei finden Sie Informationen zum Automatisieren der folgenden Schritte
  5. Öffnen Sie die Datei client.ovpn in einem Texteditor.
  6. Erstellen Sie eine Datei mit dem Namen ca.crt - kopieren Sie den Text zwischen <ca>und </ca>von client.ovpn in diese Datei
  7. Erstellen Sie eine Datei namens client.crt - kopieren Sie den Text zwischen <cert>und </cert>von client.ovpn in diese Datei
  8. Erstellen Sie eine Datei namens client.key - kopieren Sie den Text zwischen <key>und </key>von client.ovpn in diese Datei
  9. Erstellen Sie eine Datei mit dem Namen ta.key - kopieren Sie den Text zwischen <tls-auth>und </tls-auth>von client.ovpn in diese Datei. Zu diesem Zeitpunkt befinden sich insgesamt 6 Dateien in meinem openvpn-Verzeichnis (einschließlich der Sicherungsdatei).

5-9 Ich habe gerade herausgefunden, wie man ein Bash-Skript erstellt. Whoop Kopieren Sie Folgendes in eine Textdatei:

#!/bin/bash
sed '1,/<ca>/d;/<\/ca>/,$d' client.ovpn > ca.crt
sed '1,/<cert>/d;/<\/cert>/,$d' client.ovpn > client.crt
sed '1,/<key>/d;/<\/key>/,$d' client.ovpn > client.key
sed '1,/<tls-auth>/d;/<\/tls-auth>/,$d' client.ovpn > ta.key

Ich habe die Datei als openvpnconvert zusammen mit der client.ovpn-Datei im openvpn-Ordner gespeichert. Es wurde mit dem Befehl chmod a + x ausführbar gemacht:

chmod a+x openvpnconvert

Und dann lief es:

./openvpnconvert

Ändern Sie die Datei client.ovpn

Kurz vor der Zeile ## —–BEGIN RSA SIGNATURE—– die folgenden Zeilen einfügen und speichern

ca ca.crt
cert client.crt
key client.key
tls-auth ta.key

Schließlich müssen Sie openvpn über die Befehlszeilenschnittstelle (Command Line Interface, CLI) ausführen.

cd in den openvpn ordner

cd openvpn

Führen Sie openvpn aus, wenn Sie die von mir angegebenen Dateinamen verwenden (siehe unten), andernfalls verwenden Sie Ihre Dateinamen.

sudo openvpn --client --config ~/openvpn/client.ovpn --ca ~/openvpn/ca.crt

Ich verwende derzeit OpenVPN, das ich mit genau diesen Schritten eingerichtet habe. Hoffe, es funktioniert genauso gut für andere.

Quellen:

Dateien erstellen - http://naveensnayak.wordpress.com/2013/03/04/ubuntu-openvpn-with-ovpn-file/

Ausführen über die Befehlszeile - http://ubuntuforums.org/showthread.php?t=2206811

Tamsyn Michael
quelle
Danke, das ist wirklich schön. Ich habe tatsächlich eine .ovpn-Konfiguration für Android. Leider funktioniert es bei mir nicht, da die Kombination aus Benutzername und Passwort vom openvpn-System nicht akzeptiert wird. Dies ist auch ein bestätigter Fehler für meine spezifische Konfiguration. Wirklich wirklich dumm und frustrierend, lässt mich die einzige Hoffnung, dass dies hoffentlich bald behoben wird.
Vaioonbuntu
Ich habe gerade den Code durchgesehen und es sieht so aus, als ob mein VPN-Anbieter auch eine Konfiguration für den Benutzernamen und den Kennworttyp verwendet. Wenn sie eine .ovpn-Datei haben, die Sie herunterladen können, sollten Sie in der Lage sein, die oben beschriebene Technik zu verwenden. Trotzdem Daumen drücken.
Tamsyn Michael
1
Ich persönlich gebe Biergeld an jemanden, der jemals ein Skript schreibt, um diese Dateien zu konvertieren - was für ein Schmerz in der *!
Jowan Sebastian
@ jowansebastian woop, habe gerade herausgefunden, wie es geht. Ich werde es an das Ende der vorherigen Antwort anfügen.
Tamsyn Michael
Ich habe genau das getan und etwas funktioniert nicht. Ich bekomme den tun0-Adapter, kann aber nicht auf interne Ressourcen zugreifen.
Christian Bongiorno
5

Ich dachte, die Option würde fehlen, aber sie hat sich nur bewegt. Wähle zuerst "Verbindung hinzufügen" und dann anstatt "OpenVPN" (wie ich es getan habe), scrolle weiter nach unten und wähle die letzte Option "Importiere einen gespeicherten VPN ..."

Bildbeschreibung hier eingeben

fand die Antwort hier - http://torguard.net/knowledgebase.php?action=displayarticle&id=53

rogerdodger00
quelle
Es hat einfach funktioniert, danke! Dies sollte die akzeptierte Antwort sein.
Vincenzo Pii
2

Ich habe nie versucht, diese Verbindungsdaten zu importieren, habe jedoch Folgendes bei verschiedenen Gelegenheiten verwendet:

  • Legen Sie die whatever.confzusammen mit der .crtDatei und den Anmeldeinformationen ein /etc/openvpnund starten / stoppen Sie die VPN-Verbindung mitsudo service openvpn whatever start|stop

  • Erstellen Sie die VPN-Verbindung über den NetworkManager, indem Sie die Verbindungsdaten manuell eingeben. Die Konfigurationsdatei für die Verbindung wird unter gespeichert /etc/NetworkManager/system-connectionsund kann später bearbeitet werden.

Klaus-Dieter Warzecha
quelle
2

Extraktionsskript:

Als Antwort auf die hilfreiche Antwort von Tamsyn Michael habe ich ein kleines Programm erstellt, um die Extraktionsaufgabe zu automatisieren. Es gibt die für openvpn erforderlichen Dateien aus und hängt diese Dateinamen an die ursprüngliche Einstellungsdatei an.

//woahguy@askubuntu

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

int i = 0;

string buffer, filename, ca, cert, key, auth;

struct _tags { const char* first; const char* last; };

const char* files[] = { "ca.crt", "client.crt", "client.key", "ta.key" };

_tags tags[] = {
    { "<ca>", "</ca>" },
    { "<cert>", "</cert>" },
    { "<key>", "</key>" },
    { "<tls-auth>", "</tls-auth>" }
};

string string_between( string str, const string& from, const string& to ) {
    size_t first = str.find(from);
    size_t last = str.find(to);
    return( str.substr ( first+from.size(),last-first-to.size()));
}

int read_file_to_buffer( string filename )
{
    char line[12];
    FILE* pFile = fopen( filename.c_str(), "r" );
    if( pFile != NULL ) {
        while( fgets( line, sizeof( line ), pFile ) ) {
            buffer.append( line );
        }
    } else {
        return 1;
    }
    return 0;
}

int write_buffer_to_file( string buffer, string filename )
{
    FILE* pFile = fopen( filename.c_str(), "w" );
    if( pFile != NULL ) {
        fwrite (buffer.c_str(), sizeof(char), buffer.size(), pFile);
        fclose(pFile);
    } else {
        return 1;
    }
    return 0;
}

int append_found_tags_to_main( int type )
{
    FILE* pFile = fopen( filename.c_str(), "a+" );
    if( pFile != NULL ) {
        if( type == 1 ) {
            fprintf( pFile, "\nca %s\r\ncert %s\r\nkey %s\r\n",
                files[0], files[1], files[2] );
        } else {
            fprintf( pFile, "\nca %s\r\ncert %s\r\nkey %s\r\ntls-auth %s\r\n",
                files[0], files[1], files[2], files[3] );
        }
        fclose(pFile);
    }
    return 0;
}

int extract_tags( )
{
    while (buffer.find(tags[i].first) != std::string::npos ) {
        if( i == 0 ) {
            ca = string_between( buffer, tags[i].first, tags[i].last);
        } else if( i == 1 ) {
            cert = string_between( buffer, tags[i].first, tags[i].last);
        } else if( i == 2 ) {
            key = string_between( buffer, tags[i].first, tags[i].last);
        } else if( i == 3 ) {
            auth = string_between( buffer, tags[i].first, tags[i].last);
        } else {
            return 1;
        }
        i++;
    }
    return 0;
}

int write_tags( )
{
    if( !ca.empty() && !cert.empty() && !key.empty() ) {
        write_buffer_to_file( ca, files[0] );
        write_buffer_to_file( cert, files[1] );
        write_buffer_to_file( key, files[2] );
        if( !auth.empty() ) {
            write_buffer_to_file( auth, files[3] );
            append_found_tags_to_main( 0 );
        } else {
            append_found_tags_to_main( 1 );
            return 1;
        }
    } else {
        return 2;
    }
}

int main(int argc, char* argv[])
{
    if( argv[1] == NULL ) {
        printf("certgrabber<: You need to specify a valid filename to extract from.\r\n");
        return 1;
    } else {
        if( argv[2] != NULL && argv[3] != NULL && argv[4] != NULL && argv[5] != NULL) {
            files[0] = argv[2];
            files[1] = argv[3];
            files[2] = argv[4];
            files[2] = argv[5];
        }
        filename = argv[1];
    }
    read_file_to_buffer( argv[1] );
    if( buffer.empty()){
        printf("certgrabber<: You need to specify a valid filename to extract from.\r\n");
        return 2;
    }
    if( extract_tags() == 0 ) {
        int result = write_tags();
        if( result == 0 ) {
            printf("certgrabber<: All certificates and keys successfully extracted.\r\n");
        } else if( result == 1 ) {
            printf("certgrabber<: Unable to find a TLS auth key, but this isn't exactly an error.\r\n");
        } else if( result == 2 ) {
            printf("certgrabber<: Something went totally wrong with the certificate files.\r\n");
        }
    } else {
        printf("certgrabber<: Something went wrong while extracting the tags.\r\n");
        return 3;
    }
    return 0;
}

Zusammenstellung & Aufbau:

Sie müssen g ++ installieren, um dies zu erstellen

sudo apt-get install g++

Dann vom Terminal

g++ -c main.cpp -o main.o \ g++ -o certgrabber main.o 

Sie haben jetzt das Programm 'certgrabber' im Ordner.

Programmnutzung:

In Standarddateinamen extrahieren (ca.crt, client.crt, client.key, tls-auth.key)

./certgrabber settings.ovpn

In benutzerdefinierte Dateinamen extrahieren

./certgrabber settings.ovpn ca-1.crt client-1.crt client-1.key tls-1.key
Woahguy
quelle
Vielen Dank. Das ist fantastisch. @ user1081275 schuldet dir jetzt Biergeld. =)
Tamsyn Michael
Ihr Programm stürzt ab, wenn ich es starte: Segmentierungsfehler (Core Dump)
Dieter Pisarewski
Ich benutze g ++ (GCC) 5.1.1 zum Kompilieren. Ich habe gerade getestet und es schien keine Probleme zu geben.
Woahguy
1

Das Problem beim HINZUFÜGEN eines VPN aus einer gespeicherten .ovpn-Datei schlägt weiterhin fehl.

Es ist möglich, eine manuell hinzuzufügen.

  1. Wählen Sie NM App Indicator, -> VPN -> VPN konfigurieren -> Hinzufügen -> OpenVPN
  2. Benennen Sie Ihre Verbindung manuell und geben Sie die IP-Adresse für Ihren Server ein
  3. Wählen Sie die Art der Authentifizierung: Für mich ist es Passwort + Zertifikate
  4. Geben Sie Ihren Benutzernamen und Ihr Passwort ein
  5. Wählen Sie Ihre Zertifikate und Schlüssel für die nächsten drei Felder aus.
  6. Wählen Sie unten Erweitert aus
  7. Geben Sie den PORT ein (in der .ovpn-Datei normalerweise unten nach der IP-Adresse an der Position "XX":

    remote ###. ###. ##. ## XX

  8. Wenn Ihr VPN TCP ist, aktivieren Sie das Kontrollkästchen "TCP-Verbindung verwenden".

  9. Wählen Sie OK und dann Speichern.

Zu diesem Zeitpunkt sollte die VPN-Verbindung optional im NM AppIndicator aufgeführt sein. Wählen und testen Sie Ihre Verbindung. Ich konnte eine TCP- und eine UDP-Verbindung hinzufügen, aber es dauerte viel länger, als wenn die gespeicherte OVPN-Importdatei funktionieren würde.

Hoffen wir, dass sie das bald beheben, damit ich problemlos andere Verbindungen hinzufügen kann ... aber zumindest ist dies eine Lösung, die Menschen helfen sollte, die so frustriert sind wie ich.

armc
quelle
0

Ich habe ein Skript hier fetching Passwort zu automatisieren und Zip - Dateien von mehreren vpn - Sites wie vpnbook.com , Extrahieren der ca, certund keyDaten aus den ovpn - Dateien und die Aktualisierung der OPVN Dateien , so dass die certs nur für Sie importieren sollen. Es könnte leicht für die Verwendung mit anderen Anbietern geändert werden.

ryry1985
quelle