Configurarea unui VPN simplu cu WireGuard și Raspberry Pi ca server

Pentru că WireGuard va deveni parte din viitorul kernel Linux 5.6, am decis să văd cum să integrez cel mai bine acest VPN cu Router/punct de acces LTE pe Raspberry Pi.

Оборудование

  • Raspberry Pi 3 cu modul LTE și adresă IP publică. Aici va exista un server VPN (în continuare în text se numește edgewalker)
  • Un telefon Android care trebuie să folosească un VPN pentru toate comunicațiile
  • Laptop Linux care ar trebui să utilizeze doar un VPN în rețea

Fiecare dispozitiv care se conectează la VPN trebuie să se poată conecta la toate celelalte dispozitive. De exemplu, un telefon ar trebui să se poată conecta la un server web pe un laptop dacă ambele dispozitive fac parte dintr-o rețea VPN. Dacă configurarea se dovedește a fi destul de simplă, atunci vă puteți gândi la conectarea desktopului la VPN (prin Ethernet).

Având în vedere că conexiunile cu fir și fără fir devin din ce în ce mai puțin sigure în timp (atacuri țintite, Atacul de cracare KRACK WPA2 и Atacul Dragonblood împotriva WPA3), mă gândesc serios să folosesc WireGuard pentru toate dispozitivele mele, indiferent de mediul în care se află.

Instalare software

WireGuard oferă pachete precompilate pentru majoritatea distribuțiilor Linux, Windows și macOS. Aplicațiile Android și iOS sunt livrate prin directoare de aplicații.

Am cel mai recent Fedora Linux 31 și mi-a fost prea lene să citesc manualul înainte de instalare. Tocmai am găsit pachetele wireguard-tools, le-a instalat și apoi nu și-a dat seama de ce nimic nu funcționa. Investigațiile ulterioare au arătat că nu am pachetul instalat wireguard-dkms (cu un driver de rețea), dar nu era în depozitul distribuției mele.

Dacă aș fi citit instrucțiunile, aș fi făcut pașii corecti:

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

Am distribuția Raspbian Buster instalată pe Raspberry Pi, există deja un pachet acolo wireguard, instalează-l:

$ sudo apt install wireguard

Pe telefonul meu Android am instalat aplicația VPN WireGuard din catalogul oficial Google App Store.

Instalarea cheilor

Pentru autentificarea de la egal la egal, Wireguard folosește o schemă simplă de chei private/publice pentru a autentifica egalii VPN. Puteți crea cu ușurință chei VPN utilizând următoarea comandă:

$ 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

Acest lucru ne oferă trei perechi de chei (șase fișiere). Nu ne vom referi la fișierele din configurații, ci vom copia conținutul aici: fiecare cheie este o linie în base64.

Crearea unui fișier de configurare pentru serverul VPN (Raspberry Pi)

Configurarea este destul de simplă, am creat următorul fișier /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

Câteva note:

  • În locurile potrivite, trebuie să introduceți linii din fișiere cu tastele
  • VPN-ul meu folosește banda internă 10.200.200.0/24
  • Pentru echipe PostUp/PostDown Am interfața de rețea externă wwan0, este posibil să aveți una diferită (de exemplu, eth0)

Rețeaua VPN este ridicată cu ușurință cu următoarea comandă:

$ sudo wg-quick up wg0

Un mic detaliu: ca server DNS pe care l-am folosit dnsmasq legat de o interfață de rețea br0, am adăugat și dispozitive wg0 la lista de dispozitive permise. În dnsmasq, acest lucru se face prin adăugarea unei noi linii de interfață de rețea la fișierul de configurare /etc/dnsmasq.conf, de exemplu:

interface=br0
interface=wg0

În plus, am adăugat o regulă iptable pentru a permite traficul către portul de ascultare UDP (51280):

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

Acum că totul funcționează, putem configura lansarea automată a tunelului VPN:

$ sudo systemctl enable [email protected]

Configurare client pe laptop

Creați un fișier de configurare pe un laptop /etc/wireguard/wg0.conf cu aceleasi setari:

[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

Note:

  • În loc de edgewalker, trebuie să specificați IP-ul public sau gazda serverului VPN
  • Prin setare AllowedIPs pe 10.200.200.0/24, folosim VPN doar pentru a accesa rețeaua internă. Traficul către toate celelalte adrese IP/servere va continua să treacă prin canale deschise „normale”. De asemenea, va folosi serverul DNS preconfigurat de pe laptop.

Pentru testare și lansare automată folosim aceleași comenzi wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Configurarea unui client pe un telefon Android

Pentru un telefon Android creăm un fișier de configurare foarte asemănător (să-l numim 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

Spre deosebire de configurația de pe laptop, telefonul trebuie să folosească serverul nostru VPN ca server DNS (linia DNS), și, de asemenea, trece tot traficul prin tunelul VPN (AllowedIPs = 0.0.0.0/0).

În loc să copiați fișierul pe dispozitivul mobil, îl puteți converti într-un cod QR:

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

Codul QR va fi scos pe consolă ca ASCII. Poate fi scanat din aplicația VPN Android și va configura automat un tunel VPN.

Producție

Configurarea WireGuard este pur și simplu magică în comparație cu OpenVPN.

Sursa: www.habr.com

Adauga un comentariu