Jak utworzyć VPN na Ubuntu 20.04 Za pomocą przewodu

Jak utworzyć VPN na Ubuntu 20.04 Za pomocą przewodu

Wireguard to nowoczesny i bardzo łatwy w konfiguracji VPN dostępny w wielu systemach operacyjnych. Aplikacja jest dostępna w Ubuntu 20.04 Oficjalne repozytoria, więc jest również bardzo łatwy do zainstalowania. W przeciwieństwie do innych oprogramowania, takich jak OpenVPN, które jest oparte na użyciu certyfikatów SSL, WireGuard opiera się na użyciu pary kluczowych. W tym samouczku zobaczymy, jak skonfigurować, w kilku łatwych krokach, serwer VPN i klientów w najnowszej stabilnej wersji Ubuntu.

W tym samouczku nauczysz się:

  • Jak zainstalować WireGuard na Ubuntu 20.04 Focal Fossa
  • Jak stworzyć parę kluczy publicznych i prywatnych
  • Jak skonfigurować serwer i rówieśnik klienta
  • Jak przekierować cały przychodzący ruch do VPN
Wireguard VPN na Ubuntu 20.04

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Ubuntu 20.04 Focal Fossa
Oprogramowanie Wiregruard
Inny Przywileje korzeniowe
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Instalacja

WireGuard jest oficjalnie dostępny w repozytorium „Wszechświata” Ubuntu 20.04 Dlatego możemy go zainstalować przez trafny. Dostępna wersja w momencie pisania jest 1.0.20200319-1ubuntu1:

$ sudo apt instal instaluj wirusGuard 

System poprosi nas o potwierdzenie, że chcemy zainstalować program i jego zależności i zakończy operację w ciągu kilku sekund.

Generowanie kluczy

Musimy wygenerować publiczny i prywatny klucz dla każdego komputera, którego chcemy użyć w naszym VPN. Klucz prywatny powinien być w tajemnicy na maszynie, publiczny służy do dostępu do maszyny od innych rówieśników.

Aby wygenerować klucze, możemy użyć WG pożytek. W pliku konfiguracyjnym WireGuard będziemy musieli odwołać się do prywatnego klucza maszyny, a publiczność będzie używana na innych rówieśnikach. Zauważ, że będziemy odwoływać się bezpośrednio do klawiszy, więc teoretycznie nie musimy przechowywać ich do plików. I tak to jednak zrobimy, tylko dla wygody.

Aby wygenerować klucz prywatny dla naszego serwera, musimy użyć Genkey Podkomenda WG. Polecenie wyświetla utworzony klawisz do Stdout; Aby napisać klucz do pliku, możemy użyć mocy przekierowań powłoki:

$ wg genkey> server_private_key 

Polecenie wygeneruje klucz i przechowuje go do server_private_key Plik, ale podniesie następujące ostrzeżenie:

Ostrzeżenie: pisanie do pliku dostępnego na świecie. Zastanów się nad ustawieniem UMSK na 077 i próbowanie ponownie. 

Dzieje się tak, ponieważ z domyślnym użytkownikiem Umask (002) Pliki są tworzone w trybie 664, Podobnie jak na całym świecie, co nie jest zalecane. Aby rozwiązać ten problem, możemy albo zmienić UMASK użyty w bieżącej sesji powłoki przed utworzeniem plików:

$ UMASK 077 

Lub zmień uprawnienia do plików na 600 po stworzeniu. Tutaj pójdziemy po drugie rozwiązanie.

Gdy nasz klucz prywatny będzie gotowy, możemy wygenerować publiczny taki, który jest na nim oparty. Aby wykonać zadanie, którego używamy pubkey Podkomenda WG. Tak jak wcześniej używamy przekierowań powłoki: najpierw, aby przekazać zawartość server_private_key plik do stdin polecenia, a następnie i przekierować wygenerowany klucz do server_public_key plik:

$ WG Pubkey Server_public_key 

Aby oszczędzić pisanie, możemy wygenerować oba klucze, za pomocą jednego polecenia, które obejmuje użycie skorupy | (rura) operator i trójnik Komenda:

$ WG Genkey | Tee Server_Private_Key | WG pubkey> server_public_key 

Wyjście polecenia po lewej stronie operatora rur (|) jest przekazywany do standardowego wejścia programu po prawej stronie. trójnik Polecenie, zamiast tego pozwól nam przekierować wyjście polecenia zarówno do pliku, jak i standardowego wyjścia (więcej o przekierowaniach powłoki tutaj).

Gdy nasze klucze będą gotowe, możemy utworzyć plik konfiguracyjny serwera.

Plik konfiguracyjny serwera

Aby skonfigurować naszą instalację WireGuard, możemy utworzyć plik konfiguracyjny wywoływany WG0.conf Z następującą zawartością:

[Interfejs] privateKey = adres = 10.0.0.1/24 Listenport = 51820 

Zauważ, że nazwa pliku jest dowolna, ale powinna być oparta na nazwie, której użyjemy dla naszego interfejsu, WG0 w tym przypadku. Ta nazwa zostanie odwołana podczas uruchamiania usługi, jak zobaczymy poniżej.

W naszym przykładzie. [interfejs] Sekcja pliku konfiguracyjnego zawiera następujące pola:

  • Prywatny klucz
  • Adres
  • Słuchanie

Prywatny klucz Wartość pola to nic więcej niż klucz prywatny serwera, który wygenerowaliśmy wcześniej.

w Adres pole określiliśmy adres do przypisania do interfejsu w VPN wraz z maską podsieci za pomocą Cidr notacja. W tym przypadku użyliśmy 10.0.0.1/24, Tak więc nasz adres „serwer” WireGuard w VPN będzie 10.0.0.1, który jest w dostępnym zakresie, które wychodzą 10.0.0.1 Do 10.0.0.254.

Wreszcie w Słuchanie Pole, określiliśmy, na czym Port WireGuard będzie słuchać przychodzącego ruchu. Zasada zezwalająca na wspomniane ruch należy również dodać do naszej zapory. Zrobimy to w następnej sekcji.

Możemy teraz zmienić uprawnienia plików i przenieść je na /itp./Wiregruard informator:

$ CHMOD 600 SERWER_PUBLIC_KEY SERWER_PRIVATE_KEY WG0.conf $ sudo mv server_private_key server_public_key WG0.conf /itp. /WireGuard 

Możemy teraz zacząć WG-Quick usługa określająca nazwę interfejsu WireGuard po @ w nazwie jednostki. Co to za notacja? Jest to funkcja systemd: dzięki niej możemy generować wiele plików jednostkowych na podstawie „szablonu”, przekazując wartość, która zostanie zastąpiona w szablonie, po @ symbol w imieniu urządzenia. To jest treść [email protected] jednostka:

[Jednostka] Opis = przewód przez WG-Quick (8) dla %I po = sieciowy linia.Target NSS-Hookup.Target Wants = Network-Online.Target NSS-Hookup.Dokumentacja docelowa = Man: WG-Quick (8) Dokumentacja = Man: WG (8) Dokumentacja = https: // www.Wiregruard.com/dokumentacja = https: // www.Wiregruard.com/QuickStart/Documentation = https: // git.ZX2C4.COM/SIRUGUARD-TOOLS/About/Src/Man/WG-Quick.8 Dokumentacja = https: // git.ZX2C4.COM/SIREGUARD TOOLS/About/Src/Man/WG.8 [Service] Type = OneShot resztafterexit = tak execstart =/usr/bin/wg-quick w górę %i execStop =/usr/bin/wg-quick w dół %i środowisko = WG_endpoint_Resolution_Retries = Infinity [instalacja] Wantby = Multi-służer.cel 

Wartość, którą określamy po @ w nazwie urządzenia podczas uruchamiania lub zatrzymywania, wymienią %I w ExecStart I Execstop linie. W takim przypadku będziemy używać WG0:

$ sudo systemctl enable-teraz WG-QUICK@WG0 

Z powyższym poleceniem rozpoczęliśmy usługę, a także tworzyliśmy, aby było to automatycznie uruchamiane w rozruchu. Aby zweryfikować naszą konfigurację, możemy uruchomić WG Komenda. Wytworzone wyjście powinny wyświetlać informacje o WG0 interfejs:

$ Sudo WG Interface: WG0 Klucz publiczny: NNX3ZPCV9D2DTHDSOYGBNR64ZG5JTJ4Z4T2SE759V4 = KEY PRIFT: (Hidden) Port słuchania: 51820: 51820 

Teraz kontynuujmy i skonfigurujmy naszą zaporę i przekazywanie pakietów.

Zapora ogniowa i konfiguracja sieci

W tym samouczku założę użycie UFW. Jak powiedzieliśmy wcześniej, musimy dodać regułę, aby umożliwić ruch przychodzący przez port określony w pliku konfiguracyjnym, 51820. Robimy to, uruchamiając bardzo proste polecenie:

$ sudo ufw zezwolić 51820/UDP 

Musimy również umożliwić przekazywanie pakietów w naszym systemie. Aby wykonać zadanie, aby usunąć komentarz z linii 28 z /etc/sysctl.conf Plik, aby wyglądał tak:

# Uzyskanie następnego wiersza, aby umożliwić przekazywanie pakietów dla sieci IPv4.IPv4.ip_forward = 1 

Aby zmiany były skuteczne bez ponownego uruchomienia systemu, musimy uruchomić następujące polecenie:

$ sudo sysctl -p 

W następnym kroku skonfigurujemy klienta.

Generowanie klucza klienta

Przejdźmy teraz do systemu, którego chcemy użyć jako klienta. Musimy zainstalować na nim WireGuard; Po zakończeniu możemy wygenerować parę kluczy, tak jak na serwerze:

$ WG Genkey | tee client_private_key | WG pubkey> client_public_key 

Tak jak zrobiliśmy po stronie serwera, tworzymy WG0.conf plik konfiguracyjny. Tym razem z tą treścią:

[Interfejs] privateKey = adres = 10.0.0.2/24 [peer] publicKey = punkt końcowy =: 51820 dozwoloneSps = 0.0.0.0/0 

Widzieliśmy już znaczenie pól zawartych w Interfejs Sekcja, kiedy wygenerowaliśmy konfigurację serwera. Tutaj właśnie dostosowaliśmy wartości do naszego klienta (będzie miał 10.0.0.2 adres w VPN).

W tej konfiguracji użyliśmy nowej sekcji, [Rówieśnik]. W nim możemy określić informacje dotyczące rówieśnika, w tym przypadku tej, której używamy jako „serwer”. Pola, które użyliśmy, to:

  • Klucz publiczny
  • Punkt końcowy
  • Dozwolone

w Klucz publiczny pole, określamy publiczny Klucz rówieśnika, więc w tym przypadku klucz publiczny wygenerowaliśmy na serwerze.

Punkt końcowy to publiczny adres IP lub nazwa hosta rówieśnika, a następnie dwukropek i numer portu, na który należy słuchać równorzędnego (w naszym przypadku 51820).

Wreszcie wartość przekazana do Dozwolone pole, to rozdzielona przecinka lista adresów IP i maski podsieci z notacją CIDR. Dozwolony będzie tylko ruch skierowany do rówieśnika, który pochodzi z określonych adresów. W tym przypadku użyliśmy 0.0.0.0/0 Jako wartość: działa jako wartość „catch-all”, więc cały ruch zostanie wysłany do VPN Peer (serwer).

Podobnie jak po stronie serwera, ustawiamy odpowiednie uprawnienia i przenosiliśmy klawisze i plik konfiguracyjny do /itp./Wiregruard informator:

$ CHMOD 600 Client_Public_Key Client_Private_Key WG0.conf $ sudo mv client_public_key client_private_key WG0.conf /itp. /WireGuard 

Dzięki pliku konfiguracyjnego możemy uruchomić usługę:

$ sudo systemctl enable-teraz WG-QUICK@WG0 

Wreszcie [Rówieśnik] sekcja względem naszego klienta należy dodać do pliku konfiguracyjnego, który wcześniej utworzyliśmy w serwer. My dodać następująca treść:

[Peer] publickey = dozwolone = 10.0.0.2/32 

W tym momencie uruchomimy usługi:

$ sudo systemctl restart wg-quick@wg0 

Informacje o powiązanym rówieśniku powinny być teraz zgłaszane na wyniki WG Komenda:

$ sudo interfejs: WG0 Klucz publiczny: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = klucz private: (ukryty) Port: 51820 Peer: T5PKKG5/9FJKIU0LRNTAHV6GVABCMCMCJQ5GF3BXWIDQ = T5PKKG5/9FJKIU0LRNTAHV6GVABCMCMCJQ5GF3BXWIDQ = dozwolony ips: 10.0.0.2/32 

W tym momencie z systemu „klienta” powinniśmy być w stanie pingować serwer w 10.0.0.1 adres:

$ ping -c 3 10.0.0.1 ping 10.0.0.1 (10.0.0.1) 56 (84) bajty danych. 64 bajtów od 10.0.0.1: ICMP_SEQ = 1 TTL = 64 Czas = 2.82 ms 64 bajtów od 10.0.0.1: ICMP_SEQ = 2 TTL = 64 Czas = 38.0 ms 64 bajtów od 10.0.0.1: ICMP_SEQ = 3 TTL = 64 Czas = 3.02 MS --- 10.0.0.1 Ping Statystyka --- 3 przesłane pakiety, 3 otrzymane, 0% utrata pakietów, czas 2003ms rtt min/avg/max/mDev = 2.819/14.613/37.999/16.536 ms 

Wnioski

W tym samouczku widzieliśmy, jak utworzyć VPN za pomocą WireGuard w najnowszej stabilnej wersji Ubuntu: 20.04 Focal Fossa. Oprogramowanie jest naprawdę proste w zainstalowaniu i konfiguracji, szczególnie w porównaniu z innymi rozwiązaniami, jak na przykład OpenVPN.

Widzieliśmy, jak generować klucze publiczne i prywatne używane do naszej konfiguracji oraz jak skonfigurować zarówno serwer, jak i klient, aby cały ruch został przekierowywany do VPN. Zgodnie z podaną instrukcją będziesz mieć konfigurację roboczą. Aby uzyskać więcej informacji, spójrz na stronę projektu.

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
  • Podstawowy Ubuntu 22.04 Konfiguracja połączenia klienta/serwera OpenVPN
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
  • Ubuntu 20.04 Przewodnik
  • Rzeczy do zainstalowania na Ubuntu 22.04
  • Lista klientów FTP i instalacja na Ubuntu 20.04 Linux…
  • Ubuntu 20.04: WordPress z instalacją Nginx
  • 8 najlepszych środowisk stacjonarnych Ubuntu (20.04 FOSSA…