OpenVPN je multiplatformní opensource VPN (Virtual Private Network) server a zároveň také klient. Umožňuje vyhrát si do detailu s nastavením VPN, kterou se pokoušíme vytvořit a tudíž není problém vytvořit od malé soukromé sítě po propracovanou podnikovou síť s desítkami klientů.
Když už jsem se zmínil, že OpenVPN lze provozovat na více platformách, zde uvádím jejich seznam
Linux 2.2+
Solaris
OpenBSD 3.0
FreeBSD
NetBSD
Windows
Podle vývojářů lze provozovat OpenVPN i na 64 bitových operačních systémech.
Instalace
Instalace OpenVPN je možná hned několika způsoby.
Ten první spočívá v tom, že instalujeme na operační systém Microsoft Windows a zde můžeme použít binárního instalátoru.
Druhým způsobem je kompilace ze zdrojových kódů.
A nakonec třetím způsobem je instalace z distribučních balíků.
My se budeme zabývat druhým způsobem, tedy kompilací OpenVPN.
Na webu OpenVPN v sekci download stáhneme poslední stabilní verzi OpenVPN. V době psaní článku je aktuální verze 2.0.9, můžeme tedy rovnou začít stahovat...
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
Po dokončení stahování, které by nemělo trvat dlouho rozbalíme balík se zdrojovými kódy:
tar xfz openvpn-2.0.9.tar.gz
A můžeme začít kompilovat.
./configure make make install
Jedná se o klasický postup kompilace. Samozřejmě můžeme ovlivnit cíl instalace, nebo instalaci doplňků vyvoláním nápovědy pomocí ./configure --help a následným zapsáním příslušných parametrů.
Tento obecný postup by měl bez větších úprav pracovat na všech operačních systémech.
Konfigurace, použití...
OpenVPN dokáže pracovat hned v několika módech a může bez problémů pracovat v několika procesech najednou. (Jeden PC může být tedy zároveň klientem a serverem.)
OpenVPN má tři základní způsoby chování. Prvním je server, kdy OpenVPN umožňuje klientům připojovat se k němu. Druhým je mód klient, kdy se naopak OpenVPN připojuje k serveru. A třetím je bridge, neboli síťový most, kdy je možné spojit například dva konce neveřejných sítí. (Jinak se také může označovat jako tunel.)
My si postupně ukážeme konfiguraci jak bridge, serveru, tak i klienta.
Veškerá nastavení OpenVPN probíhají v konfiguračních souborech, které se nacházejí nejčastěji v /etc/openvpn. Můžeme si je pojmenovat, jak je libo, nicméně doporučuji vždy zvolit název ve formátu {nazev_site}.conf.
Bridge / tunel
Tento mód umožňuje propojit dvě sítě, tak aby se chovaly jako jeden celek a přitom vůbec nezáleží na tom, kde se nacházejí... Tunelem, který OpenVPN v tomto případě vytvoří můžou procházet libovolná data a lze na něj aplikovat pravidla firewallu.
Podle osobních zkušeností také můžu říct, že v případě spojení po rychlé lince (třeba 100M) výkon nijak razantně neklesá.
Naším cílem bude vytvořit bridge (tunel) mezi dvěma stroji s IP adresami 81.2.225.3 a 85.135.110.30 na bázi UDP. Stroj s IP 81.2.225.3 bude mít v rámci VPN IP adresu 192.168.0.2 a stroj s IP 85.135.110.30 bude mít ve VPN adresu 192.168.0.1.
Může to vypadat složitě, ale funkce je jednoduchá. Do konfiguračního souboru na stroji s IP 81.2.225.3 nastavíme, že druhý konec VPN bude mít IP 85.135.110.30 a naopak...
Konfigurační soubor, který uložíme například pod jménem bridge_ostrava-praha.conf na jeden konec VPN, přesněji řečeno na stroj s IP 85.135.110.30,by mohl vypadat třeba takto:
remote 81.2.225.3 ifconfig 192.168.0.1 255.255.255.252 port 1194 proto udp dev tap0 ping 5 comp-lzo verb 5 mute 10
V této chvíli se nám vytvoří po spuštění OpenVPN jedna část bridge (tunelu) a bude se pokoušet co několik vteřin o spojení.
Pro vysvětlení zde uvádím také, co jednotlivé volby znamenají:
remote - na jaké IP adrese sídlí druhý konec VPN
ifconfig - IP adresa, jaká bude "pověšena" na virtuální rozhraní na našem prvním serveru
port - port na který se bude pokoušet připojit
proto - typ použitého protokolu (Máme totiž možnost volit mezi TCP a UDP)
dev - určuje, jak se bude prezentovat operačnímu systému jako rozhraní
ping - co x vteřin bude pingovat druhý konec VPN, aby nedocházelo k nechtěnému rozpojení
comp-lzo - povoluje kompresi přenosů dat
verb a mute - upřesňují volby logování
Také můžeme přidat parametry user a group, které určí, pod jakým uživatelem a skupinou OpenVPN poběží.
Protože už víme, co který parametr znamená, tak upravíme remote a ifconfig podle potřeby a uložíme na druhý stroj (v našem případě na 81.2.225.3). Může to tedy vypadat například nějak takto:
remote 81.135.110.30 ifconfig 192.168.0.2 255.255.255.252 port 1194 proto udp dev tap0 ping 5 comp-lzo verb 5 mute 10
Ve chvíli spuštění OpenVPN na obou dvou strojích se vytvoří bridge a bude možné z jednoho stroje pingovat a komunikovat směrem na druhý. V případě zájmu je také možné routovat do tohoto bridge a vytvořit tak jednu velkou síť...
Spuštění bridge/tunelu
Pro vyzkoušení funkčnosti většinou postačí spustit na obou dvou strojích příkazem:
openvpn --config /etc/openvpn/bridge_ostrava-praha.conf
Pokud by se jednalo o trvalý provoz, kde je nutný například automatický start po nabootování operačního systému, bylo by nutné použít startovacího skriptu, který by měl OpenVPN vytvořit při své instalaci... (/etc/init.d/openvpn a podobně)
Zabezpečení VPN
Bridge, který jsme vytvořili je bohužel náchylný ke zneužití odposloucháváním provozu, protože nijak nešifruje průchozí data. Tento nedostatek se dá snadno odstranit spuštěním následujících příkazu:
mkdir /etc/openvpn/bridge_ostrava-praha openvpn --genkey /etc/openvpn/bridge_ostrava-praha/secret.key
A doplněním parametrů na konfiguračního souboru bridge_ostrava-praha.conf:
secret /etc/openvpn/bridge_ostrava-praha/secret.key
Klíč, který jsme vygenerovali ještě bezpečně přeneseme i na druhý stroj, kde končí naše VPN a tam již jen doplníme do konfiguračního souboru secret a samozřejmě předtím si vytvoříme složku, do které jej uložíme... Negenerujeme tedy znovu, protože se jedná o sdílený klíč.
V příštím díle se pokusíme o zprovoznění varianty klient/server.