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

สำหรับคิวเปิดใหม่:บางคนมีการทำงานที่ดีมากสำหรับเรื่องนี้และเขาใช้การแก้ไขเพื่อใส่ไว้ในนี้ แต่นี่ก็คุ้มค่ากับคำตอบของตัวเอง: การลงคะแนนเพื่อเปิดอีกครั้ง ...


เริ่มจาก commandline ดูว่ามีข้อผิดพลาดปรากฏขึ้นและค้นหามัน (หรือเพิ่มลงในคำถามนี้)
Rinzwind

3
มันเป็นข้อผิดพลาด :( bugs.launchpad.net/ubuntu/+source/network-manager-openvpn/+bug/…
vaioonbuntu

คำตอบ:


26

คุณพูดถูกมันเป็นข้อผิดพลาดของผู้จัดการเครือข่าย แต่ฉัน (และคุณเช่นกัน) สามารถหลีกเลี่ยงได้โดยการเรียกใช้ openvpn จากบรรทัดคำสั่ง คุณอาจทำอย่างน้อยสองสามขั้นตอนนี้ แต่ในกรณี (และเพื่อประโยชน์ของผู้อื่น) ฉันจะทำทุกขั้นตอน

ก่อนอื่นให้ติดตั้งแพ็คเกจที่จำเป็น

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

สร้างไฟล์ไฟล์ เหล่านี้จะต้องถูกเก็บไว้อย่างปลอดภัยและเป็นส่วนตัวตลอดเวลา

  1. สร้างไดเรกทอรีที่ชื่อว่า openvpn ในโฮมไดเร็กตอรี่ของคุณคัดลอกไฟล์ไคลเอนต์ VPN ของคุณ (เปลี่ยนชื่อไคลเอนต์ .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 ฉันเพิ่งทำไปแล้วว่าจะทุบตีสคริปต์อย่างไร 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 ในโฟลเดอร์ openvpn พร้อมกับไฟล์ client.ovpn ทำให้สามารถเรียกใช้งานได้ด้วยคำสั่ง 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

ในที่สุดคุณต้องเรียกใช้ openvpn จาก Command Line Interface (CLI)

cd ลงในโฟลเดอร์ 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/

เรียกใช้จาก Command Line - http://ubuntuforums.org/showthread.php?t=2206811


ขอบคุณนี่เป็นสิ่งที่ดีจริงๆ จริง ๆ แล้วฉันมีการกำหนดค่า. ovpn สำหรับ Android น่าเศร้าที่มันไม่ทำงานกับฉันเนื่องจากชื่อผู้ใช้ / รหัสผ่านไม่ได้รับการยอมรับจากระบบ openvpn ซึ่งเป็นข้อผิดพลาดที่ได้รับการยืนยันเช่นกันสำหรับการกำหนดค่าเฉพาะของฉัน โง่จริงๆและน่าผิดหวังจริง ๆ ทำให้ฉันมีความหวังเดียวที่จะได้รับการแก้ไขในไม่ช้าหวังว่า
vaioonbuntu

ฉันเพิ่งดูรหัสและปรากฏว่าผู้ให้บริการ VPN ของฉันใช้การกำหนดค่าประเภทรหัสผ่านชื่อผู้ใช้ด้วย หากพวกเขามีไฟล์. vpn คุณสามารถดาวน์โหลดได้คุณควรใช้เทคนิคดังกล่าวข้างต้นได้ นิ้วมือไขว้กันเลย
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

2

ฉันไม่เคยพยายามนำเข้าข้อมูลการเชื่อมต่อเหล่านี้ แต่ฉันได้ใช้สิ่งต่อไปนี้ในบางโอกาส:

  • วางwhatever.confพร้อมกับ.crtไฟล์และข้อมูลประจำตัวใน/etc/openvpnและเริ่ม / หยุดการเชื่อมต่อ VPN ด้วยsudo service openvpn whatever start|stop

  • สร้างการเชื่อมต่อ VPN ผ่าน NetworkManager โดยป้อนข้อมูลการเชื่อมต่อด้วยตนเอง ไฟล์กำหนดค่าสำหรับการเชื่อมต่อจะอยู่ที่/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 เป็นหนี้เบียร์คุณแล้วตอนนี้ =)
แทมซินไมเคิล

โปรแกรมของคุณขัดข้องเมื่อฉันเริ่มต้น: การแบ่งส่วนผิดพลาด (การทุ่มตลาดหลัก)
Dieter Pisarewski

ฉันใช้ g ++ (GCC) 5.1.1 เพื่อคอมไพล์ ฉันเพิ่งทดสอบและดูเหมือนจะไม่มีปัญหา
woahguy

1

ปัญหาเกี่ยวกับการเพิ่ม VPN จากไฟล์. vpn ที่บันทึกไว้ยังคงล้มเหลว

เป็นไปได้ที่จะเพิ่มหนึ่งด้วยตนเอง

  1. เลือกตัวบ่งชี้แอป NM -> VPN -> กำหนดค่า VPN -> เพิ่ม -> OpenVPN
  2. ตั้งชื่อการเชื่อมต่อของคุณด้วยตนเองและป้อนที่อยู่ IP สำหรับเซิร์ฟเวอร์ของคุณ
  3. เลือกประเภทของข้อความอัตโนมัติ: สำหรับฉันมันคือรหัสผ่าน + ใบรับรอง
  4. ป้อนชื่อผู้ใช้และรหัสผ่านของคุณ
  5. เลือกใบรับรองและกุญแจของคุณสำหรับสามช่องถัดไป
  6. เลือกขั้นสูงจากด้านล่าง
  7. ป้อน PORT (ในไฟล์. ovpn โดยปกติจะอยู่ด้านล่างหลังจากที่อยู่ IP ในตำแหน่ง "XX":

    ระยะไกล ###. ###. ##. ## XX

  8. หาก VPN ของคุณเป็น TCP ให้ทำเครื่องหมายในช่องสำหรับ "ใช้การเชื่อมต่อ TCP"

  9. เลือกตกลงจากนั้นบันทึก

ณ จุดนี้การเชื่อมต่อ VPN ควรแสดงรายการใน NM AppIndicator เป็นตัวเลือก เลือกและทดสอบการเชื่อมต่อของคุณ ฉันสามารถเพิ่มการเชื่อมต่อ TCP และ UDP ได้ชนิด แต่มันต้องใช้เวลามากกว่าที่จะทำหากไฟล์. vpn ที่นำเข้ามาทำงาน

ให้หวังว่าพวกเขาจะแก้ไขปัญหานี้ในไม่ช้าดังนั้นฉันจึงสามารถเพิ่มการเชื่อมต่ออื่น ๆ ได้อย่างง่ายดาย ... แต่อย่างน้อยนี่เป็นวิธีแก้ปัญหาที่จะช่วยให้ผู้คนผิดหวังอย่างที่ฉันเป็น


0

ฉันสร้างสคริปต์ที่นี่ได้โดยอัตโนมัติรหัสผ่านและการดึงข้อมูล zip ไฟล์จากเว็บไซต์หลาย VPN เช่นvpnbook.com , สกัดca, certและkeyข้อมูลจากไฟล์ ovpn และปรับปรุงไฟล์ opvn ดังนั้นใบรับรองเพียงควรนำเข้าสำหรับคุณ สามารถแก้ไขได้อย่างง่ายดายเพื่อใช้กับผู้ให้บริการรายอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.