Skonfiguruj samoobsługową sieć VPN za pomocą Wireguard
VPN (Virtual Private Network) pozwala użytkownikowi na podłączenie do sieci prywatnej zdalnie jakby komputer użytkownika został podłączony bezpośrednio 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 uzyskanie anonimowości podczas uzyskiwania dostępu do Internetu lub obchodzenie 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.
Pakiet 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 | tee private_key | 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 na077
. 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ępnym wierszu generujemy parę kluczy publiczny/prywatny dla serwera. Są one zapisywane w plikach private_key
i public_key
. Aby wyświetlić klucze, uruchom:
cat private_key
cat public_key
Skopiuj klucz prywatny, potrzebujemy go w następnym kroku.
Uwaga: nigdy nie udostępniaj swojego klucza prywatnego publicznie!
Plik konfiguracyjny
Stwórzmy plik konfiguracyjny dla Wireguard Server. Możesz wybrać dowolną nazwę pliku. wg0.conf
W tym przykładzie utworzymy plik .
vim wg0.conf
Dodaj następujące elementy do pliku.
[Interface]
Address = 10.20.43.1/24
SaveConfig = true
ListenPort = 51190
PrivateKey =
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
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
Podświetlona część to adres IP
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, gdy użytkownik jest podłączony do sieci WiFi za pomocą karty bezprzewodowej.
Zastąp in PostUp
i PostDown
swoim interfejsem; w tym przykładzie jest to eth0
. PostUp
a PostDown
dyrektywy są używane do określenia, które polecenia powinny być uruchamiane, gdy serwer jest odpowiednio uruchamiany i zatrzymywany. W naszym przykładzie używamy iptables
polecenia, 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 Esc , a następnie wpisz :wq
i naciśnij Enter, aby zapisać i wyjść.
Jeśli używasz ufw
zapory na serwerze, musimy zezwolić na połączenia UDP z portem serwera VPN, 51190.
ufw allow 51190/udp
Uruchomienie usługi
Teraz po zakończeniu konfiguracji możemy uruchomić usługę Wireguard VPN.
Aby umożliwić uruchamianie usługi w czasie rozruchu, uruchom:
systemctl enable [email protected]
Zauważ, że tutaj wg0
jest nazwa pliku konfiguracyjnego.
Aby uruchomić usługę, uruchom:
service [email protected] start
Sprawdź , czy usługa została pomyślnie uruchomiona:
service [email protected] status
Sprawdź, czy interfejs, który utworzyliśmy w pliku konfiguracyjnym, został uruchomiony za pomocą polecenia IP.
ip a show 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ć parę kluczy publiczny/prywatny dla klienta, uruchom:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
Klucze publiczny i prywatny dla klienta są teraz generowane odpowiednio w plikach client_private_key
i client_public_key
.
Sprawdź, czy zostały utworzone, używając cat
polecenia.
cat client_private_key
cat client_public_key
Skopiuj wyświetlony klucz prywatny, ponieważ musimy go dodać do pliku konfiguracyjnego klienta.
Plik konfiguracyjny
Utwórz plik konfiguracyjny o dowolnej nazwie. Stworzymy go z nazwą wg0-client
dla tego przykładu.
vim wg0-client.conf
Dodaj następującą konfigurację.
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :51190
AllowedIPs = 0.0.0.0/0, ::/0
Wprowadź adres podsieci klienta. Jak opisano wcześniej, 10.20.43.2
w tym przykładzie używamy dla klienta.
Dodaj klucz prywatny klienta wygenerowany w poprzednim kroku w wierszu 4 w powyższym kodzie konfiguracyjnym.
W sekcji „Peer” dodajemy informacje o serwerze Wireguard VPN, z którym chcemy się połączyć.
Wprowadź klucz publiczny serwera. Wpisz adres IP serwera , który wcześniej odnotowaliśmy, oraz port w podanym formacie względem Endpoint . 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 Esc , a następnie wpisz :wq
i naciśnij Enter, aby zapisać i wyjść.
Włącz usługę klienta, aby działała przy każdym uruchomieniu i uruchom ją.
systemctl enable [email protected]
service [email protected] start
Sprawdź, czy usługa została uruchomiona.
service [email protected] 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. Najpierw zatrzymaj usługę VPN .
service [email protected] stop
Następnie otwórz plik konfiguracyjny, aby dodać konfigurację dla peera (klienta).
vim /etc/wireguard/wg0.conf
Dołącz do pliku następujące wiersze.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Teraz ponownie uruchom usługę VPN .
service [email protected] 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ępnie otwórz przeglądarkę internetową i otwórz dowolną witrynę internetową, aby sprawdzić, czy możesz połączyć się z Internetem z komputera klienckiego. 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 na to 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 https://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 odwiedzić oficjalną stronę .