Postavite jednostavan VPN sa WireGuard i Raspberry Pi kao server

Od WireGuarda postati dio budućeg Linux 5.6 kernela, odlučio sam da vidim kako najbolje da integrišem ovaj VPN sa svojim LTE ruter/pristupna tačka na Raspberry Pi.

Oprema

  • Raspberry Pi 3 sa LTE modulom i javnim IP-om. Postojaće VPN server (u daljem tekstu edgewalker)
  • Android telefon koji mora koristiti VPN za sve komunikacije
  • Linux laptop koji treba da koristi VPN samo unutar mreže

Svaki uređaj koji se povezuje na VPN mora biti u mogućnosti da se poveže sa svakim drugim uređajem. Na primjer, telefon bi trebao biti u mogućnosti da se poveže na web server na laptopu ako su oba uređaja dio VPN mreže. Ako je podešavanje dovoljno jednostavno, onda možete razmišljati o povezivanju na VPN i desktop (preko Etherneta).

S obzirom da žičane i bežične veze vremenom postaju sve manje sigurne (ciljanih napada, KRACK WPA2 hakerski napad и Dragonblood napad na WPA3), Ozbiljno razmišljam o korištenju WireGuarda za sve svoje uređaje, bez obzira u kojem okruženju se nalaze.

Instalacija softvera

WireGuard pruža unapred kompajlirani paketi za većinu Linux, Windows i macOS distribucija. Aplikacije za Android i iOS isporučuju se putem kataloga aplikacija.

Imam najnoviji Fedora Linux 31 i bio sam previše lijen da pročitam priručnik prije instaliranja. Upravo sam našao pakete wireguard-tools, instalirao ih, a onda nisam mogao shvatiti zašto ništa ne radi. Dalja istraga je pokazala da nisam instalirao paket wireguard-dkms (sa mrežnim drajverom), a nije ga bilo u spremištu moje distribucije.

Da sam pročitao uputstva, preduzeo bih prave korake:

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

Imam instaliranu Raspbian Buster distribuciju na svom Raspberry Pi, već postoji paket wireguard, instalirajte ga:

$ sudo apt install wireguard

Instalirao sam aplikaciju na svoj android telefon WireGuardVPN iz zvaničnog kataloga Google App Store-a.

Instaliranje ključeva

Za autentifikaciju čvorova, Wireguard koristi jednostavnu šemu privatnog/javnog ključa za provjeru autentičnosti VPN čvorova. Možete jednostavno kreirati VPN ključeve sa sljedećom naredbom:

$ 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

Ovo nam daje tri para ključeva (šest fajlova). Nećemo se pozivati ​​na datoteke u konfiguracijama, ali kopirajte sadržaj ovdje: svaki ključ je jedan red u base64.

Kreiranje konfiguracijske datoteke za VPN server (Raspberry Pi)

Konfiguracija je prilično jednostavna, kreirao sam sljedeći fajl /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

Par napomena:

  • Na odgovarajuća mjesta trebate umetnuti linije iz datoteka sa ključevima
  • Moj VPN koristi interni domet 10.200.200.0/24
  • Za timove PostUp/PostDown Imam eksterno mrežno sučelje wwan0, vi možda imate drugi (na primjer, eth0)

VPN mreža se lako pokreće sljedećom naredbom:

$ sudo wg-quick up wg0

Jedan mali detalj: koristio sam kao DNS server dnsmasq povezan na mrežni interfejs br0, dodao sam i uređaje wg0 na listu dozvoljenih uređaja. U dnsmasq-u, ovo se radi dodavanjem nove linije sa mrežnim interfejsom u konfiguracioni fajl /etc/dnsmasq.conf, na primjer:

interface=br0
interface=wg0

Takođe, dodao sam iptable pravilo da dozvoli saobraćaj na UDP port za slušanje (51280):

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

Sada kada sve radi, možemo registrirati automatsko pokretanje VPN tunela:

$ sudo systemctl enable [email protected]

Konfiguracija klijenta za laptop

Na laptopu kreirajte konfiguracionu datoteku /etc/wireguard/wg0.conf sa istim postavkama:

[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

Napomene:

  • Umjesto edgewalker-a, trebate navesti javni IP ili VPN server host
  • Postavljanjem AllowedIPs na 10.200.200.0/24, koristimo samo VPN za pristup internoj mreži. Saobraćaj ka svim ostalim IP adresama/serverima će i dalje ići kroz "obične" otvorene kanale. Koristiće se i unapred konfigurisani DNS server na laptopu.

Za testiranje i automatsko pokretanje koristimo iste komande wg-quick и systemd:

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

Podešavanje klijenta na Android telefonu

Za Android telefon kreiramo vrlo sličan konfiguracijski fajl (nazovimo ga 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

Za razliku od konfiguracije laptopa, telefon bi trebao koristiti naš VPN server kao svoj DNS server (string DNS), kao i proći sav promet kroz VPN tunel (AllowedIPs = 0.0.0.0/0).

Umjesto kopiranja datoteke na svoj mobilni uređaj, možete je pretvoriti u QR kod:

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

QR kod će biti izlaz na konzolu kao ASCII. Može se skenirati iz Android VPN aplikacije i automatski postaviti VPN tunel.

zaključak

Postavljanje WireGuarda je jednostavno magično u poređenju sa OpenVPN-om.

izvor: www.habr.com

Dodajte komentar