openvpn nie może importować konfiguracji przy nowej instalacji 14.04


20

Edycja: Naprawiono to wtedy, gdy łatka została wdrożona z dodaniem konfiguracji VPN. Nie używaj już Linuksa / Ubuntu.

Zainstalowałem Menedżera sieci OpenVPN, wykonując sudo apt-get install network-manager-openvpn:, który również instaluje pakiet gnome.

Umożliwiło to importowanie konfiguracji w 13.10, ale podczas mojej nowej instalacji mogę wskazać .confpliki, ale po kliknięciu importu menedżer po prostu znika i żadne połączenie nie jest dodawane.

Próbowałem ręcznie ustawić, który to działał, ale moje połączenie po pewnym czasie spada, chyba dlatego, że nie ustawiłem ręcznie ostatniego szczegółu bardzo szczegółowej konfiguracji.

Łączenie się przez terminal poprzez: sudo openvpn --config /path/to/openvpn.confpoprosił mnie o nazwę użytkownika, następnie hasło, ale potem się nie łączy.

Co mogę zrobić, aby to naprawić? Naprawdę potrzebuję mojej sieci VPN, każda pomoc jest bardzo ceniona.

Edycja: To błąd / 1294899

W przypadku kolejki ponownego otwierania: Ktoś ma do tego bardzo dobre obejście i użył edycji, aby to umieścić, ale jest to warte własnej odpowiedzi: głosowanie w celu ponownego otwarcia ...


uruchom go z wiersza poleceń, sprawdź, czy pojawią się błędy i poszukaj go (lub dodaj do tego pytania).
Rinzwind

Odpowiedzi:


26

Masz rację, to błąd menedżera sieci. Ale ja (i ty też) mogę to obejść, uruchamiając openvpn z wiersza poleceń. Prawdopodobnie wykonałeś co najmniej kilka z tych kroków, ale na wszelki wypadek (i dla innych) zrobię krok po kroku.

Najpierw zainstaluj wymagane pakiety

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

Utwórz pliki Te pliki muszą być zawsze bezpieczne i prywatne

  1. Utwórz katalog o nazwie openvpn w swoim katalogu domowym Skopiuj plik klienta VPN (przemianowany na client.ovpn) do katalogu openvpn
  2. Opcjonalnie: zachowaj oryginalną kopię pliku - nazwij go client.ovpn.orig
  3. Następnie utworzymy 4 pliki w katalogu openvpn.
  4. Zobacz na dole tego pliku, jak zautomatyzować następujące kroki
  5. Otwórz plik client.ovpn w edytorze tekstu.
  6. Utwórz plik o nazwie ca.crt - skopiuj tekst pomiędzy <ca>i </ca>z client.ovpn do tego pliku
  7. Utwórz plik o nazwie client.crt - skopiuj tekst pomiędzy <cert>i </cert>z client.ovpn do tego pliku
  8. Utwórz plik o nazwie client.key - skopiuj tekst pomiędzy <key>i </key>z client.ovpn do tego pliku
  9. Utwórz plik o nazwie ta.key - skopiuj tekst pomiędzy <tls-auth>i </tls-auth>z client.ovpn do tego pliku W tym momencie mam w sumie 6 plików w moim katalogu openvpn (w tym plik kopii zapasowej)

5-9 Właśnie opracowałem skrypt bash. Whoop Skopiuj następujące pliki tekstowe:

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

Plik zapisałem jako openvpnconvert w folderze openvpn wraz z plikiem client.ovpn. Uczyniono go wykonywalnym za pomocą polecenia chmod a + x:

chmod a+x openvpnconvert

A potem uruchomiłem:

./openvpnconvert

Zmodyfikuj plik client.ovpn

Tuż przed linią ## —–BEGIN RSA SIGNATURE—– dodaj poniższe linie i zapisz

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

Na koniec musisz uruchomić openvpn z interfejsu wiersza poleceń (CLI)

cd do folderu openvpn

cd openvpn

Uruchom openvpn, jeśli używasz określonych przeze mnie nazw plików, patrz poniżej, w przeciwnym razie użyj swoich nazw plików.

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

Obecnie korzystam z OpenVPN, który skonfigurowałem, wykonując dokładnie te kroki. Mam nadzieję, że działa równie dobrze dla innych.

Źródła:

Tworzenie plików - http://naveensnayak.wordpress.com/2013/03/04/ubuntu-openvpn-with-ovpn-file/

Uruchamianie z wiersza poleceń - http://ubuntuforums.org/showthread.php?t=2206811


dziękuję, to jest naprawdę miłe. faktycznie mam konfigurację .ovpn dla Androida. niestety nie działa z moim, ponieważ kombinacja nazwy użytkownika / hasła nie jest akceptowana przez system openvpn, co również jest potwierdzonym błędem dla mojej konkretnej konfiguracji. naprawdę bardzo głupie i frustrujące, pozostawia mi jedyną nadzieję, że wkrótce to zostanie naprawione, mam nadzieję.
vaioonbuntu

Właśnie przejrzałem kod i wygląda na to, że mój dostawca VPN również używa konfiguracji typu hasła dla nazwy użytkownika. Jeśli mają plik .ovpn, który możesz pobrać, nadal powinieneś być w stanie skorzystać z powyższej techniki. W każdym razie kciuki skrzyżowane.
Tamsyn Michael

1
Osobiście dam pieniądze na piwo temu, kto kiedykolwiek napisze skrypt do konwersji tych plików - co za ból w *!
Jowan Sebastian

@ jowansebastian woop, właśnie opracowałem, jak to zrobić. Dodam to na końcu poprzedniej odpowiedzi.
Tamsyn Michael,

Zrobiłem dokładnie to i coś nie działa. Dostaję adapter tun0, ale nie mam dostępu do żadnych zasobów wewnętrznych.
Christian Bongiorno


2

Nigdy nie próbowałem importować tych danych połączenia, ale przy różnych okazjach korzystałem z następujących opcji:

  • umieść whatever.confrazem z .crtplikiem i poświadczeniami /etc/openvpni uruchom / zatrzymaj połączenie VPN zsudo service openvpn whatever start|stop

  • utwórz połączenie VPN za pomocą Menedżera sieci, wprowadzając ręcznie dane połączenia. Plik konfiguracyjny połączenia zostanie umieszczony /etc/NetworkManager/system-connectionsi można go później edytować.


2

Skrypt ekstrakcyjny:

W odpowiedzi na pomocną odpowiedź Tamsyna Michaela stworzyłem mały program do automatyzacji zadania ekstrakcji. Wysyła odpowiednie pliki potrzebne do openvpn, a następnie dołącza te nazwy plików do oryginalnego pliku ustawień.

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

Kompilacja i budowanie:

Aby to zbudować, musisz zainstalować g ++

sudo apt-get install g++

Następnie z terminala

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

W folderze pojawi się program „certgrabber”.

Wykorzystanie programu:

Wypakuj do domyślnych nazw plików (ca.crt, client.crt, client.key, tls-auth.key)

./certgrabber settings.ovpn

Wyodrębnij do niestandardowych nazw plików

./certgrabber settings.ovpn ca-1.crt client-1.crt client-1.key tls-1.key

Dziękuję Ci. To jest niesamowite. @ user1081275 jest Ci teraz winien pieniądze na piwo. =)
Tamsyn Michael

Twój program ulega awarii, gdy go uruchamiam: Błąd segmentacji (
zrzut

Używam g ++ (GCC) 5.1.1 do kompilacji. Właśnie przetestowałem i wydawało się, że nie ma żadnych problemów.
woahguy,

1

Problem z DODAWANIEM VPN z zapisanego pliku .ovpn nadal kończy się niepowodzeniem.

Można dodać jeden ręcznie.

  1. Wybierz NM App Indicator, -> VPN -> Konfiguruj VPN -> Dodaj -> OpenVPN
  2. Ręcznie nazwij swoje połączenie i wprowadź adres IP swojego serwera
  3. Wybierz typ autoryzacji: dla mnie jest to Hasło + Certyfikaty
  4. Wprowadź swoją nazwę użytkownika i hasło
  5. Wybierz certyfikaty i klucze dla następnych trzech pól.
  6. Wybierz Zaawansowane od dołu
  7. Wpisz PORT (w pliku .ovpn, zwykle u dołu po adresie IP w pozycji „XX”:

    zdalne ###. ###. ##. ## XX

  8. Jeśli twoją siecią VPN jest TCP, zaznacz pole „Użyj połączenia TCP”

  9. Wybierz OK, a następnie Zapisz.

W tym momencie połączenie VPN powinno być opcjonalnie wymienione w NM AppIndicator. Wybierz i przetestuj połączenie. Byłem w stanie dodać połączenie typu TCP i UDP, ale zajęło mi to o wiele więcej niż byłoby, gdyby zadziałał importowany plik .ovpn.

Mam nadzieję, że wkrótce to naprawią, dzięki czemu mogę łatwo dodać inne połączenie ... ale przynajmniej jest to praca, która powinna pomóc ludziom sfrustrowanym tak jak ja.


0

Stworzyłem skrypt tutaj zautomatyzować pobieranie hasło i pliki zip z kilku miejsc, takich jak VPN vpnbook.com , ekstrakcję ca, certoraz keydane z ovpn plików i aktualizacji opvn plików więc certs powinny importować tylko dla ciebie. Można go łatwo zmodyfikować do użytku z innymi dostawcami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.