УНИТе

Портал > Документация > Използване на OpenVPN клиент под Linux за свързване към инфраструктурата на УНИТе

Използване на OpenVPN клиент под Linux за свързване към инфраструктурата на УНИТе

Съдържание:

  1. Предварителна информация
  2. Използване на OpenVPN без Network Manager

    1. Инсталиране на необходимите пакети
    2. Конфигуриране на тунела
    3. Стартиране на тунела
    4. Спиране на тунела
  3. Използване на OpenVPN чрез Network Manager
    1. Извличане на частния ключ и X.509 сертификата, заедно със сертификатната верига, от PKCS#12 контейнер и изтегляне на копие от "SU ECC Root CA"
    2. Инсталиране на необходимите пакети
    3. Инсталиране (създаване) на конфигурацията в Network Manager
    4. Изграждане на тунела
    5. Проверка на статуса на изградения тунел
    6. Спиране на тунела

 

1. Предварителна информация

За да настроите и използвате OpenVPN клиент под Linux, за свързване до мрежовата инфраструктура на UNITe, вие трябва да имате валиден персонален подписващ X.509 сертификат, издаден от сертификатния удостоверител на проека UNITe. Този сертификат, заедно с частния ключ, трябва да е съхранен под формата на PKCS#12 контейнер.

 

2. Създаване и управление на OpenVPN туенал без Network Manager

2.1 Инсталиране на необходимите пакети

От изключително значение е да използвайте Linux дистрибуция, която има поддръжка от страна на производителя!

  • CentOS 7, Scientific Linux 7:

    $ sudo yum install epel-release
    $ sudo yum install openvpn
  • Fedora, CentOS 8, Scientific Linux 8:

    $ sudo dnf install openvpn
  • Debian, Ubuntu:

    $ sudo apt-get install openvpn

 

2.2 Конфигуриране на тунела

Изтеглете конфигурационния файл на тунела от следния адрес:

https://raw.githubusercontent.com/vessokolev/openvpn-unite/master/client-linux/non-nm/unite-hpc-client.conf

Копирайте файла в директория /etc/openvpn и редктирайте пътя, посочен след pkcs12, който трябва да сочи към PKCS#12 файла, който съдържа издадения ви персонален подписващ X.509 сертификат и прилежащата към него сертификатна верига. Например:

pkcs12 /home/vesso/.cert/Veselin_Kolev_2019.p12

По подразбиране, трябва да поставяте сертификатите и ключовете, използвани от OpenVPN в директорията ~/.cert (това е поддиректория на домашната директория на потребителя).

ВНИМАНИЕ! Ако имате активиран SELinux, то директорията, в която се намира PKCS#12 файла, както и самия файл, трябва да имат SELinux контекст home_cert_t!

Ако SELinux е бил активиран по време на създаването на директорията, то контекста върху нея ще бъде зададен атоматично. Той ще се онаследи върху файловете, които ще се създават и копират в тази директория. В случай, че директорията е била създадена преди активирането на SELinux в ядрото, то върху нея и съдържанието ѝ трябва да се установи правилния контекст. Това става по следния начин:

$ chcon -R -t home_cert_t ~/.cert

 

2.3 Стартиране на тунела

След като файла unite-hpc-client.conf бъде копиран в директория /etc/openvpn, трябва да конфигурирате systemd да стартира OpenVPN, използвайки декларациите в този файл:

$ sudo systemctl start openvpn@unite-hpc-client

В този момент, ще видите на екрана следното съобщение:

Broadcast message from vesso@chadasha.usc.edu (Sat 2019-07-13 18:28:13 PDT):

Password entry required for 'Enter Private Key Password:' (PID 15727).
Please enter password with the systemd-tty-ask-password-agent tool!

В този момент, изпишете в същия терминал (без да изпълнявате там нищо друго преди това):

Broadcast message from vesso@chadasha.usc.edu (Sat 2019-07-13 18:28:13 PDT):

Password entry required for 'Enter Private Key Password:' (PID 15727).
Please enter password with the systemd-tty-ask-password-agent tool!

systemd-tty-ask-password-agent

и натиснете "Enter". Точно под въведената команда, ще се появи текстово диалогово меню, в което ще трябва да въведете паролата за декрипиране на съдържанието на PKCS#12 файла:

Broadcast message from vesso@chadasha.usc.edu (Sat 2019-07-13 18:28:13 PDT):

Password entry required for 'Enter Private Key Password:' (PID 15727).
Please enter password with the systemd-tty-ask-password-agent tool!

systemd-tty-ask-password-agent
Enter Private Key Password: *********************************

След като въведете паролата, наблюдавайте събитията покрай изграждането на тунела в /var/log/messages или /var/log/syslog.

 

2.4 Спиране на тунела

Спирането на тунела става по следния начин:

$ sudo systemctl stop openvpn@unite-hpc-client

 

3. Създаване и управление на OpenVPN туенал чрез Network Manager

3.1. Извличане на частния ключ и X.509 сертификата, заедно със сертификатната верига, от PKCS#12 контейнер и изтегляне на копие от "SU ECC Root CA"

Към момента на написването на тази документация, приставката за Network Manager, на база на която се задава и използва конфигурацията за изграждане на OpenVPN тунел, не поддържа директен прочит на частния ключ и X.509 сертификатите директно от PKCS#12 контейнер. Ключът и сертификатите трябва да се извлекат от PKCS#12 контейнера и да се поставят в два отделни файла и като такива да бъдат указани в конфигурацията на Network Manager като пълен път върху файловата система. Заедно с тях, трябва да бъде наличен и файла с удостоверителския X.509 сертификат, на база на който се извършва проверката на автентичността на сървърския сертификат (на OpenVPN сървъра, до който ще бъде изграждан тунела).

Извличането на частния ключ и X.509 сертификатите се извършва в рамките на две отделни операции с PKCS#12 контейнера, като за примерите по-долу се предполага, че PKCS#12 контейнера, който съдържа персоналния ви X.509 сертификат, заедно с частния ключ към него, се намира във файла user_cert.p12:

  • извличане на частния ключ:

    В команден ред изпълнете следното (не е нужно да сте супер потребител):

    $ openssl pkcs12 -in user_cert.p12 -nocerts -out private.pem

    Ще ви бъде поискана паролата, която защитава съдържанието на PKCS#12 контейнера:

    Enter Import Password:

    и ако въведете правилната парола, ще ви бъде поискано да въведете два пъти паролата за защита на частния ключ във файла, който ще бъде създаден:

    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:

    След като въведете тази парола двукратно, частния ключ ще бъде запазен във файла private.pem.

  • извличане на X.509 сертификатите:

    В команден ред изпълнете следното (не е нужно да сте супер потребител):

    $ openssl pkcs12 -in user_cert.p12 -nokeys -out cert.pem

    Ще ви бъде поискана паролата, която защитава съдържанието на PKCS#12 контейнера:

    Enter Import Password:

    и ако въведете правилната парола, всички X.509 сертификати (вашия потребителски X.509 сертификат, заедно със сертификатната верига), ще бъдат запазени във файла cert.pem.

Всички файлове, създадени по описания по-горе начин, трябва да бъдат поставени в директория ~/.cert (това е поддиректория на домашната директория на потребителя).

ВНИМАНИЕ! Ако имате активиран SELinux, то директорията ~/.cert и съдържанието ѝ, трябва да имат SELinux контекст home_cert_t!

Ако SELinux е бил активиран по време на създаването на директорията, то контекста върху нея ще бъде зададен атоматично. Той ще се онаследи върху файловете, които ще се създават и копират в тази директория. В случай, че директорията е била създадена преди активирането на SELinux в ядрото, то върху нея и съдържанието ѝ трябва да се установи правилния контекст. Това става по следния начин:

$ chcon -R -t home_cert_t ~/.cert

Изтеглянето на копие от сертификата "SU ECC Root CA" може да стане с wget:

$ wget https://pki.uni-sofia.bg/crt/SU_ECC_Root_CA.crt

 

3.2. Инсталиране на необходимите пакети

  • CentOS 7, Scientific Linux 7:

    • ако системата се използва с GUI:

      $ sudo yum install epel-release
      $ sudo yum install NetworkManager-openvpn-gnome
    • ако системата се използва без GUI:

      $ sudo yum install NetworkManager-openvpn
  • Fedora, CentOS 8, Scientific Linux 8:

    • ако системата се използва с GUI:

      $ sudo dnf install NetworkManager-openvpn-gnome
    • ако системата се използва без GUI:

      $ sudo dnf install NetworkManager-openvpn
  • Debian, Ubuntu:

    $ sudo apt-get install network-manager-openvpn

 

3.3. Инсталиране (създаване) на конфигурацията в Network Manager

Създаването на конфигурацията за тунела, която да бъде използваема от Network Manager, може да стане по един от следните два начина:

  • в команден ред:

    Изтеглете шаблона за конфигурация на OpenVPN тунел в NetworkManager:

    $ wget https://raw.githubusercontent.com/vessokolev/openvpn-unite/master/client-linux/nmcli/unite-vpn.def

    Отворете файла с текстов редактор и в него укажете правилните пътища към файловете cert.pem, private.pem и SU_ECC_Root_CA.crt. След това, изпълнете:

    $ bash unite-vpn.def

    При успешно трансфериране на конфигурацията от файла unite-vpn.def в настройките на Network Manager, ще получите съобщение, подобно на следното:

    Connection 'VPN-UNITe' (ae47032f-783b-485d-954f-21da0bc0e483) successfully added.

    Отбележете, че създадената конфигурация ще бъде видима и в графичния интерфейс на Network Manager.

  • през графичния интерфейс на Network Manager:

    Натиснете с мишката върху десния горен ъгъл на екрана (1) и в появилото се меню натиснете върху иконата "Settings" (2):

    В секция "Network" (1) на прозореца "Settings", натиснете върху знака "+" (2), който се намира вдясно на надписа "VPN":

    Ще се отвори прозорец за селекция, в който трябва да натиснете върху "OpenVPN":

    За име на VPN профила с настройки, изберете "VPN-UNITe" (1), укажете всички опции, отбелязани със стрелки (2), което включва зареждането на файловете, описани по-горе, а също така и паролата за защита на частния ключ и след това натиснете бутона "Advanced" (3):

    В секция "General" въведете "443" срещу "Use custom gateway port" (1), маркирайте "Use a TCP connection" (2) и "IPv6 tun link" (3), и преминете в секция "Security" (4):

    В "Security", срещу "Cipher" изберете "AES-256-GCM" (1), маркирайте "Use custom size of cipher key", в текстовото поле срещу него въведете 256, срещу "HMAC Authentication" изберете "SHA-512" (3) и накрая преминете в секция "TLS Authentication" (4):

    В "TLS Authentication" маркирайте "Verify peer (server) certificate usage signature" (1) и натиснете бутона "ОК" за да се върнете в предишния прозорец:

    Там влезте в секция "IPv4", маркирайте "Use this connection only for resources on its network" (1) и преминете в секция "IPv6" (2):

    В секция "IPv6", маркирайте "Use this connection only for resources on its network" (1) и завършете конфигурацията натискайки "Apply" (2):

    Профилът с настройки ще се появи в секция "Network", в списъка под "VPN":

 

3.4. Изграждане на тунела

  • в команден ред:

    Изведете списък с достъпните мрежи, конфигурирани в Network Manager и търсете в списъка мрежа с име "VPN-UNITe":

    $ nmcli c s

    Ако тя се намира там, ще видите информация, подобна на следната (на един ред):

    VPN-UNITe            7ee8b266-f2f0-42d6-aebf-d762acc0a80f  vpn       --

    В случай, че в последната колона на реда стои "--", това означава, че мрежата (в случая тунела) не е играден и следователно може да бъде направен опит да се изгради по следния начин:

    $ nmcli c up VPN-UNITe

    При успешното изграждане на тунела, ще получите съобщение подобно на следното:

    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/119)
  • през графичния интерфейс на Network Manager:

    Натиснете с мишката върху десния горен ъгъл на екрана (1) и в появилото се меню натиснете върху черната стрелка, която се намира вдясно на "VPN Off" (2):

    След това, в менюто под "VPN Off", натиснете върху "Connect" и изчакайте:

    При успешното изграждане на тунела, в горния десен ъгъл ще се появи икона, като тази посочена с червена стрелка на картинката по-долу (иконата ще е в плътно оцветяване, без пунктири):

 

3.5. Проверка на статуса на изградения тунел

  • в команден ред:

    Изведете списък с достъпните мрежи, конфигурирани в Network Manager и търсете в списъка мрежа с име "VPN-UNITe":

    $ nmcli c show --active

    Ако мрежата с тунела е активна, ще видите информация, подобна на следната (на един ред):

    VPN-UNITe  7ee8b266-f2f0-42d6-aebf-d762acc0a80f  vpn       eno1

    В случай, че не виждате мрежата с тунела в така изведения списък, то най-вероятно този тунел не е играден.

  • през графичния интерфейс на Network Manager:

    Ако тунелът работи, в горния десен ще се виждате икона, като тази посочена с червена стрелка на картинката по-долу (иконата ще е в плътно оцветяване, без пунктири):

Допълнително, може да използвате инструмента ping6, за да проверите качеството на пренасяния през тунела трафик. За целта, в команден ред, изведете информация за списъка с мрежови устройства:

$ ip a

В този списък, ако тунела работи, трябва да виждате устройство tun0 или tun1 (може и tun2, зависи колко едновременни OpenVPN тунела имате):

48: tun0:  mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global noprefixroute tun0
       valid_lft forever preferred_lft forever
    inet6 2001:67c:20d0:29::1000 peer 2001:67c:20d0:29::1/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever

Съгласно изведената информация, отсрещния край в тунела има IPv6 адрес 2001:67c:20d0:29::1 (при вас може да виждате различен IPv6 адрес). З

$ ping6 -c 10 2001:67c:20d0:29::1

Ако комуникацията в тунела е безпроблемна, на всеки от изпратените пакети ще бъде върнат отговор (няма да виждате загуби):

PING 2001:67c:20d0:29::1(2001:67c:20d0:29::1) 56 data bytes
64 bytes from 2001:67c:20d0:29::1: icmp_seq=1 ttl=64 time=0.664 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=2 ttl=64 time=0.594 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=3 ttl=64 time=0.599 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=4 ttl=64 time=0.594 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=5 ttl=64 time=0.600 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=6 ttl=64 time=0.590 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=7 ttl=64 time=0.578 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=8 ttl=64 time=0.586 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=9 ttl=64 time=0.598 ms
64 bytes from 2001:67c:20d0:29::1: icmp_seq=10 ttl=64 time=0.576 ms

--- 2001:67c:20d0:29::1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.576/0.597/0.664/0.040 ms

 

3.6. Спиране на тунела

  • в команден ред:

    Изведете списък с достъпните мрежи, конфигурирани в Network Manager и търсете в списъка мрежа с име "VPN-UNITe":

    $ nmcli c show --active

    Ако мрежата с тунела е активна, ще видите информация, подобна на следната (на един ред):

    VPN-UNITe  7ee8b266-f2f0-42d6-aebf-d762acc0a80f  vpn       eno1

    В случай, че не виждате мрежата с тунела в така изведения списък, то най-вероятно този тунел не е играден. Ако я виждате, спирането ѝ може да стане така:

    $ nmcli c d  VPN-UNITe

    При успешното спиране на тунела, ще получите съобщение подобно на следното:

    Connection 'VPN-UNITe' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/121)
  • през графичния интерфейс на Network Manager:

    Ако тунелът работи, в горния десен ще се виждате икона, като тази посочена с червена стрелка на картинката по-долу (иконата ще е в плътно оцветяване, без пунктири):

    За да спрете тунела, натиснете с мишката върху десния горен ъгъл на екрана (1) и в появилото се меню натиснете върху черната стрелка, която се намира вдясно на "VPN-UNITe" (2):

    След това, в менюто под "VPN-UNITe", натиснете върху "Turn Off" и изчакайте:

    При успешното спиране на тунела, иконата му, която по правило се намира в горния десен ъгъл, ще изчезне:

 


Последна актуализация: 22 юни 2019

2019 УНИТе, Веселин Колев