Jak skonfigurować własny serwer VPN WireGuard z wg-easy
wg-easy to aplikacja Docker, która uruchamia serwer VPN WireGuard razem z panelem webowym. W panelu tworzysz klientów, pobierasz ich pliki konfiguracyjne lub skanujesz kod QR telefonem oraz widzisz, którzy klienci są połączeni. Ten poradnik pokazuje, jak zainstalować aktualną wersję, wg-easy v15, na serwerze Linux za pomocą Docker Compose i połączyć pierwsze urządzenie.
wg-easy v15 różni się od starszych wersji. Hasło administratora nie jest już przekazywane w zmiennej PASSWORD: kontener uruchomiony z PASSWORD lub PASSWORD_HASH nie startuje. Login i hasło ustawia się teraz w przeglądarce podczas pierwszego uruchomienia.
Wymagania
Wystarczy VPS z publicznym adresem IP i dostępem root lub sudo. wg-easy jest lekki: 1 vCPU i 1 GB RAM wystarczą do osobistego VPN. Polecenia w tym poradniku sprawdzono w Ubuntu 24.04 LTS. Ponieważ wg-easy działa w Dockerze, działają one tak samo w Ubuntu 22.04, Debianie 12, AlmaLinux 9 i Rocky Linux 9.
Jeśli nie chcesz niczego instalować ręcznie, zamów w marketplace aplikacji INTROSERV VPS z już wdrożonym wg-easy i przejdź od razu do pierwszego uruchomienia.
Instalacja Dockera
Połącz się z serwerem przez SSH i zainstaluj Docker Engine z wtyczką Compose za pomocą oficjalnego skryptu:
curl -fsSL https://get.docker.com | sudo sh
Sprawdź, czy Docker i Compose są zainstalowane:
sudo docker --version sudo docker compose version
Pobranie pliku docker-compose.yml
wg-easy instaluje się za pomocą oficjalnego pliku docker-compose.yml z repozytorium projektu. Utwórz dla niego katalog i pobierz plik:
sudo mkdir -p /etc/docker/containers/wg-easy sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml
Najważniejsze wiersze pliku to obraz i porty:
image: ghcr.io/wg-easy/wg-easy:15 ports: - "51820:51820/udp" - "51821:51821/tcp"
Port 51820/udp jest używany przez sam WireGuard, a port 51821/tcp przez panel webowy. Tag 15 oznacza, że aktualizacje pozostają w obrębie wersji 15. Konfiguracja i klienci są przechowywani w woluminie Dockera, dlatego zostają zachowani po ponownym utworzeniu kontenera.
Uruchomienie wg-easy
Przejdź do katalogu z plikiem i uruchom kontener:
cd /etc/docker/containers/wg-easy sudo docker compose up -d
Sprawdź, czy kontener działa:
sudo docker compose ps
W kolumnie STATUS powinno być widoczne Up, a w kolumnie PORTS porty 51820/udp i 51821/tcp.
Otwarcie portu w zaporze
Klienci łączą się z serwerem przez port UDP 51820. Jeśli na serwerze włączony jest UFW, zezwól na ten port:
sudo ufw allow 51820/udp
W AlmaLinux i Rocky Linux z firewalld użyj:
sudo firewall-cmd --permanent --add-port=51820/udp sudo firewall-cmd --reload
Otwarcie panelu webowego
wg-easy v15 nie pozwala na logowanie do panelu przez zwykły HTTP. Najprostszym bezpiecznym sposobem jest otwarcie panelu przez tunel SSH. Na swoim komputerze uruchom:
ssh -L 51821:localhost:51821 USER@SERVER_IP
Pozostaw tę sesję SSH otwartą i przejdź w przeglądarce pod adres http://localhost:51821.
Możesz też zezwolić na dostęp przez zwykły HTTP: w docker-compose.yml odkomentuj blok environment, ustaw INSECURE=true i ponownie uruchom sudo docker compose up -d. W takim przypadku hasło do panelu jest wysyłane bez szyfrowania, dlatego używaj tej opcji wyłącznie do testów. Dla stałego dostępu przez nazwę domeny umieść panel za reverse proxy z HTTPS.
Zakończenie pierwszego uruchomienia
Przy pierwszym uruchomieniu wg-easy otwiera kreator konfiguracji. Po ekranie powitalnym utwórz konto administratora: wpisz nazwę użytkownika i hasło, a następnie potwierdź hasło.

Gdy kreator zapyta, czy masz istniejącą konfigurację, wybierz No. Spowoduje to utworzenie nowej konfiguracji.
Na następnym ekranie podaj Host i Port, z których klienci będą korzystać przy łączeniu. W polu Host wpisz publiczny adres IP lub nazwę domeny serwera, a nie localhost, nawet jeśli panel otworzyłeś przez tunel SSH. Pozostaw Port jako 51820. Przycisk Suggest wpisuje adres, który wg-easy wykrywa automatycznie.

Adres z pola Host trafia do konfiguracji każdego klienta. Jeśli wpiszesz błędny adres, klienci nie będą mogli się połączyć.
Po zakończeniu pracy kreatora zaloguj się, używając utworzonej nazwy użytkownika i hasła.
Tworzenie klienta
Na stronie głównej panelu kliknij New Client, wpisz nazwę urządzenia, na przykład laptop lub phone, i potwierdź. Klient pojawi się na liście. Obok znajdują się przyciski do wyświetlenia kodu QR i pobrania pliku konfiguracyjnego.

Utwórz osobnego klienta dla każdego urządzenia. Dzięki temu możesz wyłączyć lub usunąć dostęp jednego urządzenia bez wpływu na pozostałe.
Połączenie urządzenia
Zainstaluj na swoim urządzeniu oficjalną aplikację WireGuard. Jest dostępna dla Windows, macOS, Androida i iOS na oficjalnej stronie pobierania WireGuard.
Na telefonie otwórz aplikację WireGuard, wybierz dodanie tunelu przez kod QR i zeskanuj kod z panelu.

Na komputerze pobierz w panelu plik konfiguracyjny klienta i zaimportuj go w aplikacji WireGuard za pomocą Import tunnel(s) from file. Następnie kliknij Activate.
W Linuksie zainstaluj wireguard-tools i openresolv. Bez openresolv polecenie wg-quick kończy się błędem na wierszu DNS pliku konfiguracyjnego. W Ubuntu i Debianie:
sudo apt install wireguard-tools openresolv sudo wg-quick up ./CLIENT_NAME.conf
Aby rozłączyć się w Linuksie, uruchom sudo wg-quick down ./CLIENT_NAME.conf.
Sprawdzenie połączenia
Gdy tunel jest aktywny, sprawdź, jaki adres IP widzi internet:
curl -4 ifconfig.me
Polecenie powinno zwrócić adres IP Twojego serwera. Możesz też otworzyć w przeglądarce dowolną stronę do sprawdzania adresu IP. W panelu wg-easy połączony klient pokazuje ostatnią aktywność i ruch.
Zarządzanie klientami
Wszystkimi klientami zarządza się na stronie głównej panelu. Każdego klienta można tymczasowo wyłączyć przełącznikiem obok: urządzenie zostaje na liście, ale nie może się połączyć, dopóki go ponownie nie włączysz. Aby całkowicie odebrać dostęp, usuń klienta. Jego plik konfiguracyjny i kod QR przestają działać natychmiast. Jeśli urządzenie zostanie zgubione lub plik konfiguracyjny mógł zostać skopiowany, usuń tego klienta i utwórz nowego.
Jeśli coś nie działa
Jeśli panel się nie otwiera, sprawdź poleceniem sudo docker compose ps, czy kontener działa, i obejrzyj log:
sudo docker logs wg-easy
Jeśli panel się otwiera, ale nie możesz się zalogować i widzisz komunikat o niezabezpieczonym połączeniu, otworzyłeś go przez zwykły HTTP. Użyj tunelu SSH z poprzedniej sekcji.
Jeśli klient nie może się połączyć, sprawdź, czy port UDP 51820 jest otwarty w zaporze serwera oraz w zaporze panelu dostawcy, jeśli taka istnieje. Otwórz też plik konfiguracyjny klienta i sprawdź wiersz Endpoint: musi zawierać publiczny adres serwera. Jeśli zawiera błędny adres, Host został wpisany nieprawidłowo w kreatorze konfiguracji.
Jeśli tunel jest aktywny, ale urządzenie nie ma internetu, sprawdź log serwera poleceniem sudo docker logs wg-easy i upewnij się, że kontener został uruchomiony z oficjalnego pliku docker-compose.yml bez zmian w sekcji sysctls.
Jeśli w Linuksie wg-quick kończy się błędem dotyczącym resolvconf, zainstaluj openresolv, jak opisano w sekcji o łączeniu urządzenia.
Aktualizacja wg-easy
Aby zainstalować nowszą kompilację wersji 15, pobierz nowy obraz i utwórz kontener ponownie:
cd /etc/docker/containers/wg-easy sudo docker compose pull sudo docker compose up -d
Klienci i ustawienia zostają zachowani, ponieważ są przechowywani w woluminie Dockera.
Zatrzymanie i usunięcie wg-easy
Aby zatrzymać serwer VPN, uruchom w katalogu z plikiem docker-compose.yml:
sudo docker compose down
Konfiguracja pozostaje w woluminie, a polecenie sudo docker compose up -d uruchamia serwer ponownie z tymi samymi klientami.
Aby całkowicie usunąć wg-easy wraz ze wszystkimi klientami i kluczami, dodaj opcję -v:
sudo docker compose down -v
Po wykonaniu sudo docker compose down -v wszystkie konfiguracje klientów przestają działać. Aby ponownie korzystać z VPN, trzeba będzie przejść pierwsze uruchomienie i ponownie utworzyć klientów.