OpenVPN

<small>Z PVwiki</small>

OpenVPN je oblíbený program používaný k provozu šifrovaných virtuálních privátních sítí. Funguje na druhé (TAP) nebo třetí (TUN) síťové vrstvě a veškerá komunikace je šifrována pomocí SSL/TLS. Projde skrz NAT a díky certifikátům umožňuje jednoduchou autentizaci uživatelů. Navíc kompletně celý běží v userspace prostoru a funguje i ve Windows a Mac OS X. Připojení funguje tak, že na jedné straně (např. uvnitř naší sítě ) se spustí OVPN server, který bude na veřejné IP adrese přijímat požadavky na sestavení spojení server-klient . Tímto spojem pak prochází šifrované spojení a ve výsledku se klientská strana chová tak, jako by byla připojena přímo uvnitř sítě. Díky správnému nastavení routovací tabulky a hosts záznamů lze směrovat např. požadavky na interní poštovní server nebo třeba na služby, které běží na intranetu.


vložit obrázek tunelu


Obsah

Instalace na Linuxu  :

http://openvpn.net/install.html

Instalace z tarballu - stáhni distribuci

 wget -O /root/openvpn-2.0.9.tar.gz http://openvpn.net/release/openvpn-2.0.9.tar.gz

Rozbalení (unzip) distribuce:

 gzip -dc openvpn-2.0.9.tar.gz | tar xvf -

Sestavení OpenVPN:

 cd openvpn-2.0.9.tar.gz
 ./configure
 make
 make install

Jestliže není stažena knihovna LZO, přidejte --disable-lzo za příkaz configure. Ostatní nastavení mohou být zapnuty jako pthread pomocí ./configure --enable-pthread aby zvýšily latenci během dynamické výměny klíčů SSL/TLS. Příkaz

./configure --help

zobrazí všechny volby konfigurace. První konfigurace Jestliže používáte Linux 2.4.7 nebo vyšší, je možné, že ovladač TUN/TAP je již obsažen v jádru. Můžete si to ověřit příkazem

locate if_tun.h

který by měl ukázat následující soubor /usr/include/linux/if_tun.h.

V Linuxu 2.4.7 nebo vyšším, Pokud jste instalovali z tarballu, proveďte následující příkaz abyste nakonfigurovali zařízení TUN/TAP (tento krok můžete přeskočit pokud jste instalovali z RPM, protože RPM to udělá automaticky za vás): mknod /dev/net/tun c 10 200 modprobe tun

Jestliže používáte Linux 2.2, měli byste si stáhnout Verzi 1.1 TUN/TAP modulu jádra a řídit se instrukcemi instalace.

Konfiguracni kroky po restartu

V Linuxu, dřív než použijete OpenVPN nebo jiný program využívající TUN/TAP zařízení, měli byste nahrát TUN/TAP modul jádra:

modprobe tun

a zapnout IP forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

spusťte VPN příkazem:

/etc/init.d/openvpn start

Konfigurace OpenVPN v Linuxu

[1] Všechny soubory, ktere zde budu popisovat jsou v adresáři /etc/openvpn, který má práva 700 a majitele uživatele root.

Nejdříve je třeba na serveru vygenerovat certifikační autoritu ca

   . ./vars
   ./clean-all
   ./build-ca

Pak vygenerujeme autorizační klíč

./build-key-server server

Ještě je třeba vygenerovat Generate Diffie Hellman parametery

 openssl dhparam -out dh1024.pem 1024

V /usr/share/doc/packages/openvpn najdeme i příklady konfiguračních souborů

výpis server.conf

port 23
proto tcp
dev tun
ca /etc/openvpn/ca/keys/ca.crt
cert /etc/openvpn/ca/keys/server.crt
key /etc/openvpn/ca/keys/server.key  # This file should be kept secret
dh /etc/openvpn/ca/keys/dh1024.pem
server 10.133.253.0 255.255.255.0
push "route 10.133.0.0 255.255.0.0"
client-config-dir ccd
push "dhcp-option DNS 10.133.0.13"
push "dhcp-option DNS 10.133.0.37"
;push "dhcp-option WINS 10.8.0.1"
comp-lzo
;max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 6

Server běží na TCP portu 23 a rozhraní TUN

V souboru /etc/openvpn/ccd/klient1 najdeme nastavení

ifconfig-push 10.133.253.13 10.133.253.14

které říká, že klient1 bude mít po připojení přidělenou adresu 10.133.253.13 , vzdálený server 10.133.253.14 . Parametry jsou <lokalni IP> <vzdalena IP>, jsou to koncove adresy tunelu. Název ccd souboru musí mít stejné jméno jako parametr CN (Common Name - viz dole ) v certifikátu klienta .

Kontrola běhu ovpn serveru: OpenVPN accepts several signals:

   * SIGUSR1 -- Conditional restart, designed to restart without root privileges
   * SIGHUP -- Hard restart
   * SIGUSR2 -- Output connection statistics to log file or syslog
   * SIGTERM, SIGINT -- Exit

Defaultní konfigurace server.conf obsahuje i záznam

   status openvpn-status.log

kde jsou ukládány každou minutu záznamy o připojených klientech.

Všechny dostupné adaptéry lze vypsat příkazem

openvpn --show-adapters

generování SSL certifikátů - Klient

cd /etc/openvpn/ca
. ./vars
./build-key 

Generování probíhá asi takto:

vpn:/etc/openvpn# cd /etc/openvpn/ca
vpn:/etc/openvpn/ca# . ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/ca/keys
vpn:/etc/openvpn/ca# ./build-key klient1
.
Generating a 1024 bit RSA private key
..........++++++
.++++++
writing new private key to 'klient1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CZ]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [Prostejov]:
Organization Name (eg, company) [PVFREE.NET]:
Organizational Unit Name (eg, section) []:spravce
Common Name (eg, your name or your server's hostname) []:klient1
Email Address [ca@pvfree.net]:
.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/ca/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
.
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CZ'
stateOrProvinceName   :PRINTABLE:'NA'
localityName          :PRINTABLE:'Prostejov'
organizationName      :PRINTABLE:'PVFREE.NET'
organizationalUnitName:PRINTABLE:'spravce'
commonName            :PRINTABLE:'klient1' 
emailAddress          :IA5STRING:'ca@pvfree.net'
Certificate is to be certified until Jun 16 23:29:22 2017 GMT (3650 days)
.
Sign the certificate? [y/n]:y
.
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
.
vpn:/etc/openvpn/ca#


Konfigurace klientského stroje

Co kam a jak umístit a co spustit :

LinuxV Debianu je instalace jednoduchá:

# apt-get install openvpn

a samotné spuštění je jednoduché(příklad pod uživatelem client1)

# openvpn  /etc/openvpn/client1.conf  

Po případném zadání hesla pokračuje vytváření VPN spojení. VPN spojení je úspěšně vytvořeno, pokud text v okně po chvilce skončí řádky oznamujícími úspěšně proběhnutou inicializaci. Toto okno necháme po dobu používání VPN otevřené (můžeme ho stáhnout na lištu).


Windows je třeba nejdříve nainstalovat OpenVPN GUI software http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe Po spuštění instalátoru se vytvoří c:/ProgramFiles/openvpn/ a v menu START se vytvoří stejná skupina. do adresáře c:/ProgramFiles/openvpn/config/ umístíme vygenerované soubory, které dodal správce VPNserveru .

Nyní spustíme klienta VPN - v systray vedle hodin se objeví ikonka - klikni na ni pravým tlačítkem myši, objeví se seznam VPN serverů (odpovídá názvu server1.ovpn, server2.ovpn atd. ), pokud je *.ovpn soubor jen jeden, je tam jen nápis Connect. Klikni - probíhá připojení k serveru a následně je připojení sestaveno. Nyní máš přidělenou správnou adresu ze své sítě.


Společné pro Windows i Linux: Na klientský počítač předem po instalaci před spuštěním umístíme certifikát CA (ca.crt) a certifikát a klíč klienta (klient.crt a klient.key), které jsme si vygenerovali.

Zároveň je třeba dodat konfigurační soubor klienta1 - ve Windows se jmenuje sever1.ovpn, v linuxu se musí jmenovat /etc/openvpn/client1.conf

client                                                                                                        
dev tun                                                                                                       
proto tcp                                                                                                     
# IP adresa serveru a port                                                                                    
remote 77.48.49.50 23                                                                                         
resolv-retry infinite                                                                                         
nobind                                                                                                        
persist-key                                                                                                   
persist-tun                                                                                                   
ca ca.crt                                                                                                     
cert klient1.crt                                                                                              
key klient1.key                                                                                               
comp-lzo                                                                                                      
verb 3  


Zdroje:

http://www.openvpn.org

http://home.zcu.cz/~tparisek/PD/openVPN3.htm

http://www.zdenda.com/openvpn

http://openvpn.se/download.html

http://www.karlin.mff.cuni.cz/network/vpn/

Osobní nástroje