web-dev-qa-db-ja.com

openvpnは、新しい14.04インストールで構成をインポートできません

編集:VPN構成を追加してパッチが展開されたときに修正されました。 Linux/Ubuntuは現在使用していません。

Sudo apt-get install network-manager-openvpnを実行してOpenVPN Network-Managerをインストールしました。これはgnomeパッケージもインストールします。

これにより、13.10未満の構成をインポートできましたが、新規インストールでは.confファイルをポイントできますが、インポートをクリックするとマネージャーが消え、接続は追加されません。

私は手動で設定しようとしましたが、どの種類が機能しましたか?.

Sudo openvpn --config /path/to/openvpn.confを実行して端末を介して接続すると、ユーザー名、パスワードの入力を求められましたが、接続できません。

これを修正するにはどうすればよいですか? VPNが本当に必要です。どんな助けでも大歓迎です。

編集: バグ/ 1294899

再オープンキューの場合:誰かがこれに対して非常に良い回避策を持っているので、彼は編集を使用してこれを入れましたが、これは価値があります独自の答え:再開する投票...

20
vaioonbuntu

あなたは正しい、それはネットワークマネージャーのバグです。しかし、私(そしてあなたも)はコマンドラインから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>の間のテキストをclient.ovpnからこのファイルにコピーします。この時点で、openvpnディレクトリの下に合計6つのファイルがあります(バックアップファイルを含む)

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ファイルとともに、ファイルをopenvpnconvertとしてopenvpnフォルダーに保存しました。コマンド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

26
Tamsyn Michael

私はオプションが欠けていると思ったが、それはただ動いた。最初に接続の追加を選択し、次にOpenVPNを選択する代わりに(私がやっていたように)、さらに下にスクロールして、最後のオプション「保存されたvpnをインポート...」を選択します

enter image description here

ここで答えが見つかりました- http://torguard.net/knowledgebase.php?action=displayarticle&id=5

5
rogerdodger00

これらの接続データをインポートしようとしたことはありませんが、さまざまな場面で以下を使用しました。

  • whatever.conf.crtファイルと資格情報と一緒に/etc/openvpnに配置し、Sudo service openvpn whatever start|stopを使用してVPN接続を開始/停止します

  • 接続データを手動で入力して、NetworkManagerを介してVPN接続を作成します。接続の構成ファイルは/etc/NetworkManager/system-connectionsに配置され、後で編集できます。

抽出スクリプト:

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
2
woahguy

保存された.ovpnファイルからのVPNの追加に関する問題は依然として失敗します。

手動で追加することができます。

  1. NMアプリインジケータを選択します。-> VPN-> VPNを構成->追加-> OpenVPN
  2. 接続に手動で名前を付け、サーバーのIPアドレスを入力します
  3. 認証の種類を選択します:私にとっては、パスワード+証明書です
  4. ユーザー名とパスワードを入力してください
  5. 次の3つのボックスの証明書とキーを選択します。
  6. 下から[詳細]を選択します
  7. PORTを入力します(通常、「XX」位置のIPアドレスの後の下部にある.ovpnファイルに:

    リモート###。###。##。## XX

  8. VPNがTCPの場合、「TCP接続を使用」のチェックボックスをオンにします

  9. [OK]、[保存]の順に選択します。

この時点で、VPN接続はオプションとしてNM AppIndicatorにリストされているはずです。接続を選択してテストします。 TCPとUDPタイプの接続を追加できましたが、インポートした.ovpnで保存したファイルが機能する場合よりも多くの作業が必要になりました。

他の接続を簡単に追加できるようにすぐに修正されることを願っています...しかし、少なくともこれは、私のようにイライラする人々を助けるための回避策です。

1
armc

スクリプトを作成しました herevpnbook.com などのいくつかのvpnサイトからパスワードとZipファイルの取得を自動化し、cacertkeyデータをovpnファイルから取得し、証明書がインポートされるようにopvnファイルを更新します。他のプロバイダーで使用するために簡単に変更できます。

0
ryry1985