OpenVPN – VPN jednoduše

11. 10. 2004
Doba čtení: 5 minut

Sdílet

V tomto článku si popíšeme projekt OpenVPN, pomocí kterého lze velice snadno vytvářet všelijaké VPN (Virtual Private Network).

Při tvorbě VPN máme v současné době několik možností. Můžeme použít nějakou proprietární VPN (například od firmy Cisco), můžeme použít IPSec (ať už přímo z kernelu 2.6, nebo třeba FreeS/WAN), nebo některou otevřenou VPN, která nepoužívá IPSec.

Proprietární řešení jsou většinou poměrně nákladná a hodí se spíše pro větší nasazení. IPSec je naproti tomu výrazně levnější, ale jeho konfigurace není jednoduchá a má problémy při použití NATu. Zájemce lze odkázat na nepřeberné množství článků.

Projekt OpenVPN patří do skupiny opensource VPN, které nepoužívají IPSec. Místo toho je použito SSL/TLS. Mezi jeho hlavní přednosti patří:

  • Podpora mnoha platforem – Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X a Windows 2000/XP.
  • Celý program běží v user mode, a není tedy potřeba patchovat kernel (za předpokladu, že máte zapnutou podporu pro TUN/TAP zařízení)
  • Podpora režimů 1:1 (tunel) nebo N:1 (režim client/server)
  • Možnost použití sdíleného klíče a/nebo SSL certifikátů
  • Jednoduchá konfigurace a perfektní logy
  • Bezpečnost
  • Vysoká odolnost při použití na nekvalitních linkách
  • Volitelná komprese
  • Podpora HTTP a SOCKS proxy. To je výhodné především pro RoadWarrior režim, klient se tak může připojit téměř odkudkoliv
  • a mnoho dalšího…

Co se bezpečnosti týče, umí toho OpenVPN opravdu hodně. Podporovány jsou režimy se sdíleným klíčem nebo použití SSL/TLS s X.509 certifikáty. Pro každý směr komunikace je možno použít jiný klíč. Je také možno nastavit velikost replay-okna, které snižuje možnost prolomení pomocí opětovného přehrání posílaných dat. Samozřejmostí je použití libovolných šifrovacích algoritmů, které podporuje použitá SSL knihovna.

OpenVPN standardně používá protokol UDP, ale lze použít i TCP (včetně zmiňovaného použití HTTP a SOCKS proxy). Veškerá komunikace probíhá na jediném portu, a lze tedy snadno nakonfigurovat firewall, aby propouštěl pouze pakety na tomto portu. Stejně tak je možné, aby pakety procházely různými NATy a maškarádami.

Celý OpenVPN démon běží v uživatelském režimu a komunikuje prostřednictvím TAP nebo TUN rozhraní. Takto vytvořená rozhraní všechna přijatá data předávají přímo uživatelskému procesu, který tak může vystupovat v roli síťové karty. Tím odpadá nutnost znovu překládat kernel (podpora TUN a TAP zařízení je ve většině distribucí), a zároveň se tak snižuje závislost na některé platformě.

Instalace OpenVPN je velice jednoduchá. Ze stránek projektu si stáhneme tgz balíček, rozbalíme a použijeme trojici ./configure, make a make install. Pokud chceme používat kompresi, musíme mít nainstalovanou knihovnu LZO. Součástí balíčku je také spouštěcí script sample-scripts/openvpn.init, který můžeme nahrát do /etc/init.d a pomocí chkconfig –add openvpnpřidat. Tento skript potom při startu projde adresář /etc/openvpn a pro všechny nalezené soubory s příponou conf spustí OpenVPN démona. Pro provoz OpenVPN je vhodné založit vlastního uživatele. OpenVPN je možné i chrootovat.

Stručně zmíním i instalaci na Windows. Ta je také velice přímočará, stačí stáhnout správný balíček (u verze 2.0beta doporučuji beta7, novější mi občas zlobily) a spustit. Instalace přidá Virtual TAP síťové zařízení (doporučuji vhodně přejmenovat) a přidá službu OpenVPN. Tím je instalace skončena a po vytvoření konfiguračního souboru můžete vesele OpenVPNkovat :) Volitelně lze místo Windows služby také nainstalovat GUI prográmek OpenVPN GUI, který se zabydlí v trayi, a uživatel má tak lepší přehled nad všemi bežícími i neběžícími VPN.

Nejprve si ukážeme vytvoření jednoduchého tunelu mezi dvěma linuxovými stroji s použitím sdíleného klíče. Jedná se o podobný scénář jako v tomto článku. Máme dva linuxové stroje (s obligátními IP 1.2.3.4 a 5.6.7.8), mezi kterými normálně funguje IP komunikace. Mezi těmito stroji chceme vytvořit šifrovaný a komprimovaný tunel se sdíleným klíčem. Tunel by dokonce nemusel být ani šifrovaný.

Nejprve si pomocí openvpn –genkey –secret /etc/openvpn/secret.key vygenerujeme sdílený klíč. Ten potom nějakou bezpečnou cestou dopravíme i na druhý počítač. Na počítači 5.6.7.8 potom vytvoříme následující konfigurační soubor /etc/openvpn/vpn.conf:

remote 1.2.3.4
ifconfig 10.0.0.2 255.255.255.0
port 5001
proto udp
dev tap0
secret /etc/openvpn/secret.key
ping 10
comp-lzo
verb 5
mute 10
user openvpn
group openvpn

Tento konfigurační soubor pošleme (nejlépe opět bezpečnou cestou) na počítač 1.2.3.4, změníme v něm řádky remote a ifconfig

remote 5.6.7.8
ifconfig 10.0.0.1 255.255.255.0

a na obou počítačích spustíme /etc/rc.d/init.d/openvpn start. V systémech se nám objeví další zařízení tap0 se zvolenými IP adresami. Veškerá komunikace mezi nimi je potom transparentně šifrována a/nebo komprimována. Ano, opravdu je to takhle jednoduché :)

Přestože je nastavení zřejmé a každý si za domácí úlohu jistě vše rád odvodí, stručně popíšu jednotlivé parametry. Parametr remote určuje druhou stranu VPN, ifconfig adresu a netmasku virtuálního síťového rozhraní. Port a proto snad opravdu nepotřebují komentář. Parametr dev určuje typ a číslo virtuálního rozhraní,

secret jméno souboru se sdíleným klíčem. Tento soubor by měl mít
práva nastavená tak, aby k němu mohl pouze uživatel, pod kterým OpenVPN
běží. Volba ping určuje intervaly keep-alive pingů,
comp-lzo povoluje kompresi a parametry verb a
mute upřesňují logování. A konečně user a group

určují, pod jakými efektivními právy má démon běžet. Bližší popis parametrů najdete v dokumentaci.

Do takto vytvořeného tunelu můžeme pomocí routování přesměrovat libovolný síťový provoz. OpenVPN automaticky obnovuje spadlé spojení, takže není potřeba po výpadku linky vše znova restartovat. Při zkoušení OpenVPN vykazovala velice slušné výsledky. Při vytvoření VPN mezi dvěma počítači na 100MBit LAN přenosová rychlost dosahovala téměř stejných hodnot jako bez použítí VPN. Také všechny služby fungovaly naprosto bez problémů (včetně MS sdílení souborů, které je na podobné síťové čarování poměrně háklivé).

bitcoin_skoleni

Podobný tunel používám na spojení s počítačem v hostingovém centru a i zde OpenVPN dosahuje skvělých výsledků. Díky zapnuté kompresi lze při přenosu textových souborů (HTML, PHP…) dosáhnout i rychlostí rovnajících se trojnásobku kapacity linky. Naopak při interaktivním přístupu (SSH, VoIP) jsem nepozoroval žádné prodlevy.

V příštím dílu si popíšeme konfiguraci v režimu client/server s připojováním RoadWarrior klientů.