Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

OpenVPN na VPS — instalacja, certyfikaty Easy-RSA, konfiguracja klienta i kill switch

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Bezpieczeństwo

Własny serwer VPN na VPS to pełna kontrola nad ruchem sieciowym, brak limitów prędkości i brak logowania przez zewnętrznego dostawcę. OpenVPN to sprawdzone, open-source rozwiązanie działające na Linuksie, Windows, macOS i urządzeniach mobilnych. W tym przewodniku skonfigurujesz działający tunel VPN od zera — od instalacji Easy-RSA przez generowanie certyfikatów aż do pliku .ovpn dla klienta i kill switcha.

Instalacja OpenVPN i Easy-RSA

Zacznij od aktualizacji systemu i instalacji pakietów. Poniższe komendy działają na Ubuntu 22.04 / Debian 12:

sudo apt update && sudo apt upgrade -y
sudo apt install -y openvpn easy-rsa

# Sprawdź wersje
openvpn --version
ls /usr/share/easy-rsa/

Utwórz katalog PKI (Public Key Infrastructure) dla Easy-RSA:

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

# Edytuj vars — ustaw dane organizacji
nano vars

W pliku vars zmień pola organizacji (opcjonalne, ale porządne):

set_var EASYRSA_REQ_COUNTRY    "PL"
set_var EASYRSA_REQ_PROVINCE   "Mazowieckie"
set_var EASYRSA_REQ_CITY       "Warszawa"
set_var EASYRSA_REQ_ORG        "MojaFirma"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "IT"
set_var EASYRSA_KEY_SIZE       2048
set_var EASYRSA_CA_EXPIRE      3650
set_var EASYRSA_CERT_EXPIRE    825

Generowanie certyfikatów Easy-RSA

Inicjalizacja PKI, budowa CA, generowanie certyfikatu serwera i klucza Diffie-Hellman:

cd ~/openvpn-ca

# 1. Inicjalizacja PKI
./easyrsa init-pki

# 2. Buduj CA (Certificate Authority) — podaj hasło i Common Name
./easyrsa build-ca

# 3. Generuj klucz i CSR serwera (bez hasła — nopass)
./easyrsa gen-req server nopass

# 4. Podpisz certyfikat serwera przez CA
./easyrsa sign-req server server

# 5. Parametry Diffie-Hellman (może zająć kilka minut)
./easyrsa gen-dh

# 6. Klucz HMAC (ochrona przed atakami DoS na handshake)
openvpn --genkey secret pki/ta.key

# 7. Certyfikat klienta (np. dla laptop-jan)
./easyrsa gen-req laptop-jan nopass
./easyrsa sign-req client laptop-jan

Skopiuj pliki do katalogu OpenVPN:

sudo cp pki/ca.crt /etc/openvpn/server/
sudo cp pki/issued/server.crt /etc/openvpn/server/
sudo cp pki/private/server.key /etc/openvpn/server/
sudo cp pki/dh.pem /etc/openvpn/server/
sudo cp pki/ta.key /etc/openvpn/server/

# Uprawnienia — klucze prywatne tylko dla root
sudo chmod 600 /etc/openvpn/server/server.key
sudo chmod 600 /etc/openvpn/server/ta.key

Konfiguracja serwera OpenVPN

Utwórz plik konfiguracyjny serwera /etc/openvpn/server/server.conf:

# Protokół i port
proto udp
port 1194

# Interfejsy wirtualne
dev tun

# Certyfikaty
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem

# HMAC ochrona handshake
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-GCM
auth SHA256

# Sieć VPN — pula adresów dla klientów
server 10.8.0.0 255.255.255.0

# Routuj CAŁY ruch klientów przez VPN
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"

# Keepalive i limity
keepalive 10 120
max-clients 10

# Bezpieczeństwo — drop uprawnień po starcie
user nobody
group nogroup
persist-key
persist-tun

# Logi
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3

Włącz IP forwarding i uruchom usługę:

# Włącz IP forwarding (trwale)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# iptables NAT — maskuj ruch VPN jako publiczne IP serwera
IFACE=$(ip route | grep default | awk '{print $5}')
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $IFACE -j MASQUERADE

# Zapisz reguły iptables
sudo apt install -y iptables-persistent
sudo netfilter-persistent save

# Uruchom i włącz autostart OpenVPN
sudo systemctl start openvpn-server@server
sudo systemctl enable openvpn-server@server
sudo systemctl status openvpn-server@server

Konfiguracja klienta — plik .ovpn

Plik .ovpn to self-contained konfiguracja klienta — zawiera certyfikaty wbudowane inline. Utwórz skrypt generujący plik dla klienta laptop-jan:

#!/bin/bash
# gen-client-ovpn.sh
CLIENT=${1:-laptop-jan}
SERVER_IP="1.2.3.4"   # publiczne IP Twojego VPS
PKI_DIR="/root/openvpn-ca/pki"
OUTPUT="${CLIENT}.ovpn"

cat > "$OUTPUT" <<EOF
client
dev tun
proto udp
remote $SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-GCM
auth SHA256
key-direction 1
verb 3
EOF

echo "<ca>"          >> "$OUTPUT"
cat "$PKI_DIR/ca.crt"  >> "$OUTPUT"
echo "</ca>"         >> "$OUTPUT"

echo "<cert>"                              >> "$OUTPUT"
cat "$PKI_DIR/issued/${CLIENT}.crt"      >> "$OUTPUT"
echo "</cert>"                             >> "$OUTPUT"

echo "<key>"                               >> "$OUTPUT"
cat "$PKI_DIR/private/${CLIENT}.key"     >> "$OUTPUT"
echo "</key>"                              >> "$OUTPUT"

echo "<tls-auth>"                          >> "$OUTPUT"
cat "$PKI_DIR/ta.key"                      >> "$OUTPUT"
echo "</tls-auth>"                         >> "$OUTPUT"

echo "Wygenerowano: $OUTPUT"
chmod +x gen-client-ovpn.sh
sudo bash gen-client-ovpn.sh laptop-jan

# Skopiuj .ovpn do klienta przez SCP
scp laptop-jan.ovpn user@komputer-klienta:/home/user/

Kill switch — blokada ruchu poza VPN

Kill switch uniemożliwia wyciek danych przez publiczne łącze gdy VPN się rozłączy. Dodaj do pliku klienta .ovpn lub skonfiguruj iptables na kliencie:

# Kill switch przez iptables (na komputerze klienta)
# Zapisz w /etc/openvpn/client/kill-switch.sh

#!/bin/bash
VPN_SERVER="1.2.3.4"   # IP serwera VPN
VPN_PORT="1194"

# Zresetuj reguły
iptables -F
iptables -X

# Domyślna polityka DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Zezwól na loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Zezwól na nawiązanie połączenia z serwerem VPN
iptables -A OUTPUT -d $VPN_SERVER -p udp --dport $VPN_PORT -j ACCEPT
iptables -A INPUT  -s $VPN_SERVER -p udp --sport $VPN_PORT -j ACCEPT

# Zezwól na CAŁY ruch przez interfejs tun0 (VPN)
iptables -A INPUT  -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT

echo "Kill switch aktywny. Ruch tylko przez tun0."

Możesz też użyć dyrektywy w pliku .ovpn (dla klientów Linux):

# Dodaj do pliku .ovpn klienta:
script-security 2
up /etc/openvpn/client/kill-switch.sh

Porównanie protokołów VPN

Protokół Port domyślny Wydajność Konfiguracja Kiedy używać
OpenVPN UDP 1194/UDP Dobra Średnia Standardowy VPN, routing ruchu
OpenVPN TCP 443/TCP Gorsza (double TCP) Średnia Sieci z blokadą UDP, DPI
WireGuard 51820/UDP Najlepsza Prosta Nowe projekty, mobilne klienty
IPSec/IKEv2 500/UDP Bardzo dobra Złożona Urządzenia mobilne (natywne wsparcie iOS)
L2TP/IPSec 1701/UDP Słaba Prosta Legacy — unikaj w nowych projektach

Unieważnienie certyfikatu klienta (odwołanie dostępu)

Gdy klient odchodzi z firmy lub zgubia urządzenie — unieważnij jego certyfikat bez restartu VPN:

cd ~/openvpn-ca

# Unieważnij certyfikat klienta
./easyrsa revoke laptop-jan

# Wygeneruj nową listę CRL
./easyrsa gen-crl

# Skopiuj CRL do OpenVPN
sudo cp pki/crl.pem /etc/openvpn/server/

# Dodaj do server.conf (raz):
# crl-verify /etc/openvpn/server/crl.pem
sudo systemctl reload openvpn-server@server

Najczęstsze pytania

Jaki port wybrać dla OpenVPN — UDP 1194 czy TCP 443? +
UDP 1194 to domyślny port OpenVPN — niższe opóźnienia, lepsza wydajność dla tunelu VPN. TCP 443 wybierz gdy sieć blokuje UDP lub chcesz udawać ruch HTTPS (głęboka inspekcja pakietów go przepuści). Wadą TCP jest podwójny narzut retransmisji (TCP wewnątrz TCP), co pogarsza latencję przy stratach pakietów.
Co to jest Easy-RSA i do czego służy? +
Easy-RSA to zestaw skryptów do zarządzania własnym CA (Certificate Authority). Generuje klucze i certyfikaty dla serwera OpenVPN oraz każdego klienta. Bez Easy-RSA musiałbyś ręcznie używać openssl do generowania CA, podpisywania CSR i zarządzania CRL. Easy-RSA automatyzuje ten proces: init-pki tworzy strukturę katalogów, build-ca generuje CA, gen-req tworzy klucz+CSR, sign-req podpisuje certyfikat.
Jak działa kill switch w OpenVPN? +
Kill switch blokuje cały ruch sieciowy gdy tunel VPN się rozłączy — zamiast przesyłać dane przez niezabezpieczone łącze ISP. Na Linuksie implementuje się go regułami iptables: domyślna polityka DROP na OUTPUT, następnie reguły akceptujące tylko ruch przez interfejs tun0 (VPN) i niezbędny ruch (DNS do VPN, sam port OpenVPN). Przy zerwaniu połączenia tun0 znika i żaden pakiet nie przechodzi.
Czy mogę podłączyć wiele urządzeń do jednego konta OpenVPN? +
Tak, ale każde urządzenie powinno mieć własny certyfikat klienta (osobna para klucz+cert z Easy-RSA). Używanie tego samego certyfikatu na wielu urządzeniach jednocześnie powoduje konflikty IP i rozłączanie. W pliku server.conf dyrektywa duplicate-cn pozwala na wielokrotne użycie tego samego CN (common name), ale jest to ryzykowne. Zalecane: osobne certyfikaty per urządzenie.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.