Instalace a konfigurace OpenVPN serveru

VPN (Virtual Private Network — soukromá virtuální síť) je užitečným pomocníkem v případech, kdy se potřebujete bezpečně připojit do domácí či firemní sítě z mnoha různých míst. Server může běžet na Linuxovém firewallu, klient pak na počítači s Windows. To vše je zadarmo a opensource.

Instalace potřebných balíčků

Pro OpenVPN server budeme potřebovat balíčky z repositáře RPMForge. Instalace repositáře je jednoduchá, například pro 64b CentOS 5:

rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

Po tomto kroku vřele doporučuji nastavit plugin balíčkovacího systému yum-priorities, není to ovšem nezbytně nutné. Nainstalujeme balíčky:

yum install openvpn lzo2

Vygenerování párů klíčů pro server a klienty

Prostředí pro vytváření klíčů je v adresáři /usr/share/doc/openvpn-2.0.9/easy-rsa/ (podle verze OpenVPN). Nejprve je nutné nastavit hodnoty v souboru vars ve stejném adresáři, například:

export KEY_SIZE=2048

export KEY_COUNTRY=CZ
export KEY_PROVINCE=NA
export KEY_CITY=Olomouc
export KEY_ORG="MojeFirma a.s."
export KEY_EMAIL="me@MojeFirma.example"

Vygenerování klíčů serveru

Tento krok je potřeba provést pouze jednou po instalaci. Při běžném používání se generují pouze klíče pro klienty.

Nejdříve je nutné do aktuálního prostředí zavést hodnoty ze souboru vars. Tento krok je potřeba učinit před každým generování klíčů (jak pro server, tak i pro klienty).

. ./vars

Po té úklid:

sh clean-all

Potom je možno vygenerovat certifikační autoritu (CA) pro následný podpis vygenerovaných klíčů. U položky common name je vhodné dát jednoznačné označení dané certifikační autority (jednu CA je možné použít pro mnoho serverů). Ostatní položky jsou předvyplněny dle položek souboru vars.

sh build-ca

Generating a 2048 bit RSA private key
writing new private key to 'ca.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) [Olomouc]:
Organization Name (eg, company) [MojeFirma a.s.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:VPNMojeFirma
Email Address [me@MojeFirma.example]:

Potom vygenerovat klíč serveru. Položka common name by opět měla jednoznačně identifikovat daný server. Potom je možné zadat heslo (nezadávat, jinak by bylo nutné jej zadávat při každém spuštění OpenVPN serveru). A potvrdit hodnoty a podepsání klíče certifikační autoritou.

sh build-key-server server

Generating a 2048 bit RSA private key
writing new private key to 'server.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) [Olomouc]:
Organization Name (eg, company) [MojeFirma a.s.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-Server-MojeFirma
Email Address [me@MojeFirma.example]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn-2.0.9/easy-rsa/openssl.cnf
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:'Olomouc'
organizationName      PRINTABLE:'MojeFirma a.s.'
commonName            PRINTABLE:'OpenVPN-Server-MojeFirma'
emailAddress          IA5STRING:'me@MojeFirma.example'
Certificate is to be certified until Sep  7 07:45:04 2020 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

Vygenerovat DiffieHelman parametry. Tato operace může trvat hodně dlouho, nevyžaduje však interakci uživatele.

sh build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time

Tímto je vygenerování souborů pro server hotovo.

Generování klíčů pro klienta

Nejběžnějším (a v podstatě jediným) úkolem při běhu OpenVPN serveru je generování klíčů pro klienty. Nejprve je nutné načíst hodnoty ze souboru vars v příslušném adresáři easy-rsa:

cd /usr/share/doc/openvpn-2.0.9/easy-rsa/
. ./vars

Pak už samotné generování klíč. Je vhodné si předem promyslet schéma pojmenovávání klíčů (pojmenování souborů a common name). Opět je možné nezadávat heslo.

sh build-key Jan_Novak
Generating a 2048 bit RSA private key
writing new private key to 'Jan_Novak.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) [Olomouc]:
Organization Name (eg, company) [MojeFirma a.s.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Jan_Novak
Email Address [me@MojeFirma.example]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn-2.0.9/easy-rsa/openssl.cnf
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:'Olomouc'
organizationName      PRINTABLE:'MojeFirma a.s.'
commonName            T61STRING:'Jan_Novak'
emailAddress          IA5STRING:'me@MojeFirma.example'
Certificate is to be certified until Sep  7 07:59:53 2020 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

Tímto je generování klíčů hotové.

Nastavení serveru

Vytvoříme soubor /etc/openvpn/server.conf. Důležité parametry jsou port (standardně 1194) a protokol (standardně UDP).

Parametr server udává použitou IP pro server a masku sítě.

port 1194
proto udp
dev tap

ca /usr/share/doc/openvpn-2.0.9/easy-rsa/keys/ca.crt
cert /usr/share/doc/openvpn-2.0.9/easy-rsa/keys/server.crt
key /usr/share/doc/openvpn-2.0.9/easy-rsa/keys/server.key
dh /usr/share/doc/openvpn-2.0.9/easy-rsa/keys/dh2048.pem

server 10.8.0.0 255.255.255.0

keepalive 30 120
comp-lzo

user nobody
group nobody

persist-key
persist-tun

status /var/log/openvpn/status.log
log-append  /var/log/openvpn/openvpn.log

verb 3
mute 20

Více lze nalézt v dokumentaci k nastavení serveru.

Nastavení klienta

Vytvoříme soubor s nastavením klienta. Důležité je správně nastavit protokol a port (položka remote nastavuje OpenVPN server a port), toto nastavení bude společné pro všechny klienty.

Naopak je potřeba pro každého zvlášť nastavit jméno souboru s klíčem.

client
dev tap
proto udp
remote vpn.domena.cz 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert Jan_Novak.crt
key Jan_Novak.key
comp-lzo
verb 3

Více v dokumentaci klienta.

Soubory

Klientovi dodáme nachystaný konfigurační soubor a také soubory s klíči.

ca.crt
Jan_Novak.crt
Jan_Novak.key

Soubor ca.crt je pro všechny klienty stejný. Naopak v žádné případě nesmí klient dostat klíč k CA a klíče ostatních klientů.

Tímto je nastavení OpenVPN serveru a klienta u konce. Pokud něco nefunguje, tak je to nejčastěji nesoulad v protokolu serveru a klienta, případně port. Potom je to často nesprávná kombinace ca.crt a klíčů (jak server, tak klient si pomocí certifikátu autority ověřuje klíč druhé strany).

Příspěvek byl publikován v rubrice Linux, OpenVPN. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

7 komentářů: Instalace a konfigurace OpenVPN serveru

  1. Doplnek napsal:

    Jeste bych doplnil, ze je vhodne pouzit:

    client-config-dir=/cesta/nekam
    ccd-exclusive

    a potom mit soubor /cesta/nekam/Jan_Novak
    s obsahem:
    # klientovi bude pridelena nasledujici IP
    ifconfig-push 10.8.0.2 255.255.255.0
    # bude mu pridelen DNS server
    push „dhcp-option DNS 10.8.0.1“
    # bude zmenena jeho default gw
    push „redirect-gateway“
    push „route-gateway 10.8.0.1“
    # nebo mu vlozit routu, pokud mu chceme dovolit pristup do vnirtni site 192.168.1.0/24
    push „route 192.168.1.0 255.255.255.0 10.8.0.1“

    Vyhodou je, ze muzete centralne spravovat nastaveni IP adres klientu a ridit i pristup. Pokud soubor Jan_Novak neexistuje, bude servrem odmitnut.
    u routovani je samozrejme mit odpovidajici pravidla na serveru pomoci iptables.

  2. AsciiWolf napsal:

    Jen malý dotaz…
    „server 10.8.0.1 255.255.255.0“ – Opravdu je syntaxe správná a řádek má vypadat takto – má obsahovat IP a netmask?
    Nemá to být náhodou „server 10.8.0.0 255.255.255.0“ – net address a netmask?

  3. Pingback: Nastavení IPSec tunelu na Mikrotik RouterOS | Heronovo

Komentáře nejsou povoleny.