WireGuard to nowoczesny VPN (Virtual Private Network), który wykorzystuje najnowocześniejszą kryptografię. W porównaniu z innymi popularnymi rozwiązaniami VPN, takimi jak IPsec i OpenVPN , WireGuard jest szybszy, łatwiejszy w konfiguracji i zajmuje mniej miejsca. Jest wieloplatformowy i może działać prawie wszędzie, w tym w systemie Linux, Windows, Android i macOS.
Wireguard to sieć VPN typu peer-to-peer; nie korzysta z modelu klient-serwer. W zależności od konfiguracji peer może działać jako tradycyjny serwer lub klient. Działa poprzez utworzenie interfejsu sieciowego na każdym urządzeniu równorzędnym, które działa jak tunel. Partnerzy uwierzytelniają się nawzajem, wymieniając i weryfikując klucze publiczne, naśladując model SSH. Klucze publiczne są mapowane z listą adresów IP, które są dozwolone w tunelu. Ruch VPN jest hermetyzowany w protokole UDP.
W tym artykule omówimy, jak skonfigurować WireGuard VPN na Ubuntu 20.04, który będzie działał jako serwer VPN. Pokażemy Ci również, jak skonfigurować WireGuard jako klienta. Ruch klienta będzie kierowany przez serwer Ubuntu 20.04.
Ta konfiguracja może być używana jako ochrona przed atakami Man in the Middle, anonimowym przeglądaniem sieci, omijaniem treści z ograniczeniami geograficznymi lub umożliwianiem współpracownikom, którzy pracują z domu, bezpieczne połączenie z siecią firmową.
Konfigurowanie serwera WireGuard
Zaczniemy od zainstalowania WireGuard na komputerze z Ubuntu i skonfigurowania go tak, aby działał jako serwer. Skonfigurujemy również system tak, aby kierował przez niego ruch klientów.
Zainstaluj WireGuard na Ubuntu 20.04
WireGuard jest dostępny z domyślnych repozytoriów Ubuntu. Aby go zainstalować, uruchom następujące polecenia:
sudo apt update sudo apt install wireguard
Spowoduje to zainstalowanie modułu i narzędzi WireGuard.
Konfigurowanie WireGuard
Narzędzia wiersza poleceń wg
i wg-quick
umożliwiają konfigurowanie interfejsów WireGuard i zarządzanie nimi.
Każde urządzenie w sieci WireGuard VPN musi mieć klucz prywatny i publiczny. Uruchom następujące polecenie, aby wygenerować parę kluczy:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Pliki zostaną wygenerowane w /etc/wireguard
. Możesz przeglądać zawartość plików za pomocą cat
lub less
. Klucz prywatny nigdy nie powinien być nikomu udostępniany i zawsze powinien być bezpieczny.
Wireguard obsługuje również klucz współdzielony, który dodaje dodatkową warstwę kryptografii z kluczem symetrycznym. Ten klucz jest opcjonalny i musi być unikalny dla każdej pary urządzeń równorzędnych.
Następnym krokiem jest skonfigurowanie urządzenia tunelującego, które będzie kierować ruch VPN.
Urządzenie można skonfigurować zarówno z linii poleceń przy użyciu ip
i wg
, albo poprzez stworzenie pliku konfiguracyjnego z edytora tekstu.
Utwórz nowy plik o nazwie wg0.conf
i dodaj następującą zawartość:
sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
Interfejs można nazwać dowolnie, jednak zaleca się użycie wg0
lub wgvpn0
. Ustawienia w sekcji interfejsu mają następujące znaczenie:
- Adres – rozdzielona przecinkami lista adresów IP w wersji 4 lub 6
wg0
. Użyj adresów IP z zakresu zarezerwowanego dla sieci prywatnych (10.0.0.0/8, 172.16.0.0/12 lub 192.168.0.0/16). - ListenPort – port nasłuchiwania.
- PrivateKey – klucz prywatny wygenerowany przez
wg genkey
. (Aby zobaczyć zawartość typu plików:sudo cat /etc/wireguard/privatekey
) - SaveConfig – Gdy ustawiona na true, bieżący stan interfejsu jest zapisywany w pliku konfiguracyjnym podczas zamykania.
- PostUp – polecenie lub skrypt, który jest wykonywany przed uruchomieniem interfejsu. W tym przykładzie używamy iptables, aby włączyć maskaradę. Dzięki temu ruch opuszcza serwer, dając klientom VPN dostęp do Internetu.Pamiętaj, aby zamienić nazwę interfejsu sieciowego na własny(
ens3)
. Możesz łatwo znaleźć interfejs za pomocą:ip -o -4 route show to default | awk '{print $5}'
- PostDown – polecenie lub skrypt, który jest wykonywany przed wyłączeniem interfejsu. Reguły iptables zostaną usunięte po wyłączeniu interfejsu.
Pliki wg0.conf
i privatekey
nie powinny być czytelne dla zwykłych użytkowników. Użyj polecenia chmod
do ustawienia uprawnień do 600
:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Po zakończeniu uruchom wg0
, korzystając z atrybutów określonych w pliku konfiguracyjnym:
sudo wg-quick up wg0
Polecenie wygeneruje dane wyjściowe podobne do następujących:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.0.0.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Aby sprawdzić stan i konfigurację interfejsu, wprowadź:
sudo wg show wg0
interface: wg0 public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg= private key: (hidden) listening port: 51820
Możesz również uruchomić, ip a show wg0
aby sprawdzić stan interfejsu:
ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.0.0.1/24 scope global wg0 valid_lft forever preferred_lft forever
WireGuard może być również zarządzany za pomocą Systemd.
Aby uruchomić interfejs WireGuard w czasie rozruchu, uruchom następujące polecenie:
sudo systemctl enable wg-quick@wg0
Konfiguracja sieci serwerów i zapory
Przekazywanie IP musi być włączone, aby NAT działał. Otwórz /etc/sysctl.conf
i dodaj lub odkomentuj następujący wiersz:
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Zapisz plik i zastosuj zmianę:
sudo sysctl -p
net.ipv4.ip_forward = 1
Jeśli używasz UFW do zarządzania zaporą , musisz otworzyć ruch UDP na porcie 51820
:
sudo ufw allow 51820/udp
Serwer został skonfigurowany.
Konfiguracja klientów Linux
Instrukcje instalacji dla wszystkich obsługiwanych platform są dostępne pod adresem https://wireguard.com/install/ . W systemach Linux można zainstalować pakiet za pomocą menedżera pakietów dystrybucyjnych.
Po zainstalowaniu wykonaj poniższe czynności, aby skonfigurować urządzenie klienckie.
Proces konfigurowania klienta Linux jest prawie taki sam, jak w przypadku serwera. Najpierw wygeneruj klucze publiczny i prywatny:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Utwórz plik wg0.conf
i dodaj następującą zawartość:
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Ustawienia w sekcji interfejsu mają takie samo znaczenie, jak podczas konfiguracji serwera:
- Adres – rozdzielona przecinkami lista adresów IP w wersji 4 lub 6 interfejsu
wg0
. - PrivateKey – Aby zobaczyć zawartość pliku na komputerze klienckim, uruchom:
sudo cat /etc/wireguard/privatekey
Sekcja peer zawiera następujące pola:
- PublicKey – klucz publiczny partnera, z którym chcesz się połączyć. (Zawartość
/etc/wireguard/publickey
pliku ). - Punkt końcowy – adres IP lub nazwa hosta peera, z którym chcesz się połączyć, po którym następuje dwukropek, a następnie numer portu, na którym nasłuchuje zdalny peer.
- Dozwolone adresy IP – lista rozdzielonych przecinkami adresów IP w wersji 4 lub 6, z których ruch przychodzący do peera jest dozwolony i do których jest kierowany ruch wychodzący dla tego peera. Używamy 0.0.0.0/0, ponieważ kierujemy ruch i chcemy, aby peer serwera wysyłał pakiety z dowolnym źródłowym adresem IP.
Jeśli chcesz skonfigurować dodatkowych klientów, powtórz te same kroki, używając innego prywatnego adresu IP.
Instalator klientów systemu Windows
Pobierz i zainstaluj pakiet msi systemu Windows z witryny WireGuard .
Po zainstalowaniu otwórz aplikację WireGuard i kliknij „Dodaj tunel” -> „Dodaj pusty tunel…”,
Automatycznie tworzona jest para publiczna i wyświetlana na ekranie.
Wprowadź nazwę tunelu i edytuj konfigurację w następujący sposób:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
W sekcji interfejsu dodaj nową linię, aby zdefiniować adres tunelu klienta.
W sekcji równorzędnej dodaj następujące pola:
- PublicKey – klucz publiczny serwera Ubuntu (
/etc/wireguard/publickey
. - Punkt końcowy – adres IP serwera Ubuntu, po którym następuje dwukropek i port WireGuard (51820).
- Dozwolone adresy IP – 0.0.0.0/0
Po zakończeniu kliknij przycisk „Zapisz”.
Dodaj klienta równorzędnego do serwera
Ostatnim krokiem jest dodanie klucza publicznego i adresu IP klienta do serwera. Aby to zrobić, uruchom następujące polecenie na serwerze Ubuntu:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Pamiętaj, aby zmienić CLIENT_PUBLIC_KEY na
klucz publiczny wygenerowany na komputerze klienckim ( sudo cat /etc/wireguard/publickey
) i dostosować adres IP klienta, jeśli jest inny. Użytkownicy systemu Windows mogą skopiować klucz publiczny z aplikacji WireGuard.
Po zakończeniu wróć do komputera klienckiego i wywołaj interfejs tunelowania.
Klienci Linux
Uruchom następujące polecenie, aby wywołać interfejs:
sudo wg-quick up wg0
Teraz powinieneś być połączony z serwerem Ubuntu, a ruch z twojego komputera klienckiego powinien być przez niego kierowany. Połączenie możesz sprawdzić za pomocą:
sudo wg
interface: wg0 public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo= private key: (hidden) listening port: 53527 fwmark: 0xca6c peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg= endpoint: XXX.XXX.XXX.XXX:51820 allowed ips: 0.0.0.0/0 latest handshake: 53 seconds ago transfer: 3.23 KiB received, 3.50 KiB sent
Możesz również otworzyć przeglądarkę, wpisać „jakie jest moje IP” i powinieneś zobaczyć adres IP swojego serwera Ubuntu.
Aby zatrzymać tunelowanie, wyłącz wg0
:
sudo wg-quick down wg0
Fajny tutorial 🙂 U mnie po skonfigurowaniu połączenie jest aktywne ale brak jest internetu 🙁 W PostUp zmieniłem na własną nazwę interfejsu sieciowego “root@openvpn:~# ip -o -4 route show to default | awk ‘{print $5}'”
na eth0 . Co może być przyczyną?
no root on the phone, you need to root the phone