Jak skonfigurować serwer i klient WireGuard VPN na Ubuntu 20.04?

Skonfiguruj samoobsługową sieć VPN za pomocą Wireguard

A VPN (wirtualna sieć prywatna) umożliwia użytkownikowi zdalne łączenie się z siecią prywatną, tak jakby komputer użytkownika był bezpośrednio podłączony do sieci prywatnej. Technologia została początkowo opracowana w celu umożliwienia zdalnego dostępu do wewnętrznej sieci prywatnej firmy dla pracowników nieobecnych w lokalizacji sieci wewnętrznej.

Serwer VPN jest wdrażany w lokalizacji sieci wewnętrznej. Serwer ten znajduje się w sieci publicznej i pracownik może uzyskać do niego dostęp za pomocą klienta VPN. Do połączenia z serwerem VPN potrzebne jest uwierzytelnienie. Komunikacja między serwerem VPN a klientem VPN jest zabezpieczona za pomocą protokołu tunelowania. Pamiętaj, że ta komunikacja może być szyfrowana lub nie, ale zwykle w większości protokołów VPN jest zaszyfrowana.

Innym zastosowaniem VPN jest: uzyskać anonimowość podczas dostępu do Internetu lub w celu obejścia ograniczeń geograficznych nałożonych podczas uzyskiwania dostępu do niektórych stron internetowych. W takich przypadkach sieć, z którą użytkownik chce się połączyć, nie jest siecią prywatną, lecz Internetem.

Wiele protokołów VPN zostało opracowanych przez lata. Protokoły te wykorzystują różne protokoły tunelowania i algorytmy szyfrowania do komunikacji między serwerem a klientem.

Jednym z takich protokołów, który ostatnio zyskuje szerokie zastosowanie, jest: Wireguard. Wireguard jest lżejszy, prostszy i bardziej wydajny niż dobrze znane, tradycyjnie używane protokoły VPN, takie jak OpenVPN, IPSec. Jest już zaimplementowany w systemach Windows, Mac OS i wielu dystrybucjach Linuksa. W Linuksie jest zaimplementowany jako moduł jądra. Jest dostępny w oficjalnych repozytoriach Ubuntu 20.04.

W tym artykule zobaczymy, jak skonfigurować serwer i klient Wireguard VPN w Ubuntu 20.04.

Instalacja

W tym artykule konfiguruję serwer Wireguard na kliencie Linode i Wireguard Ubuntu 20.04 na moim lokalnym komputerze z Ubuntu 20.04.

Paczka Wireguard instaluje zarówno serwer Wireguard, jak i klienta. Uruchom następujące polecenie zarówno na serwerze, jak i na komputerze klienta.

sudo apt install wireguard

Konfiguracja serwera

Klucze bezpieczeństwa

Musimy wygenerować zestaw par kluczy publiczny/prywatny w celu uwierzytelnienia i zabezpieczenia połączenia Wireguard. Można to zrobić za pomocą następujących poleceń:

sudo su cd /etc/wireguard umask 077 wg genkey | klucz_prywatny | wg pubkey > public_key

Zauważ, że wszystkie zadania konfiguracyjne wykonujemy jako superużytkownik. Powodem jest to, że dostęp do katalogu /etc/wireguard jest zablokowany dla zwykłych użytkowników, a dostępu do katalogu nie można uzyskać tylko z uprawnieniami sudo dla zwykłego użytkownika.

Następnie ustawiamy maskę tworzenia pliku na 077. Oznacza to, że za każdym razem, gdy nowy plik zostanie utworzony w tym folderze przez dowolny proces, jego uprawnienia zostaną automatycznie zamaskowane numerem 077. Np. jeśli w tym folderze tworzony jest plik z uprawnieniami 777, jest on automatycznie maskowany, a uprawnienia faktycznie wynoszą 700. Odbywa się to w taki sposób, że tylko właściciel pliku ma wszystkie uprawnienia do pliku, a wszyscy inni nie mają uprawnień.

W następnej linii generujemy parę kluczy publiczny/prywatny dla serwera. Są zapisywane w plikach prywatny klucz oraz klucz publiczny. Aby wyświetlić klucze, uruchom:

kot klucz_prywatny kot klucz_publiczny

Skopiuj klucz prywatny, potrzebujemy go w następnym kroku.

Notatka: Nigdy nie udostępniaj publicznie swojego klucza prywatnego!

Plik konfiguracyjny

Stwórzmy plik konfiguracyjny dla Wireguard Server. Możesz wybrać dowolną nazwę pliku. Stworzymy plik wg0.conf w tym przykładzie.

vim wg0.conf

Dodaj następujące elementy do pliku.

[Interfejs] Adres = 10.20.43.1/24 SaveConfig = prawda ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j AKCEPTUJ; iptables -t nat -A POSTROUTING -o -j MASKARADA; ip6tables -A FORWARD -i wg0 -j AKCEPTUJ; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j AKCEPTUJ; iptables -t nat -D POSTROUTING -o eth0 -j MASKARADA; ip6tables -D FORWARD -i wg0 -j AKCEPTUJ; ip6tables -t nat -D POSTROUTING -o -j MASKARADA 

Wklej klucz prywatny, który wcześniej skopiowaliśmy do wiersza 5 w powyższym kodzie.

Musimy skonfigurować Wireguard w innej (wirtualnej) podsieci niż adres IP serwera. Tutaj użyłem 10.20.43.1 dla serwera i użyję 10.20.43.2 dla klienta. Można tutaj użyć dowolnej podsieci. Aby uzyskać adres IP serwera i interfejsu, uruchom:

ifconfig

Zanotuj adres IP serwera. Jest to wymagane podczas konfiguracji klienta.

Interfejs używany przez serwer, jak widać na powyższym obrazku, to eth0. Nazwa interfejsu może się różnić w zależności od sieci użytkownika, może to być: wlan0 lub wlp2s0 w przypadku połączenia użytkownika z siecią WiFi za pomocą karty bezprzewodowej.

Zastąp w Wywiesić ogłoszenie oraz Opublikuj w dół z twoim interfejsem; w tym przykładzie jest eth0.Wywiesić ogłoszenie oraz Opublikuj w dół dyrektywy służą do określania, które polecenia powinny być uruchamiane, gdy serwer jest uruchamiany i zatrzymywany. W naszym przykładzie używamy iptables polecenie, aby ustawić reguły IP w taki sposób, aby adres IP serwera był współdzielony przez klientów. Zasady zostaną usunięte po zatrzymaniu serwera.

Zapisz i wyjdź z pliku. Podczas korzystania z vima naciśnij wyjście, a następnie wpisz :wq i naciśnij Wchodzić zapisać i wyjść.

Jeśli używasz ufw firewall na serwerze, musimy zezwolić na połączenia UDP do portu serwera VPN, 51190.

ufw zezwól na 51190/udp

Uruchomienie usługi

Teraz po zakończeniu konfiguracji możemy uruchomić usługę Wireguard VPN.

Umożliwić usługa do uruchomienia w czasie rozruchu, uruchom:

systemctl włącz wg-quick@wg0

Zwróć uwagę, że tutaj wg0 to nazwa pliku konfiguracyjnego.

Zacząć usługę, uruchom:

usługa wg-quick@wg0 start

Zweryfikować czy usługa została pomyślnie uruchomiona:

serwis wg-quick@wg0 status

Sprawdź, czy interfejs utworzyliśmy w pliku konfiguracyjnym uruchomiony za pomocą polecenia IP.

ip program wg0

Serwer VPN Wireguard jest teraz skonfigurowany i uruchomiony. Skonfigurujmy teraz klienta.

Konfiguracja klienta

Konfiguracja klienta dla Wireguard jest mniej więcej taka sama jak konfiguracja serwera. Generujemy klucze dla klienta, a następnie tworzymy plik konfiguracyjny.

Klucze bezpieczeństwa

Aby wygenerować klucz publiczny/prywatny sparuj dla klienta, uruchom:

sudo su cd /etc/wireguard umask 077 wg genkey | koszulka client_private_key | wg pubkey > client_public_key

Klucze publiczne i prywatne klienta są teraz generowane odpowiednio w plikach klucz_prywatny_klienta oraz klucz_publiczny_klienta.

Sprawdź, czy zostały utworzone, używając Kot Komenda.

kot client_private_key kot client_public_key

Skopiuj wyświetlony klucz prywatny, ponieważ musimy go dodać do pliku konfiguracyjnego klienta.

Plik konfiguracyjny

Utwórz plik konfiguracyjny z dowolną nazwą. Będziemy go tworzyć z nazwą klient wg0 dla tego przykładu.

vim wg0-client.conf

Dodaj następującą konfigurację.

[Interfejs] # Adres IP i klucz prywatny adresu klienta = 10.20.43.2/24 Klucz prywatny = [Peer] # Klucz publiczny, adres IP i port serwera Klucz publiczny = Punkt końcowy = :51190 Dozwolone adresy IP = 0.0.0.0/0, : :/0

Wprowadź adres podsieci klienta. Jak opisano wcześniej, używamy 10.20.43.2 dla klienta w tym przykładzie.

Dodaj klucz prywatny klienta wygenerowane w poprzednim kroku do linii 4 w powyższym kodzie konfiguracyjnym.

W sekcji „Peer” dodajemy informacje o serwerze Wireguard VPN chcemy się połączyć.

Wprowadź klucz publiczny serwera. Wejdz do adres IP serwera, co już wcześniej zauważyliśmy, i port w podanym formacie przeciwko Punkt końcowy. Jest to port, który określiliśmy w pliku konfiguracyjnym serwera i na którym uruchomiona została usługa VPN na serwerze.

Dozwolone adresy IP należy wprowadzać zgodnie z podanymi (0.0.0.0/0), aby każde żądanie dotyczące dynamicznego publicznego adresu IP używanego przez klienta zawsze było przekazywane do serwera VPN.

Zapisz i wyjdź z pliku. Podczas korzystania z vima naciśnij wyjście, a następnie wpisz :wq i naciśnij Wchodzić zapisać i wyjść.

Włącz obsługę klienta uruchomić z każdym rozruchem i uruchomić go.

systemctl włącz usługę wg-quick@wg-client wg-quick@wg-client start

Zweryfikować jeśli usługa została uruchomiona.

usługa wg-quick@wg-client status

Dodawanie peera do serwera

Teraz mamy uruchomiony serwer i klient VPN. Jednak bezpieczny tunel między nimi nie zostanie ustanowiony, chyba że nawiążemy połączenie peer-to-peer między serwerem a klientem.

Wróć na serwer. Pierwszy, zatrzymaj usługę VPN.

usługa wg-quick@wg0 stop

Następnie otwórz plik konfiguracyjny, aby dodaj konfigurację dla peera (klient).

vim /etc/wireguard/wg0.conf

Dodać następujące wiersze do pliku.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

Ale już, uruchom ponownie usługę VPN.

usługa wg-quick@wg0 start

Otóż ​​to! To jest cała konfiguracja potrzebna do konfiguracji klienta i serwera Wireguard VPN. Przetestujmy teraz naszą sieć VPN.

Testowanie VPN

Najpierw wykonajmy prosty ping od klienta do serwera, aby upewnić się, że komunikacja tunelowa VPN działa. Uruchom następujące na kliencie:

ping 10.20.43.1

Następny, otwórz przeglądarkę internetową i otwórz dowolną witrynę aby sprawdzić, czy możesz połączyć się z Internetem z komputera klienta. Możesz także sprawdzić połączenie internetowe z wiersza poleceń, używając wget.

wget 

Teraz sprawdziliśmy łączność tunelową i łączność internetową. Jeśli oba działają, musimy teraz upewnić się, że cały ruch internetowy przychodzący do klienta przechodzi przez serwer.

W tym celu wystarczy sprawdzić adres IP klienta widziany przez Internet. Jednym ze sposobów, aby to zrobić, jest przejście do whatsmyip.org. Albo z wiersza poleceń możemy wysłać zapytanie do innej podobnej usługi o nazwie IP info, używając Curl.

Uruchom następujące na komputerze klienta

curl //ipinfo.io/ip

Tak. Jest to publiczny adres IP Linode, na którym znajduje się serwer VPN. W ten sposób uzyskuje się anonimowość za pomocą VPN, ponieważ teraz w całym Internecie widoczny jest adres IP serwera VPN, a nie komputera.

Wniosek

Łatwość konfiguracji jest jedną z najważniejszych zalet Wireguard w porównaniu z tradycyjnym oprogramowaniem VPN, takim jak OpenVPN, które wymaga wyższego poziomu znajomości sieci i routingu, aby skonfigurować. Jednak brakuje szczegółowej oficjalnej dokumentacji dla Wireguard, co może powodować problemy, jeśli twoja konfiguracja Wireguard zgłasza błędy lub nie działa zgodnie z oczekiwaniami.

Niemniej jednak Wireguard jest doskonałym wyborem, jeśli chcesz mieć VPN z własnym hostem do bezpiecznej komunikacji przez Internet. Aby dowiedzieć się więcej o Wireguard oraz protokołach i technologiach, z których korzysta, możesz sprawdzić oficjalną stronę.