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ę.