Konfiguracja prostej sieci VPN z WireGuard i Raspberry Pi jako serwer

Ponieważ WireGuard stanie się częścią przyszły rdzeń Linux 5.6, postanowiłem sprawdzić, jak najlepiej zintegrować tę sieć VPN z moim Router/punkt dostępowy LTE na Raspberry Pi.

Sprzęt

  • Raspberry Pi 3 z modułem LTE i publicznym adresem IP. Znajdować się tu będzie serwer VPN (w dalszej części tekstu będzie on nazywany wędrowiec po krawędzi)
  • Telefon włączony Android, który musi używać VPN do całej komunikacji
  • Laptop Linux, który powinien używać VPN tylko w obrębie sieci

Każde urządzenie łączące się z VPN musi mieć możliwość połączenia się ze wszystkimi innymi urządzeniami. Na przykład telefon powinien mieć możliwość połączenia się z serwerem internetowym na laptopie, jeśli oba urządzenia są częścią sieci VPN. Jeśli konfiguracja okaże się dość prosta, możesz pomyśleć o podłączeniu komputera stacjonarnego do VPN (przez Ethernet).

Biorąc pod uwagę, że połączenia przewodowe i bezprzewodowe z biegiem czasu stają się coraz mniej bezpieczne (ukierunkowane ataki, Atak łamania zabezpieczeń KRACK WPA2 и Atak Dragonblood na WPA3), poważnie rozważam użycie WireGuard dla wszystkich moich urządzeń, bez względu na środowisko, w którym działają.

Instalacja oprogramowania

WireGuard zapewnia prekompilowane pakiety dla większości dystrybucji Linux, Windows и macOSAplikacje dla Android i iOS są dostępne w sklepach z aplikacjami.

Mam najnowszą wersję Fedory Linux 31, a przed instalacją byłem zbyt leniwy, żeby przeczytać instrukcję. Znalazłem tylko pakiety. wireguard-tools, zainstalowałem je, a potem nie mogłem zrozumieć, dlaczego nic nie działa. Dalsze dochodzenie wykazało, że nie mam zainstalowanego pakietu wireguard-dkms (ze sterownikiem sieciowym), ale nie było go w repozytorium mojej dystrybucji.

Gdybym przeczytał instrukcję, podjąłbym właściwe kroki:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Mam zainstalowaną dystrybucję Raspbian Buster na moim Raspberry Pi, jest tam już pakiet wireguard, Zainstaluj to:

$ sudo apt install wireguard

Na telefonie Android Zainstalowałem aplikację WireGuard VPN z oficjalnego katalogu Google App Store.

Instalacja kluczy

Do uwierzytelniania węzłów Wireguard Używa prostego schematu klucza prywatnego/publicznego do uwierzytelniania węzłów VPN. Klucze VPN można łatwo wygenerować za pomocą następującego polecenia:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Daje nam to trzy pary kluczy (sześć plików). Nie będziemy odwoływać się do plików w konfiguracjach, ale skopiujemy tutaj zawartość: każdy klucz to jedna linia w base64.

Tworzenie pliku konfiguracyjnego dla serwera VPN (Raspberry Pi)

Konfiguracja jest dość prosta, stworzyłem następujący plik /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Kilka uwag:

  • W odpowiednich miejscach należy wstawić linie z plików za pomocą klawiszy
  • Moja sieć VPN korzysta z wewnętrznego pasma 10.200.200.0/24
  • Dla zespołów PostUp/PostDown Ja mam zewnętrzny interfejs sieciowy wwan0, Ty możesz mieć inny (na przykład eth0)

Sieć VPN można łatwo podnieść za pomocą następującego polecenia:

$ sudo wg-quick up wg0

Jeden mały szczegół: jako serwer DNS, z którego korzystałem dnsmasq powiązany z interfejsem sieciowym br0, dodałem także urządzenia wg0 do listy dozwolonych urządzeń. W dnsmasq odbywa się to poprzez dodanie nowej linii interfejsu sieciowego do pliku konfiguracyjnego /etc/dnsmasq.confna przykład:

interface=br0
interface=wg0

Dodatkowo dodałem regułę iptable zezwalającą na ruch do portu nasłuchiwania UDP (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Teraz, gdy wszystko działa, możemy skonfigurować automatyczne uruchamianie tunelu VPN:

$ sudo systemctl enable wg-quick@wg0.service

Konfiguracja klienta na laptopie

Utwórz plik konfiguracyjny na laptopie /etc/wireguard/wg0.conf z tymi samymi ustawieniami:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Uwagi:

  • Zamiast Edgewalkera musisz określić publiczny adres IP lub hosta serwera VPN
  • Przez ustawienie AllowedIPs na 10.200.200.0/24, używamy VPN tylko do uzyskania dostępu do sieci wewnętrznej. Ruch do wszystkich pozostałych adresów IP/serwerów będzie w dalszym ciągu odbywał się „normalnymi” otwartymi kanałami. Będzie także korzystać ze wstępnie skonfigurowanego serwera DNS na laptopie.

Do testowania i automatycznego uruchamiania używamy tych samych poleceń wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Konfigurowanie klienta dla Android-telefon

Na telefon Android Tworzymy bardzo podobny plik konfiguracyjny (nazwijmy go mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

W przeciwieństwie do konfiguracji na laptopie, telefon musi używać naszego serwera VPN jako serwera DNS (linia DNS), a także przepuszczają cały ruch przez tunel VPN (AllowedIPs = 0.0.0.0/0).

Zamiast kopiować plik na urządzenie mobilne, możesz przekonwertować go na kod QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

Kod QR zostanie wyświetlony na konsoli w formacie ASCII. Można go zeskanować z aplikacji. Android VPN i automatycznie skonfiguruj tunel VPN.

Wniosek

regulacja WireGuard po prostu magiczne w porównaniu do OpenVPN.

Źródło: www.habr.com

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster