Opsæt en simpel VPN med WireGuard og Raspberry Pi som server

Da WireGuard vil blive en del af den fremtidige Linux 5.6 kerne, har jeg besluttet at undersøge, hvordan jeg bedst integrerer denne VPN med min LTE-router/adgangspunkt på Raspberry Pi.

Udstyr

  • Raspberry Pi 3 med LTE-modul og en offentlig IP-adresse. Her vil der være en VPN-server (herefter kaldet edgewalker)
  • En Android-telefon, der skal bruge VPN til al kommunikation
  • En Linux-bærbar, der kun skal bruge VPN internt i netværket

Hver enhed, der tilsluttes til VPN, skal kunne oprette forbindelse til alle andre enheder. For eksempel skal telefonen kunne oprette forbindelse til webserveren på bærbaren, hvis begge enheder er en del af VPN-netværket. Hvis opsætningen bliver enkel nok, kan man overveje at forbinde stationære computere (via Ethernet) til VPN.

I betragtning af, at lednings- og trådløse forbindelser over tid bliver mindre sikre (målrettede angreb, KRACK-angrebet mod WPA2 og Dragonblood-angrebet mod WPA3), overvejer jeg seriøst at bruge WireGuard på alle mine enheder, uanset hvilket miljø de kører i.

Installation af software

WireGuard tilbyder forkomponerede pakker til de fleste Linux, Windows og macOS distributioner. Apps til Android og iOS findes gennem app-kataloger.

Jeg har den seneste Fedora Linux 31, og før installationen gad jeg ikke læse guiden. Jeg fandt bare pakkerne wireguard-tools, installerede dem, og kunne så ikke forstå, hvorfor intet fungerede. Yderligere undersøgelse viste, at jeg ikke havde installeret pakken wireguard-dkms (med netværksdriver), og den fandtes ikke i mit distributions repository.

Hvis jeg havde læst instruktionen, ville jeg have gjort de rigtige skridt:

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

På Raspberry Pi har jeg installeret Raspbian Buster distributionen, hvor pakken wireguard, er allerede tilgængelig, så lad os installere den:

$ sudo apt install wireguard

På Android-telefonen har jeg installeret appen WireGuard VPN fra den officielle Google App Store.

Installation af nøgler

For autentificering af noder bruger Wireguard en simpel offentlig/private nøgle-scheme til autentifikation af VPN-noder. Du kan nemt oprette VPN-nøgler med 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 giver os tre par nøgler (seks filer). Lad os ikke henvise til filerne i konfigurationerne, men i stedet kopiere indholdet her: hver nøgle er en linje i base64.

Oprettelse af konfigurationsfil til VPN-server (Raspberry Pi)

Konfigurationen er ret simpel, jeg har oprettet følgende fil /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
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 = 
AllowedIPs = 10.200.200.2/32

[Peer]
# mobiltelefon
PublicKey = 
AllowedIPs = 10.200.200.3/32

Et par bemærkninger:

  • I de relevante steder skal der indsættes linjer fra nøglefilerne
  • Mit VPN-netværk bruger et internt interval 10.200.200.0/24
  • For kommandoerne PostUp/PostDown har jeg angivet den eksterne netværksgrænseflade wwan0, du kan have en anden (for eksempel eth0)

VPN-netværket kan nemt startes med følgende kommando:

$ sudo wg-quick up wg0

En lille detalje: som DNS-server har jeg brugt dnsmasq med binding til netværksgrænsefladen br0, jeg har også tilføjet enheder wg0 til listen over tilladte enheder. I dnsmasq gøres dette ved at tilføje en ny linje med netværksgrænsefladen i konfigurationsfilen /etc/dnsmasq.conf, for eksempel:

interface=br0
interface=wg0

Desuden har jeg tilføjet en iptable-regel for at tillade trafik til lytte-UDP-porten (51280):

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

Nu, hvor alt fungerer, kan vi opsætte automatisk opstart af VPN-tunnelen:

$ sudo systemctl enable wg-quick@wg0.service

Klientkonfiguration på bærbar computer

På den bærbare computer opretter vi en konfigurationsfil /etc/wireguard/wg0.conf med de samme indstillinger:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Bemærkninger:

  • I stedet for edgewalker skal du angive den offentlige IP eller vært for VPN-serveren
  • Når vi har installeret AllowedIPs og få en fungerende kommando. 10.200.200.0/24, bruger vi VPN udelukkende til at få adgang til det interne netværk. Trafik til alle andre IP-adresser/servere vil stadig gå via «almindelige» åbne kanaler. En forudindstillet DNS-server på den bærbare computer vil også blive brugt.

Til test og automatisk opstart bruger vi de samme kommandoer wg-quick og systemd:

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

Klientopsætning på Android-telefon

For Android-telefonen opretter vi en meget lignende konfigurationsfil (lad os kalde den mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

I modsætning til konfigurationen på bærbaren skal telefonen bruge vores VPN-server som DNS-server (linje DNS), samt sende al trafik gennem VPN-tunnelen (AllowedIPs = 0.0.0.0/0).

I stedet for at kopiere filen til den mobile enhed, kan den konverteres til en QR-kode:

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

QR-koden vises i konsollen som ASCII. Den kan scannes fra Android VPN-appen og automatisk konfigurere VPN-tunnelen.

Output

Opsætningen af WireGuard er simpelthen magisk sammenlignet med OpenVPN.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster