Ponieważ WireGuard
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 z Androidem, który musi korzystać z VPN do całej komunikacji
- Laptop z systemem Linux, który powinien korzystać z VPN wyłącznie w 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 (
Instalacja oprogramowania
WireGuard zapewnia
Mam najnowszą Fedorę Linux 31 i byłem zbyt leniwy, aby przeczytać instrukcję przed instalacją. Właśnie znalazłem paczki 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 moim telefonie z Androidem zainstalowałem aplikację
Instalacja kluczy
W przypadku uwierzytelniania równorzędnego Wireguard wykorzystuje prosty schemat klucza prywatnego/publicznego do uwierzytelniania partnerów VPN. Możesz łatwo utworzyć klucze VPN 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.conf
na 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 [email protected]
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
na10.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 [email protected]
Konfigurowanie klienta na telefonie z systemem Android
Dla telefonu z Androidem 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 przeskanować za pomocą aplikacji VPN na Androida i automatycznie skonfiguruje tunel VPN.
Wniosek
Konfiguracja WireGuard jest po prostu magiczna w porównaniu z OpenVPN.
Źródło: www.habr.com