WireGuard VPN na VPS - instalacja i konfiguracja
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Bezpieczeństwo
WireGuard to nowoczesny protokół VPN, który zrewolucjonizował podejście do sieci prywatnych. Zamiast setek linii konfiguracji i skomplikowanej infrastruktury certyfikatów (jak w OpenVPN), WireGuard konfiguruje się w kilkanaście minut. Działa jako moduł jądra Linuxa, jest szybszy, prostszy i ma mniejszą powierzchnię ataku. Doskonały do bezpiecznego dostępu do VPS, łączenia serwerów w prywatną sieć lub tunelowania całego ruchu.
Co to jest WireGuard?
WireGuard to darmowy, otwarty protokół VPN, który tworzy szyfrowany tunel między urządzeniami. Od wersji 5.6 jest wbudowany w jądro Linuxa, a oficjalne aplikacje są na Windows, macOS, Androida i iOS. Nie ma tu serwera certyfikatów ani loginów: każde urządzenie (peer) ma parę kluczy, a w konfiguracji wpisujesz klucze publiczne urządzeń, którym ufasz. Ruch idzie po UDP i jest szyfrowany ChaCha20-Poly1305.
W praktyce WireGuard na VPS daje Ci własny serwer VPN: laptop i telefon łączą się z VPS-em, a ruch wychodzi do internetu z jego adresu IP albo trafia tylko do prywatnej sieci Twoich serwerów. Wymagania są małe:
- Wirtualizacja KVM - własne jądro, moduł WireGuard działa od razu. Na kontenerach
(OpenVZ, LXC) moduł zależy od hosta, często zostaje tylko wolniejszy
wireguard-go. - System - Ubuntu 20.04+ lub Debian 11+ (pakiet
wireguardw oficjalnych repozytoriach). - Zasoby - dla kilku urządzeń wystarczy 1 vCPU i 512 MB do 1 GB RAM. Przy full tunnel liczy się limit transferu w planie.
- Publiczny adres IPv4 i możliwość otwarcia portu UDP (także w zaporze w panelu dostawcy).
Jeśli dopiero wybierasz serwer, porównanie planów i scenariuszy znajdziesz w poradniku jaki VPS wybrać.
Instalacja WireGuard na Ubuntu/Debian
# Ubuntu 20.04+ / Debian 11+ (WireGuard jest w oficjalnych repozytoriach) apt update apt install -y wireguard wireguard-tools # Sprawdzenie wersji wg --version # Włączenie IP forwarding (wymagane dla full-tunnel VPN), trwale po restarcie echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf sysctl --system
Generowanie kluczy - serwer i klient
WireGuard używa kryptografii krzywych eliptycznych (Curve25519). Każdy peer - serwer i każdy klient - ma własną parę kluczy:
# Na serwerze VPS - generuj klucze serwera cd /etc/wireguard umask 077 # bezpieczne uprawnienia (tylko root) wg genkey | tee server_private.key | wg pubkey > server_public.key cat server_private.key # skopiuj - potrzebny w konfiguracji cat server_public.key # skopiuj - podasz klientom # Na komputerze klienta - generuj klucze klienta wg genkey | tee client_private.key | wg pubkey > client_public.key
Konfiguracja serwera - /etc/wireguard/wg0.conf
# /etc/wireguard/wg0.conf (serwer VPS) [Interface] Address = 10.8.0.1/24 # IP serwera w sieci VPN ListenPort = 51820 # port UDP PrivateKey = KLUCZ_PRYWATNY_SERWERA # Routing - przekazuj ruch klientów do internetu (full tunnel) PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # Klient 1 (laptop) [Peer] PublicKey = KLUCZ_PUBLICZNY_KLIENTA_1 AllowedIPs = 10.8.0.2/32 # IP klienta 1 w sieci VPN # Klient 2 (telefon) [Peer] PublicKey = KLUCZ_PUBLICZNY_KLIENTA_2 AllowedIPs = 10.8.0.3/32
Uwaga: zamień eth0 na nazwę swojego interfejsu sieciowego (sprawdź przez ip a - może to być ens3, ens18 lub inne).
Konfiguracja klienta
# /etc/wireguard/wg0.conf (klient - Linux) [Interface] Address = 10.8.0.2/24 # IP klienta w sieci VPN PrivateKey = KLUCZ_PRYWATNY_KLIENTA DNS = 1.1.1.1 # opcjonalnie: DNS przez VPN [Peer] PublicKey = KLUCZ_PUBLICZNY_SERWERA Endpoint = IP_TWOJEGO_VPS:51820 # publiczny adres IP i port serwera AllowedIPs = 0.0.0.0/0 # full tunnel (cały ruch przez VPN) # AllowedIPs = 10.8.0.0/24 # split tunnel (tylko sieć VPN) PersistentKeepalive = 25 # wysyłaj keepalive co 25s (ważne za NAT)
Klienci WireGuard: Windows, macOS, Android i iOS (kod QR)
Na Windows i macOS zainstaluj oficjalną aplikację WireGuard ze strony wireguard.com (macOS:
App Store), a następnie zaimportuj plik .conf o tej samej treści co konfiguracja
klienta Linux powyżej. Na telefonie najwygodniej jest zeskanować kod QR wygenerowany na serwerze:
# Na serwerze: klucze i konfiguracja dla telefonu apt install -y qrencode cd /etc/wireguard wg genkey | tee telefon_private.key | wg pubkey > telefon_public.key # Plik telefon.conf: jak konfiguracja klienta powyżej, # z PrivateKey = zawartość telefon_private.key i Address = 10.8.0.3/24 # Kod QR w terminalu - zeskanuj w aplikacji WireGuard (Dodaj tunel - Skanuj kod QR) qrencode -t ansiutf8 < telefon.conf # Po zeskanowaniu usuń plik z kluczem prywatnym telefonu rm telefon.conf telefon_private.key
Każdy nowy klient to nowa sekcja [Peer] w wg0.conf serwera z kolejnym
adresem (10.8.0.4/32, 10.8.0.5/32...). Zmiany wczytasz bez zrywania połączeń pozostałych klientów:
# Przeładowanie peerów bez restartu interfejsu wg syncconf wg0 <(wg-quick strip wg0)
UFW - reguły firewalla
# Otwórz port UDP 51820 na serwerze VPS ufw allow 51820/udp ufw allow OpenSSH # WAŻNE: nie zablokuj SSH! ufw enable # Sprawdzenie ufw status verbose
Uruchamianie - wg-quick
# Na serwerze - uruchom interfejs wg-quick up wg0 # Autostart po restarcie serwera systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0 # Na kliencie - włącz/wyłącz VPN wg-quick up wg0 wg-quick down wg0 # Sprawdzenie statusu wg show
Weryfikacja połączenia
# Na serwerze - lista peerów i statystyki wg show # Przykładowy output: # interface: wg0 # public key: ABC... # listening port: 51820 # # peer: XYZ... (klucz publiczny klienta) # endpoint: 1.2.3.4:12345 # allowed ips: 10.8.0.2/32 # latest handshake: 5 seconds ago <-- połączony! # transfer: 1.23 MiB received, 456 KiB sent # Na kliencie - ping serwera VPN ping 10.8.0.1 # Sprawdzenie publicznego IP (powinno być IP VPS) curl ifconfig.me
Najczęstsze problemy i jak je naprawić
- Brak "latest handshake" w
wg show- port UDP nie dochodzi do serwera. Sprawdźufw status, zaporę w panelu dostawcy VPS, zgodność portu wEndpointoraz to, czy klucz publiczny serwera u klienta i klucz klienta w[Peer]są poprawne (zamienione klucze to częsty błąd). - Handshake jest, ale nie ma internetu - sprawdź
sysctl net.ipv4.ip_forward(musi być 1), nazwę interfejsu w regule MASQUERADE (eth0vsens3) i czyAllowedIPsklienta to 0.0.0.0/0. - Strony nie otwierają się po nazwie, a ping po IP działa - problem z DNS. Ustaw
w kliencie
DNS = 1.1.1.1albo DNS działający na serwerze VPN. - Część stron ładuje się, duże pliki się zawieszają - zbyt duże MTU (typowe na
LTE i łączach PPPoE). Dodaj w
[Interface]klientaMTU = 1380i sprawdź ponownie. - Tunel znika po restarcie VPS - brak
systemctl enable wg-quick@wg0.
Typowe zastosowania WireGuard na VPS
- Bezpieczny dostęp do VPS - zamknij wszystkie porty (SSH, HTTP, DB) i otwórz tylko port WireGuard. Usługi dostępne tylko przez VPN - niewidzialne z internetu.
- Prywatna sieć między serwerami - połącz kilka VPS w jedną sieć przez WireGuard. Baza danych dostępna tylko w sieci VPN (np. 10.8.0.0/24), backupy przez zaszyfrowany tunel.
- Prywatność internetowa - full tunnel (AllowedIPs = 0.0.0.0/0) ukrywa Twój rzeczywisty IP. Ruch wychodzi z IP Twojego VPS.
- Obejście restrykcji sieci - korporacyjne lub akademickie sieci blokujące określone protokoły lub porty. WireGuard na porcie 443 (UDP) często przechodzi niezauważony.