Odată, când pepene verzi pe copaci erau încă verzi, am întâlnit un proiect minunat OpenVPN. care mi-a făcut munca de a conecta împreună rețelele locale distribuite. Prima experiență a fost configurarea serverului în cadrul FreeBSD, bine, atunci, după cum se spune, a mers. Până în prezent, aproape toate serverele pe care le-am configurat funcționează în cadrul Ubuntu Linux dintr-o versiune sau alta.
Și recent am observat că printre junk-ul stocat în /etc/init.d. a ascuns modest scriptul numit "openvpn". - Ei bine, Che? - Un administrator experimentat va întreba imediat. Lucru este că până de curând, creșterea interfețelor de rețea, inclusiv TUN. Am organizat doar prin / etc / network / interfaces. Cu opțiuni de pre-up pentru a porni opțiunile OpenVPN și pre-down pentru ca opțiunea să se oprească. Toate aceste "rușine" au fost diluate peste tot de diverse echipe care manipulează mesele de rutare. În general, o imagine destul de greoaie sa dovedit. În principiu, totul a mers destul de decent, dar odată ce este furnizat un dezvoltator (Ubuntu-un fel?) Apropo, de ce nu profita de, mai ales că acesta va scuti foarte mult / etc / network / interfaces. Deci, asta sa dovedit la mine.
Instalarea OpenVPN
Instalarea OpenVPN în Ubuntu nu necesită trucuri cu urechi:
$ sudo apt-get instala openvpn
Asigurați-vă că ați confirmat instalarea tuturor dependențelor.
Cei care doresc / trebuie să instaleze OpenVPN din codul sursă vor trebui să se familiarizeze cu informațiile relevante.
Dacă sunteți interesat de pachetele binare pentru alte platforme, vizitați pagina de descărcări a proiectului.
Plasarea fișierelor cheie
Deoarece în acest articol am decis să vorbesc despre configurarea părții client a OpenVPN, vom crede că aveți deja fișiere cheie de criptare (le-ați dat de administratorul de server OpenVPN). Numărul și tipul cheilor depind de configurarea serverului OpenVPN la care vă conectați. Acest articol presupune că trei fișiere sunt utilizate pentru criptare și autentificare:
- cheia privată de criptare a clientului în formatul .pem (vom apela fișierul client.key);
- Certificatul clientului semnat în format .pem semnat de autoritatea de certificare. (să sunăm client.crt);
- certificat al autorității de certificare a serverului în format .pem. care a fost semnat client.crt fișier (vom numi fișierul ca.crt)
După primirea cheii și a certificatelor, asigurați-vă că aveți grijă de siguranța acestora. O soluție bună este să plasați toate aceste lucruri pe o unitate flash criptată, de exemplu, de TrueCrypt. În acest articol, vom presupune că cheile și certificatele sunt localizate în directorul / media / keys. De asemenea, asigurați-vă că părăsiți permisiunile minime pentru director cu cheia și certificatele:
Fișier de configurare
Fișierele de configurare OpenVPN sunt de obicei situate în / etc / openvpn sau / usr / local / etc / openvpn. În acest articol, presupun că ați instalat OpenVPN din arhivele Ubuntu, iar directorul pentru stocarea configurației este / etc / openvpn.
Dacă vă conectați la un server OpenVPN care nu este configurat de dvs., de obicei, cineva ar trebui să vă dea un fișier de configurare "de bază" care să conțină setul minim necesar de parametri. Printre parametrii de configurație OpenVPN specific pentru gazda clientului, sunt cele mai des întâlnite căile spre fișierele cheie și certificatele, precum și căile spre scripturile externe pentru scripturile de inițializare.
client
la distanță myvpnsrv.com
ca /media/keys/ca.crt
cheie /media/keys/client.key
cert /media/keys/client.crt
daemon
dev tun
proto udp
comp-LZO
Prima linie spune OpenVPN că conexiunea se va face în modul client.
Valorile parametrilor ca. cheile și certurile definesc căile spre fișierul de certificat CA, cheia privată și, respectiv, certificatul client.
Prin setarea parametrului daemon, forțăm OpenVPN să deconectăm de la consola și să lucrăm în fundal.
Parametrul dev specifică tipul de interfață de rețea care va fi utilizată pentru a schimba traficul criptat cu serverul. Poate avea valoarea de tun sau atingeți. Diferența principală dintre aceste două tipuri de interfețe poate fi găsită aici și aici.
Parametrul proto specifică protocolul la care va fi înfășurat traficul criptat. Este preferabil să utilizați UDP.
Prezența parametrului compozit provoacă OpenVPN pentru a comprima traficul, ceea ce este foarte util atunci când există un canal de date "îngust".
Scriere și scripturi externe
OpenVPN, printre altele, vă permite să rulați programe externe după pornire, precum și înainte și după oprirea daemonului. Un lucru foarte util dacă trebuie să șamanizați tabelele de rutare atunci când ridicați tunelul.
Luați imediat la cunoștință un moment subtil. Pentru ca daemonul OpenVPN să ruleze programe externe, trebuie permis în mod explicit să facă acest lucru prin trecerea parametrului de securitate a scriptului cu o valoare de cel puțin 2. Securitate.
Pentru a specifica calea către program care se numește automat după ce interfața de rețea este ridicată, utilizați parametrul sus. trecând-o ca valoare pentru calea către program și, eventual, pentru parametrii suplimentari.
Pentru a porni un program extern după deconectarea interfeței de rețea, utilizați parametrul de jos. informându-l, bineînțeles, despre calea și parametrii programului numit. Dacă este necesar ca programul să fie pornit înainte ca interfața să fie oprită, specificați și parametrul down-pre fără o valoare.
Acum, puțin despre specificul apelării programelor externe de către daemonul OpenVPN. Adevărul este că acestea nu sunt numite doar "dumbly", dar sunt transmise mai mulți parametri de conectare, ceea ce este foarte util atunci când lucrați cu tabele de rutare.
Formatul de a apela un program extern de către daemonul OpenVPN la inițializarea interfeței can este după cum urmează:
tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [init | restart]
Pentru interfața de atingere, formatul este același, cu excepția faptului că, în loc de ifconfig_remote_ip, dacă passconfig_netmask este trecut. Acesta conține masca de subrețea în care este localizat clientul nostru.
De asemenea, trebuie notat că toți parametrii pe care îi veți trece la programul extern, cu ajutorul sus / jos. vor fi înlocuite înaintea parametrilor enumerați mai sus.
Cred că teoria este suficientă, să trecem la afaceri. Să presupunem că trebuie să modificați tabela de rutare a gazdei dvs. în timpul pornirii / repornirii / opririi daemonului OpenVPN. Pentru două interfețe de rețea, am rezolvat această problemă cu următorul script pe bash:
O chemare la script este efectuată de doi parametri OpenVPN:
up '/usr/local/bin/routes.sh sus'
down '/usr/local/bin/routes.sh jos'
Adică scriptul lansat primește aproximativ următorii parametri:
- $ 1 - în sus sau în jos;
- $ 2 este numele interfeței. În sistem mă gândesc, poate fi tun0 sau tun1;
- $ 3 - de exemplu, 1500;
- $ 4 - de exemplu, 1542
- $ 5 - de exemplu, 10.8.0.5
- $ 6 - de exemplu, 10.8.0.6
- $ 7 - init sau Restart (parametrul ma ignorat complet, astfel încât manipularea rutele sunt întotdeauna îndeplinite, chiar dacă nu a existat nici o interfață de rețea este dezactivată, dar a avut loc doar „regulate“ reporniri Daemon din cauza lipsei de comunicare).
Este posibil (și este necesar) să se utilizeze valorile parametrilor $ 3 - $ 6. De exemplu, dacă doriți să "înfășurați" o parte din trafic printr-un tunel VPN, puteți utiliza ceva de genul:
ip route adaugă de la 192.168.0.0/24 prin $
Pornirea și oprirea daemonului
De fapt, de ce toate aceste dansuri au apelat la scripturi externe și respingerea interfețelor vechi-bune / etc / rețea / interfețe. Și iată ce.
Deschideți fișierul / etc / default / openvpn și în variabila AUTOSTART specificați numele fișierului (sau mai multe, separate de un spațiu) din directorul / etc / openvpn. plicarea extensiei ".conf". Pentru exemplul nostru, ar arata astfel:
Alternativ, dacă doriți ca OpenVPN să facă conexiuni bazate pe toate fișierele de configurare găsite:
Acum, doar "un singur comprimat" este suficient în forma:
serviciul sudo openvpn start
iar scriptul de la /etc/init.d/openvpn va deschide cu atenție OpenVPN pentru toate configurațiile găsite.
Oprirea daemonului nu este, de asemenea, foarte dificilă:
sudo serviciu oprire openvpn
Și în cele din urmă. Dacă nu este necesar să procesați fișierele de configurare existente în / etc / openvpn, este suficient să le definiți în / etc / default / openvpn: