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

Для очереди на повторное открытие: у кого-то есть чрезвычайно хороший обходной путь для этого, и он использовал правку, чтобы вставить это, но это заслуживает своего собственного ответа: голосование за повторное открытие ...

vaioonbuntu
источник
запустите его из командной строки, посмотрите, появляются ли ошибки, и найдите его (или добавьте к этому вопросу).
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. Далее мы создадим 4 файла в каталоге openvpn.
  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 в этот файл. На данный момент у меня есть 6 файлов в моем каталоге openvpn (включая файл резервной копии).

5-9 Я только что понял, как сделать скрипт bash. Возглас Скопируйте следующий текст в текстовый файл:

#!/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 в папке openvpn вместе с файлом client.ovpn. Сделал его исполняемым с помощью команды chmod a + x:

chmod a+x openvpnconvert

А потом запустил это:

./openvpnconvert

Изменить файл client.ovpn

Непосредственно перед строкой ## —– НАЧАТЬ RSA-ПОДПИСЬ—– добавьте следующие строки и сохраните

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

Наконец, вам нужно запустить openvpn из интерфейса командной строки (CLI)

перейдите в папку openvpn

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 для Android. к сожалению, он не работает с моим, так как комбинация имени пользователя и пароля не принимается системой openvpn, что также является подтвержденной ошибкой для моей конкретной конфигурации. действительно очень глупый и расстраивающий, оставляет мне единственную надежду, что это будет исправлено в ближайшее время, надеюсь.
vaioonbuntu
Я только что просмотрел код, и оказалось, что мой провайдер VPN тоже использует конфигурацию типа имени пользователя и пароля. Если у них есть файл .ovpn, который вы можете загрузить, вы все равно сможете использовать вышеуказанную технику. Все равно пальцы скрещены.
Тамсин Майкл
1
Я лично дам деньги на пиво тем, кто когда-либо пишет скрипт для конвертации этих файлов - какая боль в *!
Джован Себастьян
@jowansebastian woop, только что понял, как это сделать. Я добавлю это в конец предыдущего ответа.
Тамсин Майкл
Я сделал именно это, и что-то не работает. Я получаю адаптер tun0, но не могу получить доступ к внутренним ресурсам.
Кристиан Бонджорно
5

Я думал, что вариант не хватает, но он просто переехал. Сначала выберите «Добавить соединение», затем вместо «OpenVPN» (как я это делал) прокрутите вниз и выберите последнюю опцию «импортировать сохраненный vpn ...»

введите описание изображения здесь

нашел ответ здесь - http://torguard.net/knowledgebase.php?action=displayarticle&id=53

rogerdodger00
источник
Это просто сработало, спасибо! Это должен быть принятый ответ.
Винченцо Пий
2

Я никогда не пытался импортировать эти данные соединения, но я использовал следующее в разных случаях:

  • поместите whatever.confвместе с .crtфайлом и учетными данными /etc/openvpnи запустите / остановите VPN-соединение сsudo service openvpn whatever start|stop

  • создайте VPN-соединение через NetworkManager, введя данные соединения вручную. Файл конфигурации для соединения будет размещен на /etc/NetworkManager/system-connectionsи может быть отредактирован позже.

Клаус-Дитер Варцеха
источник
2

Сценарий извлечения:

В ответ на полезный ответ Тамсина Михаила я сделал небольшую программу для автоматизации задачи извлечения. Он выводит соответствующие файлы, необходимые для 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
woahguy
источник
Спасибо. Это круто. @ user1081275 сейчас должен тебе деньги на пиво. =)
Тамсин Михаил
ваша программа падает, когда я ее запускаю: ошибка сегментации (ядро сброшено)
Дитер Писаревски
Я использую g ++ (GCC) 5.1.1 для компиляции. Я только что проверил и проблем не оказалось.
Woahguy
1

Проблема с добавлением VPN из сохраненного файла .ovpn по-прежнему не удается.

Можно добавить один вручную.

  1. Выберите NM App Indicator, -> VPN -> Настроить VPN -> Добавить -> OpenVPN
  2. Вручную введите имя вашего соединения и введите IP-адрес вашего сервера.
  3. Выберите тип аутентификации: для меня это пароль + сертификаты
  4. Введите имя пользователя и пароль
  5. Выберите ваши сертификаты и ключи для следующих трех полей.
  6. Выберите Дополнительно снизу
  7. Введите ПОРТ (в файле .ovpn, обычно внизу после IP-адреса в положении «XX»:

    удаленный ###. ###. ##. ## XX

  8. Если ваша VPN является TCP, установите флажок «Использовать TCP соединение»

  9. Выберите ОК и затем Сохранить.

На этом этапе VPN-соединение должно быть указано в NM AppIndicator в качестве опции. Выберите и протестируйте ваше соединение. Я смог добавить тип соединения TCP и UDP, но это заняло гораздо больше, чем если бы сохраненный файл импорта .ovpn работал.

Будем надеяться, что они исправят это в ближайшее время, поэтому я могу легко добавить другую связь ... но, по крайней мере, это обходной путь, который должен помочь людям, разочарованным, как я.

ARMC
источник
0

Я создал скрипт здесь для автоматизации выборки пароля и почтовые файлы из нескольких VPN - сайтов , такие как vpnbook.com , экстракции ca, certи keyданных из OVPN файлов и обновлений opvn файлов так просто должны сертификаты импортировать для вас. Его можно легко изменить для использования с другими поставщиками.

ryry1985
источник