O openvpn não pode importar configurações na nova instalação 14.04


20

Edit: Corrigido na época quando o patch foi lançado com a adição de configuração da VPN. Não use mais o Linux / Ubuntu agora.

Eu instalei o OpenVPN Network-Manager fazendo sudo apt-get install network-manager-openvpn:, que também instala o pacote gnome.

Isso tornou possível importar configurações na versão 13.10, mas na minha nova instalação, eu posso apontar para os .confarquivos, mas depois de clicar em importar, o gerente simplesmente desaparece e nenhuma conexão é adicionada.

Tentei configurá-lo manualmente, o que meio que funcionou, mas minha conexão continua caindo depois de um tempo, acho que porque não defini manualmente todos os detalhes da configuração muito detalhada.

Ligar através do terminal fazendo: sudo openvpn --config /path/to/openvpn.confme pediu um nome de usuário e senha, mas depois não se conectar.

Oque posso fazer para consertar isso? Eu realmente preciso da minha VPN, qualquer ajuda é profundamente apreciada.

Edit: É um bug / 1294899

Para a fila de reabertura: alguém tem uma solução extremamente boa para isso e ele usou uma edição para colocar isso, mas isso é digno de sua própria resposta: votar para reabrir ...


inicie-o na linha de comando, veja se um erro aparece e procure-o (ou adicione-o a esta pergunta).
Rinzwind

Respostas:


26

Você está certo, é um bug do gerenciador de rede. Mas eu (e você também) podemos contornar isso executando o openvpn na linha de comando. Você provavelmente já executou pelo menos algumas dessas etapas, mas, apenas no caso (e em benefício de outras pessoas), eu darei um passo a passo completo.

Primeiro instale os pacotes necessários

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

Criar arquivos Esses arquivos devem ser mantidos seguros e privados o tempo todo

  1. Crie um diretório chamado openvpn em seu diretório pessoal Copie o arquivo do cliente VPN (renomeado client.ovpn) para o diretório openvpn
  2. Opcional: mantenha uma cópia original do arquivo - chame-o de client.ovpn.orig
  3. Em seguida, criaremos 4 arquivos no diretório openvpn.
  4. Consulte a parte inferior deste arquivo para saber como automatizar as seguintes etapas
  5. Abra o arquivo client.ovpn em um editor de texto.
  6. Crie um arquivo chamado ca.crt - copie o texto entre <ca>e </ca>de client.ovpn para esse arquivo
  7. Crie um arquivo chamado client.crt - copie o texto entre <cert>e </cert>de client.ovpn para esse arquivo
  8. Crie um arquivo chamado client.key - copie o texto entre <key>e </key>de client.ovpn para esse arquivo
  9. Crie um arquivo chamado ta.key - copie o texto entre <tls-auth>e </tls-auth>de client.ovpn para este arquivo. Neste ponto, tenho um total de 6 arquivos no meu diretório openvpn (incluindo o arquivo de backup)

5-9 Acabei de descobrir como fazer o script bash. Oop Copie o seguinte em um arquivo de texto:

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

Salvei o arquivo como openvpnconvert na pasta openvpn junto com o arquivo client.ovpn. Tornou-o executável com o comando chmod a + x:

chmod a+x openvpnconvert

E então executei:

./openvpnconvert

Modifique o arquivo client.ovpn

Antes da linha ## —–BEGIN RSA SIGNATURE—– adicione as linhas abaixo e salve

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

Finalmente, você precisa executar o openvpn a partir da interface da linha de comandos (CLI)

cd na pasta openvpn

cd openvpn

Execute o openvpn, se você estiver usando os nomes de arquivos especificados, veja abaixo; caso contrário, use seus nomes de arquivos.

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

Atualmente, estou executando o OpenVPN, que configurei usando exatamente essas etapas. Espero que funcione igualmente bem para os outros.

Fontes:

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

Correndo a partir da linha de comando - http://ubuntuforums.org/showthread.php?t=2206811


obrigado, isso é muito legal. Na verdade, tenho uma configuração .ovpn para o Android. infelizmente ele não funciona com o meu, pois a combinação nome de usuário / senha não é aceita pelo sistema openvpn, um bug confirmado também para a minha configuração específica. realmente muito estúpido e frustrante, deixa-me a única esperança de que isso seja corrigido em breve, espero.
vaioonbuntu

Acabei de analisar o código e parece que meu provedor VPN também usa uma configuração de tipo de senha de nome de usuário. Se eles tiverem um arquivo .ovpn que você possa baixar, você ainda poderá usar a técnica acima. Dedos cruzados de qualquer maneira.
Tamsyn Michael

11
Pessoalmente, darei dinheiro para quem já escreve um script para converter esses arquivos - que dor no *!
Jowan sebastian

@jowansebastian woop, acabei de descobrir como fazê-lo. Vou adicioná-lo ao final da resposta anterior.
Tamsyn Michael

Eu fiz exatamente isso e algo não funciona. Eu recebo o adaptador tun0, mas não consigo acessar nenhum recurso interno.
Christian Bongiorno 29/02


2

Nunca tentei importar esses dados de conexão, mas usei o seguinte em diferentes ocasiões:

  • coloque o arquivo whatever.confjunto com o .crtarquivo e as credenciais /etc/openvpne inicie / pare a conexão VPN comsudo service openvpn whatever start|stop

  • crie a conexão VPN através do NetworkManager inserindo os dados da conexão manualmente. O arquivo de configuração da conexão será colocado em /etc/NetworkManager/system-connectionse poderá ser editado posteriormente.


2

Script de extração:

Em resposta à resposta útil de Tamsyn Michael, criei um pequeno programa para automatizar a tarefa de extração. Ele gera os arquivos apropriados necessários para o openvpn e anexa esses nomes de arquivo ao arquivo de configurações original.

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

Compilação e Construção:

Você precisará instalar o g ++ para criar isso

sudo apt-get install g++

Então do terminal

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

Agora você terá o programa 'certgrabber' na pasta.

Uso do programa:

Extrair para os nomes de arquivos padrão (ca.crt, client.crt, client.key, tls-auth.key)

./certgrabber settings.ovpn

Extrair para nomes de arquivos personalizados

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

Obrigado. Isso é incrível. @ user1081275 lhe deve dinheiro com cerveja agora. =)
Tamsyn Michael

seu programa trava quando eu iniciá-lo: Falha de segmentação (núcleo)
Dieter Pisarewski

Estou usando o g ++ (GCC) 5.1.1 para compilar. Acabei de testar e parecia não haver problemas.
woahguy

1

O problema com a adição de uma VPN a partir de um arquivo .ovpn salvo ainda falha.

É possível adicionar um manualmente.

  1. Selecione NM App Indicator, -> VPN -> Configure VPN -> Add -> OpenVPN
  2. Nomeie manualmente sua conexão e insira o endereço IP do seu servidor
  3. Selecione o tipo de autenticação: Para mim, é Senha + Certificados
  4. Digite seu nome de usuário e senha
  5. Selecione seus certificados e chaves para as próximas três caixas.
  6. Selecione Avançado na parte inferior
  7. Digite o PORT (no arquivo .ovpn, geralmente na parte inferior após o endereço IP na posição "XX":

    remoto ###. ###. ##. ## XX

  8. Se sua VPN for TCP, marque a caixa de seleção "Usar uma conexão TCP"

  9. Selecione OK e, em seguida, Salvar.

Nesse ponto, a conexão VPN deve estar listada no NM AppIndicator como uma opção. Selecione e teste sua conexão. Consegui adicionar um tipo de conexão TCP e UDP, mas demorou muito mais a fazer do que seria necessário se o arquivo .ovpn salvo importado funcionasse.

Espero que eles consertem isso logo, para que eu possa adicionar facilmente outra conexão ... mas pelo menos essa é uma solução alternativa que deve ajudar as pessoas frustradas como eu.


0

Eu criei um script aqui para automatizar senha atraente e arquivos zip de vários sites VPN, como vpnbook.com , extraindo as ca, certe keydados dos arquivos OVPN, e atualizando os arquivos OPVN para que os certificados devem apenas importar para você. Pode ser facilmente modificado para uso com outros provedores.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.