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


20

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

私はOpenVPN Network-Managerをsudo apt-get install network-manager-openvpnインストールしてインストールしました:gnomeパッケージもインストールします。

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

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

ターミナルを介して接続する:sudo openvpn --config /path/to/openvpn.confユーザー名、パスワードの入力を求められましたが、接続しません。

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

編集:バグ/ 1294899

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


コマンドラインから起動し、エラーが表示されるかどうかを確認して検索します(またはこの質問に追加します)。
リンツウィンド14

回答:


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というファイルを作成します– client.ovpn間<key></key>このファイルにテキストをコピーします
  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

ファイルをopenvpnconvertとしてclient.ovpnファイルとともに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


ありがとう、これは本当にいい。私は実際にアンドロイド用の.ovpn構成を持っています。残念ながら、私の特定の構成では、ユーザー名/パスワードのコンボがopenvpnシステム(確認済みのバグ)で受け入れられないため、私の場合は機能しません。本当にばかげてイライラして、私に唯一の希望を残し、これがすぐに修正されることを願っています。
vaioonbuntu 14

コードを調べたところ、VPNプロバイダーはユーザー名とパスワードの種類の構成も使用しているようです。ダウンロードできる.ovpnファイルがある場合でも、上記の手法を使用できます。とにかく指が交差しました。
タムシンマイケル14

1
私は個人的に、これらのファイルを変換するスクリプトを書いた人にビールのお金を寄付します。
ジョワンセバスチャン

@jowansebastian woop、ちょうどそれを行う方法を考え出した。前の回答の最後に追加します。
タムシンマイケル

私はまさにこれをしましたが、何かがうまくいきません。tun0アダプターを取得しましたが、内部リソースにアクセスできません。
クリスチャンボンジョルノ

5

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

ここに画像の説明を入力してください

ここで答えを見つけました-http://torguard.net/knowledgebase.php?action=displayarticle&id=53


うまくいきました、ありがとう!これは受け入れられた答えであるはずです。
ヴィンチェンツォピイ

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は今あなたにビールのお金を負っています。=)
タムシンマイケル

プログラムを起動するとクラッシュする:セグメンテーションエラー(コアダンプ)
ディーターピサレフスキー

コンパイルにg ++(GCC)5.1.1を使用しています。テストしたところ、問題はないようです。
woahguy

1

保存された.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保存ファイルが機能する場合よりも多くの作業が必要になりました。

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


0

私は、スクリプトを作成し、ここで取り出したパスワードを自動化するとのようないくつかのVPNサイトからファイルを圧縮vpnbook.com、抽出cacertおよびkeyovpnファイルからのデータを、そして本命はあなたのためだけにインポートする必要がありますので、opvnファイルを更新します。他のプロバイダーで使用するために簡単に変更できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.