OpenVPN


Aktualizovaná verze článku o konfiguraci OpenVPN je k nalezení na BCVlogu: OpenVPN – propojení kanceláře a počítačů v terénu.


OpenVPN je jednoduše použitelná, robusní a velmi konfigurovatelná implementace VPN umožňující bezpečně propojit dvě a více sítí. Komunikace přez OpenVPN je šifrována pomocí SSL.

Projekt OpenVPN je Open Source a je šířen pod licensí GNU/GPL

Popis instalace a nastavení OpenVPN píšu vzhledem k OS Linux, ale podporované operační systémy jsou i MS Windows 2000/XP, MacOS X, OpenBSD, FreeBSD NetBSD a také Solaris. Kompletní výpis vlastností OpenVPN je k nalezení na stránkách projektu.

Instalace

Download

OpenVPN je ke stažení na adrese prdownloads.sourceforge.net/openvpn/, použil jsem verzi 2.0_beta10 a přeložil jsem si ji ze zdrových souborů. Aplikace závisí na knihovně LZO (dá se skompilovat i bez ní, ale proč se ochuzovat o kompresi?) a také potřebujete halvičkové soubory OpenSSL.

Kompilace

Zkompilujte a nainstalujte knihovnu LZO (klasika: ./configure --prefix=/usr && make && checkinstall), poté spusťte jako uživatel root ldconfig.

Překlad OpenVPN je také velmi jednoduchý:

tar -xjf openvpn-2.0_beta10.tar.gz
cd openvpn-2.0_beta10
./configure --prefix=/usr
make
checkinstall

Před tím než nainstalujete do systému balíček vytvořený checkinstallem, otestujte funkčnost šifrování (pořád jsme v adresáři se zdrojovýmy kódy OpenVPN):

./openvpn --genkey --secret key
./openvpn --test-crypto --secret key

Dál otestujeme navázání spojení pomocí TLS/SSL:

V jednom terminálu spustíme:

./openvpn --config sample-config-files/loopback-client

V druhém terminlu spustíme:

./openvpn --config sample-config-files/loopback-server

tun/tap

OpenVPN spoužívá pro komunikaci virtuální síťové zařízení tun nebo tap.

Podpora pro tun/tap je v linuxu součástí jádra, pokud používáte jádro z distribuce tak není co řešit. Pokud si překládáte jádro sami, nezapomeňte volbu(pro jádro řady 2.6):

Device Drivers --->
    Networking support  --->
        <M>   Universal TUN/TAP device driver support

Minimálně v distribuci Slackware budete muset vyrobit vyrobit zařízení /dev/net/tun:

mknod /dev/net/tun c 10 200

a nahrád modul zpřístupňující funkce tun do jádra:

modprobe tun

Nastavení

Firewall

Nastavte si maškarádu a povolte forward paketu.

Tunel bez zabezpečení

Tento tunel není nijak zabezpečen, komunikace probíhá protokolem UDP na portu 5000.

Na serveru 1 spusťte:

openvpn --remote server2.cz --dev tun1\
 --ifconfig 192.168.2.1 192.168.2.2 --verb 9

Na serveru 2 spusťte:

openvpn --remote server1.cz --dev tun1\
 --ifconfig 192.168.2.2 192.168.2.1 --verb 9

Funkčnost otestujete pomocí pingu na druhou stranu tunelu:

server 1: ping 192.168.2.2
server 2: ping 192.168.2.1

Tunel zabezpečený pevným klíčem

Nejdřív si vygenerujeme klíč, kterým zabezpečíme spojení:

openvpn --genkey --secret klic.key

Klíč musíte mít na obou počítačích na kterých končí tunel, přenos klíče by měl probbí9hat nějakým bezpečným způsobem.

První počítač:

openvpn --remote server2.cz --dev tun1 \
--ifconfig 192.168.2.1 192.168.2.2 --verb 5 --secret klic.key

Druhý počítač:

openvpn --remote server1.cz --dev tun1 \
--ifconfig 192.168.2.2 192.168.2.1 --verb 5 --secret klic.key

TLS/SSL

Předchozí varianty jsem popsal abych ukázal žejsou možné a funkční, ale nějak jsem pro ně nenašel vhodné využití. Protože trochu cestuji a chci se připojovat z notebooka z libovolného místa a chci to mít bezpečné, používám TLS/SSL.

SSL certifikáty

Pro to abysme mohli používat následující nastavení potřebujeme SSL certifikáty a klíče podepsane od jedné CA. Balíček OpenVPN obsahuje skripty s jednoduchou CA (adresář easy-rsa/), kterou použijeme.

V adresáři easy-rsa/ najdete soubor vars, který si musíte upravit v závislosti na tom kam jste si easy-rsa/ nakopírovali. Doporučuji abyste si přečetli README, ktere je v tom adresáři, je tam totiž kompletní popis výroby klíče.

Nastavení

Nastavení OpenVPN pro použití TLS/SSL mám v konfiguračních souborech, samozřejmě že to lze napsat jako prametry programu jako v minulých příkladech, ale to se mi moc nelíbí.

/etc/openvpn/

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

SSL certifikáty – Server

Na server si umístíme certifikát CA (ca.crt) a certifikát a klíč serveru (server.crt a server.key), které jsme si vygenerovali podle README v adresáři easy-rsa/, také bsyte neměli zapomenout na soubor dh1024.pem nebo dh2048.pem, záleží kterej jste si vyrobili.

server.conf

Tento soubor obsahuje nastaveni OpenVPN na straně serveru(pokud se kouknete do dokumentace k OpenVPN, zjistíte co která položka znamená.):

dev tun
ifconfig 192.168.2.1 192.168.2.2
up ./server.up
tls-server
dh dh2048.pem  
#nebo dh dh1024.pem
ca ca.crt
cert server.crt
key server.key
port 5000
comp-lzo
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3

Parametry ifconfigu jsou ifconfig <lokalni IP> <vzdalena IP>, jsou to koncove adresy tunelu. Server běží na UDP portu 5000.

server.up

Soubor server.up je shell skript, přidává routu do VPNky.

route add -net 192.168.2.0 netmask 255.255.255.0 add gw $5
start.sh

start.sh je skript, který nahazuje VPNku, pro vypnutí VPN stačí killnout proces openvpn

#!/bin/bash
dir=/etc/openvpn
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --cd $dir --daemon --config server.conf
SSL certifikáty – Klient

Na klientský počítač umístíme certifikát CA (ca.crt) a certifikát a klíč klienta (klient.crt a klient.key), které jsme si vygenerovali podle README v adresáři easy-rsa/.

klient.conf
dev tun
remote 147.32.119.186   # VPN server
ifconfig 192.168.2.2 192.168.2.1
up ./klient.up
tls-client
ca ca.crt
cert klient.crt
key klient.key
port 5000
#user nobody
#group nobody
comp-lzo
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
verb 3
klient.up

Soubor klient.up je shell skript, který po nahození VPNky upravuje routovací tabulku klienta, musíte si napsat svůj v závislosti na vašich podmíkách na síti. Jako příklad zde ukážu svůj skript, kterým se připojuji když síťuji přez modem:

#!/bin/bash
route add 147.32.119.186 ppp0       # routa na VPN server
route del default                   # smažu výchozí gw
route add default gw 192.168.2.1    # vše budu routovat přez VPNku

V případě, že chcete všechen provoz tlačit přez VPNku, musíte přidt routovací pravidlo na VPN server.

start.sh

Jako klientský počítač mám notebook, který má vypnutý syslog a snažím se aby co nejméně zapisoval na disk. Proto mám /tmp přimountovaný jako tmpfs a OpenVPN nechavám logovat do souboru /tmp/openvpn.log

#!/bin/bash
dir=/etc/openvpn
modprobe tun
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --log /tmp/openvpn.log --cd $dir --daemon --config klient.conf

19 odpovědí na “OpenVPN”

  1. Zdravim. Mam problem s OpenVPN na nekterych systemech Windows. Specialne Windows XP. Pri stejne konfiguraci nekterym klientum OpenVPN funguje a nekterym to pise chybu TLS Error: TLS key negotiation failed. Dochazi k timeoutu.

    Pouzivam interface TAP a TCP komunikaci. Server nevyzaduje klientsky ceritfikat.

    Zde je cast konfigurace klienta:
    ———–
    proto tcp-client

    remote XXX.XXX.XXX.XXX 1194
    dev tap

    nobind

    persist-key

    tls-client

    ca ca.pem
    ns-cert-type server

    verb 3

    cipher AES-256-CBC

    auth SHA1

    pull

    auth-user-pass

    auth-nocache

    redirect-gateway
    ————-

    Neresil jste nekdo podobny problem s TLS na Windowsech?

  2. Zdravím vás, vím že je plno napsaných návodů na openVPN a prošel jsem jich opravdu hodně ale nepodařilo se mi ani spustit server openVPN. Mohl by někdo napsat někdo opravdu jednoduchý polopatický návod na tuto VPN? Diky

  3. Dobry den,

    Nastavil jsem openvpn aby jse authentifikovala vuci ldap pomocou user/heslo. Bohuzel uz ale nebere clienty, ktery chteji pouzit certifikat. Vyzaduje jenom user/heslo.
    Nevite jak mu rict aby to bral „cert neco username“ ?

    Dekuju za radu

    plugin /usr/local/lib/openvpn-auth-ldap.so /etc/openvpn/auth_ldap.cfg
    client-cert-not-required
    username-as-common-name

Napsat komentář