openvpn은 새로운 14.04 설치에서 구성을 가져올 수 없습니다


20

편집 : 추가 VPN 구성으로 패치가 출시 될 때 다시 수정되었습니다. 더 이상 Linux / Ubuntu를 사용하지 마십시오.

sudo apt-get install network-manager-openvpngnome 패키지도 설치 하는 OpenVPN Network-Manager를 설치했습니다.

이렇게하면 13.10에서 구성을 가져올 수 있었지만 새로 설치 한 경우 .conf파일을 가리킬 수 있지만 가져 오기를 클릭하면 관리자가 사라지고 연결이 추가되지 않습니다.

수동으로 설정해 보았지만 어떤 종류의 효과가 있었지만 잠시 후에 연결이 계속 끊어졌습니다. 매우 세부적인 구성의 모든 세부 사항을 수동으로 설정하지 않았기 때문에 추측합니다.

sudo openvpn --config /path/to/openvpn.conf다음 을 수행하여 터미널을 통해 연결 : 사용자 이름, 암호를 요청했지만 연결되지 않습니다.

이 문제를 해결하려면 어떻게해야합니까? VPN이 정말로 필요합니다. 어떤 도움이라도 깊이 감사합니다.

편집 : 그것은 버그 / 1294899입니다

다시 열기 대기열 : 누군가이 문제에 대한 해결 방법이 매우 뛰어나고 편집 내용을 사용하여이를 넣었지만이 답변은 다시 열어야합니다.


명령 줄에서 시작하여 오류가 표시되는지 확인한 후 검색하십시오 (또는이 질문에 추가).
Rinzwind

답변:


26

당신이 옳습니다, 그것은 네트워크 관리자 버그입니다. 그러나 명령 줄에서 openvpn을 실행하면 나도 그 문제를 해결할 수 있습니다. 아마도 이러한 단계 중 적어도 몇 단계를 수행했을 수도 있지만 경우에 따라 (그리고 다른 사람들의 이익을 위해) 전체 단계별로 수행 할 것입니다.

먼저 필요한 패키지를 설치하십시오

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

파일 만들기이 파일들은 항상 안전하고 비밀로 유지되어야합니다

  1. 홈 디렉토리에 openvpn이라는 디렉토리를 만듭니다. VPN 클라이언트 파일 (client.ovpn로 이름이 바))을 openvpn 디렉토리에 복사하십시오.
  2. 선택 사항 : 파일의 원본을 보관하십시오 – client.ovpn.orig
  3. 다음으로 openvpn 디렉토리에 4 개의 파일을 만듭니다.
  4. 다음 단계를 자동화하는 방법은이 파일의 하단을 참조하십시오
  5. 텍스트 편집기에서 client.ovpn 파일을여십시오.
  6. ca.crt라는 파일을 생성 - 사이의 텍스트를 복사 <ca>하고 </ca>이 파일에 client.ovpn에서
  7. client.crt라는 파일을 생성 - 사이의 텍스트를 복사 <cert>하고 </cert>이 파일에 client.ovpn에서
  8. client.key라는 파일을 생성 - 사이의 텍스트를 복사 <key>하고 </key>이 파일에 client.ovpn에서
  9. 사이의 텍스트를 복사 - ta.key라는 파일을 생성 <tls-auth>하고 </tls-auth>(백업 파일 포함) 내 OpenVPN을 디렉토리에 파일 6 건 총이이 시점에서이 파일에 client.ovpn에서

5-9 방금 bash 스크립트를 수행하는 방법을 알아 냈습니다. Whoop 다음을 텍스트 파일로 복사하십시오.

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

파일을 client.ovpn 파일과 함께 openvpn 폴더에 openvpnconvert로 저장했습니다. chmod a + x 명령으로 실행 가능하게 만들었습니다.

chmod a+x openvpnconvert

그런 다음 실행했습니다.

./openvpnconvert

client.ovpn 파일을 수정하십시오.

## —–BEGIN RSA SIGNATURE—– 줄 바로 앞에 아래 줄을 추가하고 저장하십시오.

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

마지막으로 CLI (명령 줄 인터페이스)에서 openvpn을 실행해야합니다.

openvpn 폴더로 cd

cd openvpn

openvpn을 실행하십시오. 지정한 파일 이름을 사용하는 경우 아래를 참조하십시오. 그렇지 않으면 파일 이름을 사용하십시오.

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

현재 OpenVPN을 실행 중이며 정확하게이 단계를 사용하여 설정했습니다. 그것이 다른 사람들에게도 똑같이 잘 작용하기를 바랍니다.

출처 :

파일 만들기-http: //naveensnayak.wordpress.com/2013/03/04/ubuntu-openvpn-with-ovpn-file/

커맨드 라인에서 실행 -http : //ubuntuforums.org/showthread.php ? t=2206811


고마워요, 정말 좋습니다. 나는 실제로 안드로이드에 대한 .ovpn 구성을 가지고 있습니다. 슬프게도 내 특정 구성에 대해 확인 된 버그 인 openvpn 시스템에서 사용자 이름 / 비밀번호 콤보를 허용하지 않기 때문에 내 것과 작동하지 않습니다. 정말 정말 멍청하고 실망스럽고 희망 만 남을 유일한 희망을 남겼습니다.
vaioonbuntu

방금 코드를 살펴본 결과 VPN 공급자가 사용자 이름 비밀번호 유형 구성도 사용하는 것으로 보입니다. 다운로드 할 수있는 .ovpn 파일이 있으면 위의 기술을 계속 사용할 수 있습니다. 어쨌든 손가락이 건 crossed습니다.
Tamsyn Michael

1
이 파일들을 변환하기 위해 스크립트를 작성하는 사람에게 개인적으로 맥주 돈을 줄 것입니다.
jowan sebastian

@ jowansebastian woop, 방금 방법을 알아 냈습니다. 이전 답변의 끝에 추가하겠습니다.
Tamsyn Michael

나는 이것을 정확하게했는데 뭔가 작동하지 않습니다. tun0 어댑터가 있지만 내부 리소스에 액세스 할 수 없습니다.
Christian Bongiorno

5

옵션이 누락되었다고 생각했지만 방금 이동했습니다. 먼저 연결 추가를 선택한 다음 OpenVPN을 선택하는 대신 (내가하는 것처럼) 아래로 스크롤하여 마지막 옵션 "저장된 VPN 가져 오기 ..."를 선택하십시오.

여기에 이미지 설명을 입력하십시오

여기에 답을 찾았습니다-http: //torguard.net/knowledgebase.php ? action=displayarticle&id=53


그냥 효과가있었습니다. 감사합니다! 이것이 정답입니다.
Vincenzo Pii 2016 년

2

이 연결 데이터를 가져 오려고 시도하지 않았지만 다른 경우에 다음을 사용했습니다.

  • 장소 whatever.conf와 함께를 .crt파일에 자격 증명 /etc/openvpn및 시작 /를 사용하여 VPN 연결을 중지sudo service openvpn whatever start|stop

  • 연결 데이터를 수동으로 입력하여 NetworkManager를 통해 VPN 연결을 작성하십시오. 연결을위한 구성 파일이 배치되어 /etc/NetworkManager/system-connections나중에 편집 할 수 있습니다.


2

추출 스크립트 :

Tamsyn Michael의 유용한 답변에 따라 추출 작업을 자동화하는 작은 프로그램을 만들었습니다. openvpn에 필요한 적절한 파일을 출력 한 다음이 파일 이름을 원래 설정 파일에 추가합니다.

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

컴파일 및 빌딩 :

이것을 빌드하려면 g ++을 설치해야합니다

sudo apt-get install g++

그런 다음 터미널에서

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

이제 폴더에 'certgrabber'프로그램이 있습니다.

프로그램 사용법 :

기본 파일 이름으로 추출 (ca.crt, client.crt, client.key, tls-auth.key)

./certgrabber settings.ovpn

사용자 정의 파일 이름으로 추출

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

고맙습니다. 대단해. @ user1081275는 지금 당신에게 맥주 돈을 빚지고 있습니다. =)
Tamsyn Michael

프로그램 시작시 충돌 : 세그멘테이션 오류 (코어 덤프)
Dieter Pisarewski

g ++ (GCC) 5.1.1을 사용하여 컴파일하고 있습니다. 방금 테스트 한 결과 아무런 문제가 없었습니다.
woahguy

1

저장된 .ovpn 파일에서 VPN을 추가 할 때 여전히 문제가 발생합니다.

수동으로 추가 할 수 있습니다.

  1. NM 앱 표시기-> VPN-> VPN 구성-> 추가-> OpenVPN을 선택하십시오.
  2. 연결 이름을 수동으로 지정하고 서버의 IP 주소를 입력하십시오.
  3. 인증 유형을 선택하십시오. 나에게는 암호 + 인증서입니다.
  4. 사용자 이름과 비밀번호를 입력하십시오
  5. 다음 세 상자에 대한 인증서와 키를 선택하십시오.
  6. 하단에서 고급을 선택하십시오
  7. 포트를 .ovpn 파일에 입력하십시오 (보통 "XX"위치에서 IP 주소 다음에 맨 아래에 있음).

    원격 ###. ###. ##. ## XX

  8. VPN이 TCP 인 경우 "TCP 연결 사용"확인란

  9. 확인을 선택한 다음 저장을 선택하십시오.

이때 VPN 연결이 옵션으로 NM AppIndicator에 나열되어야합니다. 연결을 선택하고 테스트하십시오. TCP와 UDP 유형의 연결을 추가 할 수 있었지만 가져 오기 .ovpn 저장 파일이 작동하는 경우보다 더 많은 작업이 필요했습니다.

그들이 다른 연결을 쉽게 추가 할 수 있도록이 문제를 빨리 고치도록하겠습니다. 그러나 적어도 이것은 사람들이 저처럼 좌절하는 데 도움이되는 해결 방법입니다.


0

나는 스크립트를 만들어 여기에 가져 오는 암호를 자동화 및 같은 여러 VPN 사이트에서 파일을 압축 할 vpnbook.com 추출, ca, cert, 및 keyOVPN 파일에서 데이터를하고, 인증서 표시가 당신을 위해 가져와야 있도록 opvn 파일을 업데이트. 다른 공급자와 함께 사용하기 위해 쉽게 수정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.