Sette opp en enkel VPN med WireGuard og Raspberry Pi som server

Fordi WireGuard vil bli en del av den kommende Linux-kjernen 5.6 bestemte jeg meg for å se hvordan jeg best kunne integrere denne VPN-en med min LTE-ruter/tilgangspunkt på Raspberry Pi.

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

  • Raspberry Pi 3 med LTE-modul og offentlig IP-adresse. Det vil være en VPN-server her (heretter i teksten heter den edgewalker)
  • En Android-telefon som må bruke en VPN for all kommunikasjon
  • Linux bærbar PC som bare skal bruke en VPN i nettverket

Hver enhet som kobler til VPN må kunne koble til alle andre enheter. For eksempel skal en telefon kunne koble til en webserver på en bærbar datamaskin hvis begge enhetene er en del av et VPN-nettverk. Hvis oppsettet viser seg å være ganske enkelt, kan du tenke på å koble skrivebordet til VPN (via Ethernet).

Tatt i betraktning at kablede og trådløse tilkoblinger blir mindre og mindre sikre over tid (målrettede angrep, KRACK WPA2 cracking angrep и Dragonblood angrep mot WPA3), jeg vurderer seriøst å bruke WireGuard for alle enhetene mine, uansett hvilket miljø de er i.

Programvareinstallasjon

WireGuard gir forhåndskompilerte pakker for de fleste Linux-, Windows- og macOS-distribusjoner. Android- og iOS-apper leveres gjennom appkataloger.

Jeg har den nyeste Fedora Linux 31, og jeg var for lat til å lese manualen før jeg installerte. Fant akkurat pakkene wireguard-tools, installerte dem, og kunne ikke finne ut hvorfor ingenting fungerte. Ytterligere undersøkelser viste at jeg ikke har pakken installert wireguard-dkms (med en nettverksdriver), men den var ikke i depotet til distribusjonen min.

Hvis jeg hadde lest instruksjonene, ville jeg ha tatt de riktige trinnene:

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

Jeg har Raspbian Buster-distribusjonen installert på min Raspberry Pi, det er allerede en pakke der wireguard, installer det:

$ sudo apt install wireguard

På min Android-telefon installerte jeg applikasjonen WireGuardVPN fra den offisielle Google App Store-katalogen.

Montering av nøkler

For peer-autentisering bruker Wireguard et enkelt privat/offentlig nøkkelskjema for å autentisere VPN-peers. Du kan enkelt lage VPN-nøkler ved å bruke følgende kommando:

$ 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

Dette gir oss tre nøkkelpar (seks filer). Vi vil ikke referere til filene i konfigurasjonene, men kopier innholdet her: hver nøkkel er én linje i base64.

Opprette en konfigurasjonsfil for VPN-serveren (Raspberry Pi)

Konfigurasjonen er ganske enkel, jeg opprettet følgende fil /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

Et par merknader:

  • På de riktige stedene må du sette inn linjer fra filene med tastene
  • VPN-en min bruker internt bånd 10.200.200.0/24
  • For lag PostUp/PostDown Jeg har det eksterne nettverksgrensesnittet wwan0, du kan ha et annet (for eksempel eth0)

VPN-nettverket heves enkelt med følgende kommando:

$ sudo wg-quick up wg0

En liten detalj: som DNS-serveren jeg brukte dnsmasq knyttet til et nettverksgrensesnitt br0, Jeg har også lagt til enheter wg0 til listen over tillatte enheter. I dnsmasq gjøres dette ved å legge til en ny nettverksgrensesnittlinje i konfigurasjonsfilen /etc/dnsmasq.conf, for eksempel:

interface=br0
interface=wg0

I tillegg la jeg til en iptable-regel for å tillate trafikk til UDP-lytteporten (51280):

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

Nå som alt fungerer, kan vi sette opp den automatiske lanseringen av VPN-tunnelen:

$ sudo systemctl enable [email protected]

Klientkonfigurasjon på bærbar PC

Lag en konfigurasjonsfil på en bærbar datamaskin /etc/wireguard/wg0.conf med samme innstillinger:

[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

Merknader:

  • I stedet for edgewalker må du spesifisere den offentlige IP- eller VPN-serververten
  • Ved å sette AllowedIPs10.200.200.0/24, bruker vi kun VPN for å få tilgang til det interne nettverket. Trafikk til alle andre IP-adresser/servere vil fortsette å gå gjennom "normale" åpne kanaler. Den vil også bruke den forhåndskonfigurerte DNS-serveren på den bærbare datamaskinen.

For testing og automatisk oppstart bruker vi de samme kommandoene wg-quick и systemd:

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

Sette opp en klient på en Android-telefon

For en Android-telefon lager vi en veldig lik konfigurasjonsfil (la oss kalle det 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

I motsetning til konfigurasjonen på den bærbare datamaskinen, må telefonen bruke vår VPN-server som DNS-server (linje DNS), og passerer også all trafikk gjennom VPN-tunnelen (AllowedIPs = 0.0.0.0/0).

I stedet for å kopiere filen til mobilenheten din, kan du konvertere den til en QR-kode:

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

QR-koden sendes ut til konsollen som ASCII. Den kan skannes fra Android VPN-appen og vil automatisk sette opp en VPN-tunnel.

Utgang

Å sette opp WireGuard er rett og slett magisk sammenlignet med OpenVPN.

Kilde: www.habr.com

Legg til en kommentar