Poradnik jak krok po kroku zainstalować i skonfigurować serwer OpenVPN.

Sprawdzone na najnowszym Debianie 8 Jessie.

Instalacja OpenVPN

Zanim przystąpimy do instalacji czegokolwiek – aktualizacja systemu 🙂

apt-get update
apt-get upgrade

Po zakończeniu aktualizacji instalujemy OpenVPN:

apt-get install openvpn

Konfiguracja OpenVPN

OpenVPN w swojej dokumentacji ma już kilka przykładowych konfiguracji, dlatego posłużymy się jednym z nich…:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

… i dostosujemy do swoich potrzeb:

nano /etc/openvpn/server.conf

Zmieniamy 5 elementów:
1. Podajemy dokładną lokalizację certyfikatów
2. Podwajamy (co najmniej) długość klucza RSA
3. Przekierowujemy ruch internetowy
4. Ustawiamy serwery DNS
5. Zakładamy prawa dostępu

1. Podajemy dokładną lokalizację certyfikatów

# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see „pkcs12” directive in man page).
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret

2. Podwajamy długość klucza RSA

# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh2048.pem

3. Przekierowanie ruchu internetowego

Usuwamy średnik przy push „redirect-gateway def1 bypass-dhcp”:

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
push „redirect-gateway def1 bypass-dhcp”

4. Ustawiamy serwery DNS

Wystarczy usunąć średniki aby aktywować serwery OpenDNS. Jeśli chcemy, zmieniamy na własne.

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
push „dhcp-option DNS 208.67.222.222”
push „dhcp-option DNS 208.67.220.220”

5. Ustawiamy uprawnienia i prawa dostępu

Usuwamy średniki przy wpisach user nobody i group nobody

# It’s a good idea to reduce the OpenVPN
# daemon’s privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
user nobody
group nogroup

Zakończyliśmy wstępną konfigurację serwera OpenVPN 🙂

Ustawiamy przekazywanie pakietów

Serwer OpenVPN „tworzy” sieć lokalną (wewnętrzną) dla swoich użytkowników. Aby po podłączeniu się do serwera mieć Internet musimy włączyć przekazywanie pakietów. W tym celu wystarczy zmienić 0 na 1 w pliku /proc/sys/net/ipv4/ip_forward:

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

oraz ustawić na stałe podczas rozruchu systemu:

nano /etc/sysctl.conf

i odhashować linijkę

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Generowanie kluczy i certyfikatów

W pierwszej kolejności skonfigurujemy i utworzymy główne Certyfikaty Serwera (Certificate Authority).

W tym celu posłużymy się automatycznym generatorem Easy-RSA. Najpierw skopiujemy go do katalogu z OpenVPN:

cp -r /usr/share/easy-rsa/ /etc/openvpn

i stworzymy kolejny katalog z kluczami

mkdir /etc/openvpn/easy-rsa/keys

Konfiguracja zmiennych klucza

Ustawiamy parametry certyfikatu

nano /etc/openvpn/easy-rsa/vars

# These are the default values for fields
# which will be placed in the certificate.
# Don’t leave any of these fields blank.
export KEY_COUNTRY=”PL
export KEY_PROVINCE=”Malopolskie
export KEY_CITY=”Krakow
export KEY_ORG=”Piotr Dyduch
export KEY_EMAIL=”kontakt@piotrdyduch.pl
export KEY_OU=”PiotrDyduch

# X509 Subject Field
export KEY_NAME=”server

Tworzymy klucz Diffie-Hellman

Wcześniej podczas konfiguracji serwera podwoiliśmy wartość dla klucza RSA na 2048, wypada więc go wygenerować:

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Tworzymy certyfikat CA

Przechodzimy do katalogu /etc/openvpn/easy-rsa/

cd /etc/openvpn/easy-rsa/

i inicjujemy tzw. Public Key Infrastructure (PKI):
zwróć uwagę na DWIE kropki!

. ./vars

Po wysłaniu polecenia dostaniemy odpowiedź:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

Następnie czyścimy/usuwamy całą zawartość znajdującą się w /etc/openvpn/easy-rsa/keys

./clean-all

i tworzymy certyfikat CA

./build-ca

Wystarczy ciągle wciskać Enter 😉

Tworzymy certyfikat i klucz dla serwera

Pozostając w katalogu /etc/openvpn/easy-rsa tworzymy certyfikat i klucz serwera

./build-key-server server

gdzie również potwierdzamy wciskając Enter, a na końcu potwierdzając 2 razy wbijając literkę Y i zatwierdzając enterem.

Po utworzeniu certyfikatu i klucza powinniśmy otrzymać taki komunikat:

……
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Włączamy serwer OpenVPN

Zanim jednak to zrobimy musimy skopiować utworzone klucze i certyfikaty do katalogu głównego OpenVPN

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

I dopiero możemy uruchomić OpenVPN:

service openvpn start

UWAGA!

Jeśli stawiamy OpenVPN na OpenVZ, musimy najpierw „stworzyć” kartę sieciową tun

mkdir -p /dev/net
mknod /dev/net/tun c 10 200

w innym przypadku podczas próby włączenia OpenVPN wyskoczy nam w logach błąd:

ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

oraz włączyć maskowanie w iptables:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Aby wszystko załączało się podczas uruchamiania systemu, możemy dodać do pliku /etc/rc.local (przed „exit 0”):

mkdir -p /dev/net
mknod /dev/net/tun c 10 200
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service openvpn restart

Generowanie kluczy dla klientów

Będąc nadal w katalogu /etc/openvpn/easy-rsa utworzymy klucz i certyfikat dla klienta o nazwie piotrek (zaleca się tworzyć klucze i certyfikaty dla każdego urządzenia osobno więc można bardziej sprecyzować nazwę klucza na np. piotreklaptop)

./build-key piotrek

Tutaj również tylko potwierdzamy enterami oraz 2 ostatnie pytania Y.

Stworzyliśmy klucz i certyfikat dla użytkownika piotrek. Teraz musimy stworzyć Profil, który następnie będziemy importować na danym urządzeniu. Zatem znowu posłużymy się przykładową konfiguracją i zaktualizujemy odpowiednie parametry.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/piotrek.ovpn

1. Ustawiamy adres IP serwera

nano /etc/openvpn/easy-rsa/keys/piotrek.ovpn

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote ADRES_IP 1194
;remote my-server-2 1194

2. Odblokowujemy użytkownika i grupę nobody

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

3. Blokujemy ścieżki do certyfikatów

# SSL/TLS parms.
# See the server config file for more
# description. It’s best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
;ca ca.crt
;cert client.crt
;key client.key

4. Zapisujemy i wychodzimy

5. Importujemy CA, certyfikat i klucz do pliku profilu

6. Eksport Profilu

Po wprowadzeniu powyższych kluczy i certyfikatów, mamy gotowy profil klienta OpenVPN. Należy go teraz pobrać i zaimportować na urządzeniu z którego będziemy się łączyć:

Dla Windowsa możemy pobrać klient OpenVPN z oficjalnej witryny OpenVPN. Profil kopiujemy do OpenVPN\config

Dla Androida polecam również oficjalną aplikację OpenVPN Connect.


Komentarze (8)

Dodaj komentarz

Twój adres email nie zostanie opublikowany.


*