openvpn ne peut pas importer de configurations sur la nouvelle installation 14.04

20

Modifier: corrigé à l'époque lorsque le correctif était déployé avec l'ajout d'une configuration VPN. N'utilisez plus Linux / Ubuntu maintenant.

J'ai installé OpenVPN Network-Manager en faisant:, sudo apt-get install network-manager-openvpnqui installe également le paquet gnome.

Cela a permis d'importer des configurations sous 13.10, mais lors de ma nouvelle installation, je peux pointer vers les .conffichiers, mais après avoir cliqué sur importer, le gestionnaire disparaît et aucune connexion n'est ajoutée.

J'ai essayé de le configurer manuellement, ce qui a fonctionné, mais ma connexion continue de baisser après un certain temps, je suppose parce que je n'ai pas défini manuellement tous les derniers détails de la configuration très détaillée.

Se connecter via le terminal en faisant: sudo openvpn --config /path/to/openvpn.confm'a demandé un nom d'utilisateur, puis un mot de passe, mais ne se connecte pas.

Que puis-je faire pour résoudre ce problème? J'ai vraiment besoin de mon VPN, toute aide est profondément appréciée.

Edit: c'est un bug / 1294899

Pour la file d'attente de réouverture: quelqu'un a un très bon moyen de contourner cela et il a utilisé un montage pour le mettre, mais cela mérite sa propre réponse: voter pour rouvrir ...

vaioonbuntu
la source
démarrez-le à partir de la ligne de commande, voyez si une erreur apparaît et recherchez-le (ou ajoutez-le à cette question).
Rinzwind

Réponses:

26

Vous avez raison, c'est un bug de gestionnaire de réseau. Mais moi (et vous aussi) je peux contourner ce problème en exécutant openvpn à partir de la ligne de commande. Vous avez probablement effectué au moins quelques-unes de ces étapes, mais juste au cas où (et pour le bénéfice des autres) je ferai une étape par étape complète.

Installez d'abord les packages requis

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

Créer des fichiers Ces fichiers doivent être conservés en toute sécurité et privés à tout moment

  1. Créez un répertoire appelé openvpn dans votre répertoire personnel Copiez votre fichier client VPN (renommé client.ovpn) dans le répertoire openvpn
  2. Facultatif: conservez une copie originale du fichier - appelez-la client.ovpn.orig
  3. Ensuite, nous allons créer 4 fichiers sous le répertoire openvpn.
  4. Voir le bas de ce fichier pour savoir comment automatiser les étapes suivantes
  5. Ouvrez le fichier client.ovpn dans un éditeur de texte.
  6. Créez un fichier appelé ca.crt - copiez le texte entre <ca>et </ca>depuis client.ovpn dans ce fichier
  7. Créez un fichier appelé client.crt - copiez le texte entre <cert>et </cert>depuis client.ovpn dans ce fichier
  8. Créez un fichier appelé client.key - copiez le texte entre <key>et </key>depuis client.ovpn dans ce fichier
  9. Créez un fichier appelé ta.key - copiez le texte entre <tls-auth>et </tls-auth>depuis client.ovpn dans ce fichier À ce stade, j'ai un total de 6 fichiers dans mon répertoire openvpn (y compris le fichier de sauvegarde)

5-9 Je viens de découvrir comment faire un script bash. Whoop Copiez ce qui suit dans un fichier texte:

#!/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

J'ai enregistré le fichier sous openvpnconvert dans le dossier openvpn avec le fichier client.ovpn. Rendu exécutable avec la commande chmod a + x:

chmod a+x openvpnconvert

Et puis je l'ai lancé:

./openvpnconvert

Modifiez le fichier client.ovpn

Juste avant la ligne ## —–BEGIN RSA SIGNATURE—– ajoutez les lignes ci-dessous et enregistrez

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

Enfin, vous devez exécuter openvpn à partir de l'interface de ligne de commande (CLI)

cd dans le dossier openvpn

cd openvpn

Exécutez openvpn, si vous utilisez les noms de fichiers que j'ai spécifiés, voir ci-dessous, sinon utilisez vos noms de fichiers.

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

J'utilise actuellement OpenVPN, que j'ai configuré en suivant exactement ces étapes. J'espère que cela fonctionne aussi bien pour les autres.

Sources:

Création de fichiers - http://naveensnayak.wordpress.com/2013/03/04/ubuntu-openvpn-with-ovpn-file/

Exécution à partir de la ligne de commande - http://ubuntuforums.org/showthread.php?t=2206811

Tamsyn Michael
la source
merci, c'est vraiment sympa. j'ai en fait une configuration .ovpn pour android. malheureusement, cela ne fonctionne pas avec le mien, car la combinaison nom d'utilisateur / mot de passe n'est pas acceptée par le système openvpn, un bug confirmé aussi, pour ma configuration spécifique. vraiment vraiment stupide et frustrant, me laisse le seul espoir, que cela sera corrigé bientôt, j'espère.
vaioonbuntu
Je viens de parcourir le code et il semble que mon fournisseur VPN utilise également une configuration de type mot de passe de nom d'utilisateur. S'ils ont un fichier .ovpn que vous pouvez télécharger, vous devriez toujours pouvoir utiliser la technique ci-dessus. Les doigts croisés quand même.
Tamsyn Michael
1
Personnellement, je donnerai de l'argent à qui a écrit un script pour convertir ces fichiers - quelle douleur dans le *!
jowan sebastian
@jowansebastian woop, vient de découvrir comment le faire. Je vais l'ajouter à la fin de la réponse précédente.
Tamsyn Michael
J'ai fait exactement cela et quelque chose ne fonctionne pas. J'obtiens l'adaptateur tun0 mais je ne peux accéder à aucune ressource interne.
Christian Bongiorno
5

Je pensais que l'option manquait, mais elle vient de bouger. Choisissez d'abord d'ajouter une connexion, puis au lieu de choisir OpenVPN (comme je le faisais), faites défiler plus loin et choisissez la dernière option "importer un vpn enregistré ..."

entrez la description de l'image ici

trouvé la réponse ici - http://torguard.net/knowledgebase.php?action=displayarticle&id=53

rogerdodger00
la source
Cela a juste fonctionné, merci! Ce devrait être la réponse acceptée.
Vincenzo Pii
2

Je n'ai jamais essayé d'importer ces données de connexion, mais j'ai utilisé les éléments suivants à différentes occasions:

  • placez le whatever.confavec le .crtfichier et les informations d'identification dans /etc/openvpnet démarrez / arrêtez la connexion VPN avecsudo service openvpn whatever start|stop

  • créer la connexion VPN via le NetworkManager en entrant manuellement les données de connexion. Le fichier de configuration de la connexion sera placé dans /etc/NetworkManager/system-connectionset pourra être modifié ultérieurement.

Klaus-Dieter Warzecha
la source
2

Script d'extraction:

En réponse à la réponse utile de Tamsyn Michael, j'ai créé un petit programme pour automatiser la tâche d'extraction. Il génère les fichiers appropriés nécessaires pour openvpn, puis ajoute ces noms de fichiers au fichier de paramètres d'origine.

//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;
}

Compilation et construction:

Vous devrez installer g ++ pour construire ceci

sudo apt-get install g++

Puis depuis le terminal

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

Vous aurez maintenant le programme 'certgrabber' dans le dossier.

Utilisation du programme:

Extraire vers les noms de fichiers par défaut (ca.crt, client.crt, client.key, tls-auth.key)

./certgrabber settings.ovpn

Extraire vers des noms de fichiers personnalisés

./certgrabber settings.ovpn ca-1.crt client-1.crt client-1.key tls-1.key
woahguy
la source
Merci. C'est génial. @ user1081275 vous doit de l'argent de la bière maintenant. =)
Tamsyn Michael
votre programme se bloque lorsque je le démarre: erreur de segmentation (core
dumpé
J'utilise g ++ (GCC) 5.1.1 pour compiler. Je viens de tester et il n'y a eu aucun problème.
woahguy
1

Le problème avec l'ajout d'un VPN à partir d'un fichier .ovpn enregistré échoue toujours.

Il est possible d'en ajouter un manuellement.

  1. Sélectionnez NM App Indicator, -> VPN -> Configure VPN -> Add -> OpenVPN
  2. Nommez manuellement votre connexion et entrez l'adresse IP de votre serveur
  3. Sélectionnez le type d'authentification: Pour moi, c'est Password + Certificates
  4. Entrez votre nom d'utilisateur et votre mot de passe
  5. Sélectionnez vos certificats et clés pour les trois cases suivantes.
  6. Sélectionnez Avancé en bas
  7. Entrez le PORT (dans le fichier .ovpn, généralement en bas après l'adresse IP en position "XX":

    à distance ###. ###. ##. ## XX

  8. Si votre VPN est TCP, cochez la case "Utiliser une connexion TCP"

  9. Sélectionnez OK puis Enregistrer.

À ce stade, la connexion VPN doit être répertoriée dans NM AppIndicator en option. Sélectionnez et testez votre connexion. J'ai pu ajouter un type de connexion TCP et UDP, mais cela a pris beaucoup plus de temps que si le fichier enregistré .ovpn importé fonctionnait.

Espérons qu'ils corrigent cela rapidement afin que je puisse facilement ajouter une autre connexion ... mais au moins c'est un travail qui devrait aider les gens frustrés comme moi.

armc
la source
0

J'ai créé un script ici pour automatiser le mot de passe zip fetching fichiers à partir de plusieurs sites tels que vpn vpnbook.com , extraire les ca, certet les keydonnées des fichiers OVPN, et mettre à jour les fichiers OPVN afin que les certs doivent importer simplement pour vous. Il pourrait facilement être modifié pour être utilisé avec d'autres fournisseurs.

ryry1985
la source