Wireguard – szybkie wdrożenie nowoczesnego tunelu VPN

Wireguard jest najnowszą implementacją tuneli VPN. Wszędzie spotykałem się z informacją, iż konfiguracja zajmuje 5 minut. I to prawda. Chwila, moment i działa – po prostu 🙂 Oprogramowanie działa pod kontrolą wszystkich systemów operacyjnych – zainstalujemy go zarówno na Windowsie jak i Linuxie, a także na telefonach z systemem Android oraz iOS.

Poniższa konfiguracja została wykonana na serwerze CentOS 7. Klientem był host z systemem Debian 10 oraz telefon z systemem iOS 13.

* Z racji blokowania portów przez mojego ISP wykorzystałem port HTTPS (443).

Instalacja
Na serwerze musimy zainstalować najpierw elrepo oraz epel.
yum install elrepo-release epel-release

Kolejnym krokiem jest zaktualizowanie pakietów w repozytoriach:
yum check-update

Ostatnim krokiem jest instalacja pakietów odpowiedzialnych za Wireguard:
yum install kmod-wireguard wireguard-tools

Generowanie kluczy uwierzytelniających
Wireguard do uwierzytelniania użytkowników wykorzystuje klucze. Przejdźmy do katalogu, w którym będziemy je przechowywać (np. /etc/wireguard). Następnie ustawmy maskę dla nowych plików:
umask 077

Klucze tworzymy według schematu:
wg genkey | tee prywatny_klucz | wg pubkey > publiczny_klucz

W efekcie finalnym powinniśmy mieć dwie pary kluczy: prywatny i publiczny dla serwera oraz klienta.
Generowanie kluczy dla Wireguard

Routing
Aby traktować serwer jako bramę domyślną dla całego ruchu wychodzącego od klientów musimy uruchomić routing. W tym celu edytujemy plik /etc/sysctl.conf i usuwamy komentarz w linii (jeżeli plik jest pusty to dopisujemy):
net.ipv4.ip_forward=1

Aby zmiany zostały wdrożone w życie wykonujemy:
sysctl -p

Dodatkowo musimy włączyć opcję routingu w jeszcze jednym miejscu. W tym celu wystarczy jedynie wywołanie komendy:
echo 1 > /proc/sys/net/ipv4/ip_forward
Włączenie routingu Linux

Konfiguracja serwera
Plik zawierający konfigurację serwera musimy utworzyć od zera. Tworzymy więc /etc/wireguard/wg0.conf (przyjęte jest, iż interfejs dla tuneli Wireguard oznaczamy jako wg0). To właśnie w nim znajdują się informacje o interfejsie, na jakim będzie nasłuchiwał serwer oraz konfiguracje klientów.
Plik koniguracyjny VPN Wireguard

[Interface] – sekcja odpowiedzialna za interfejs serwera
Address – prywatny adres serwera, który będzie widoczny w tunelu VPN
SaveConfig – nadpisywanie pliku po dodaniu nowego klienta z cli (jeżeli ustawimy na yes wówczas skasuje nam nasz zapis, m.in. komentarze)
ListenPort – port, na jakim nasłuchuje serwer
PrivateKey – klucz prywatny serwera (cat server_private_key)
DNS – ustawienia serwerów DNS

[Peer] – sekcja definiująca klienta
# xxx – komentarz identyfikujący klienta
PublicKey – klucz publiczny klienta
AllowedIPs – prywatny adres IP przydzielony klientowi

Uruchamianie serwera
Przed uruchomieniem serwera musimy nadać odpowiednie uprawnienia dla pliku konfiguracyjnego usługi. W tym celu zmieniamy właściciela oraz grupę na root, a następnie nadajemy uprawnienia 600.

chown root:root /etc/wireguard/wg0.conf
chmod 600 /etc/wireguard/wg0.conf

Start serwera następuje poprzez podniesienie interfejsu wg0:
wg-quick up wg0

Aby usługa Wireguard uruchamiała się podczas startu systemu należy wykorzystać systemctl:
systemctl enable wg-quick@wg0.service

Sprawdzenie informacje o usłudze następuje poprzez wydanie polecania wg
Status serwera Wireguard

Konfiguracja klienta z systemem Linux Debian 10
Najpierw musimy dopisać dodatkowe repozytorium do listy w /etc/apt/sources.list:
deb http://deb.debian.org/debian buster-backports main

Po odświeżeniu listy pakietów instalujemy wireguard oraz wireguard-tools.

Następnie tworzymy plik konfiguracyjny /etc/wireguard/wg0-client.conf z następującą zawartością:
Plik konfiguracyjny klienta Wireguard
[Interface] – sekcja odpowiedzialna za interfejs kliencki
Address – prywatny adres IP przydzielony dla danego klienta
PrivateKey – klucz prywatny klienta (wystarczy zrobić cat pliku na serwerze, nie trzeba przenosić na klienta)
[Peer] – sekcja odpowiedzialna za konfigurację serwera
PublicKey – klucz publiczny serwera
AllowedIPs – adresy, do jakich klient może wysyłać pakiety
Endpoint – adres publiczny serwera wraz z numerem portu

Podłączenie klienta do tunelu VPN
Gdy mamy już na kliencie (przyp. system Debian 10) przygotowany plik konfiguracyjny operacje podłączania / rozłączania z tunelem wykonujemy poprzez:
wg-quick up/down wg0-client
up – podłączenie
down – rozłączenie
wg0-client – nazwa pliku konfiguracyjnego, który utworzyliśmy wcześniej
Nawiązywanie połączenia z serwerem Wireguard

Dodawanie nowego klienta na serwerze
Dodajmy teraz nowego klienta, którym będzie telefon z systemem iOS. Możemy tego dokonać w dwojaki sposób:
1. dopisanie nowego klienta do pliku konfiguracyjnego serwera
2. wykorzystanie polecania wg o składni:
wg set wg0 peer new_public_client_key allowed-ips x.x.x.x/32
wg0 – interfejs wykorzystywany przez nasz serwer
new_public_client_key – klucz publiczny nowego klienta
x.x.x.x/32 – adres IP przydzielany klientowi

W pliku konfiguracyjnym dla parametru SaveConfig przypisaliśmy wartość false, przez co nie możemy wykorzystać polecenia z punktu drugiego. Dodajmy więc klienta bezpośrednio do pliku wg0.conf
Plik konfiguracyjny Wireguard zawierający kilku klientów

Po dodaniu musimy przeładować usługę, aby od nowa wczytała plik konfiguracyjny (z nowym klientem).
Status serwera Wireguard z podłączonymi klientami

Konfiguracja tunelu na telefonie z systemem iOS
Na sam koniec pozostało skonfigurowanie telefonu jako klienta tunelu VPN. Najszybszym sposobem, jaki udało mi się znaleźć, jest utworzenie na serwerze pliku konfiguracyjnego dla klienta (tak samo jak na Debianie), a następnie przesłanie go na telefon w formie kodu QR. Utwórzmy więc plik client-iphone.conf
Plik konfiguracyjny dla klienta z iPhone

Następnie wygenerujmy na podstawie tego pliku kod QR:
qrencode -t ansiutf8 < client-iphone.conf

Na telefonie ze sklepu App Store instalujemy aplikację o nazwie WireGuard. Przyciskiem + dodajemy nowe połączenie, a następnie wybieramy Create from QR code i zczytujemy wygenerowany przed chwilą kod.

* W przypadku błędu podczas dodawania nowego tunelu należy zweryfikować plik konfiguracyjny utworzony dla telefonu.
Dodawanie nowego tunelu w aplikacji Wireguard na telefonie iPhone

Po dodaniu tunelu należy go jedynie aktywować z poziomu aplikacji. O pozytywnym ustanowieniu połączenia świadczy ikona VPN w górnym pasku (obok poziomu zasięgu).
Konfiguracja tunelu na kliencie Wireguard - iPhone

W celu świadczenia usług na najwyższym poziomie stosujemy pliki cookies, które będą zamieszczane w Państwa urządzeniu (komputerze, laptopie, smartfonie). W każdym momencie mogą Państwo dokonać zmiany ustawień Państwa przeglądarki internetowej i wyłączyć opcję zapisu plików cookies. View more
Zaakceptuj