Een eenvoudige VPN met WireGuard en Raspberry Pi als server instellen

Aangezien WireGuard een onderdeel zal worden van de toekomstige kernel van Linux 5.6, heb ik besloten om te kijken hoe ik deze VPN het beste kan integreren met mijn LTE-router/toegangspunt op Raspberry Pi.

Apparatuur

  • Raspberry Pi 3 met een LTE-module en een openbaar IP-adres. Hier zal de VPN-server staan (hierna aangeduid als edgewalker)
  • Een Android-telefoon die VPN voor alle communicatie moet gebruiken
  • Een Linux-laptop die VPN alleen binnen het netwerk moet gebruiken

Elk apparaat dat met de VPN verbindt, moet in staat zijn om met alle andere apparaten te communiceren. De telefoon moet bijvoorbeeld toegang kunnen krijgen tot de webserver op de laptop, als beide apparaten deel uitmaken van het VPN-netwerk. Als de configuratie eenvoudig genoeg is, kan ik overwegen om ook een desktop aan de VPN te verbinden (via Ethernet).

Gegeven dat zowel bedrade als draadloze verbindingen in de loop van de tijd steeds minder veilig worden (gerichte aanvallen, de KRACK-aanval op WPA2 en de Dragonblood-aanval op WPA3), overweeg ik serieus om WireGuard voor al mijn apparaten te gebruiken, ongeacht de omgeving waarin ze zich bevinden.

Software-installatie

WireGuard biedt vooraf gecompileerde pakketten voor de meeste Linux-distributies, Windows en macOS. Apps voor Android en iOS zijn beschikbaar via de appcatalogi.

Ik heb de laatste Fedora Linux 31 en voor de installatie had ik geen zin om de handleiding te lezen. Ik vond gewoon de pakketten wireguard-tools, installeerde deze, maar kon niet begrijpen waarom niets werkte. Verdere onderzoeken toonden aan dat ik het pakket wireguard-dkms (met de netwerkdriver) niet had geïnstalleerd, en dit was niet in de repository van mijn distributie.

Als ik de instructies had gelezen, had ik de juiste stappen genomen:

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

Op de Raspberry Pi heb ik de Raspbian Buster-distributie geïnstalleerd, daar is al een pakket aanwezig wireguard, we installeren het:

$ sudo apt install wireguard

Op mijn Android-telefoon heb ik de applicatie WireGuard VPN uit de officiële Google App Store geïnstalleerd.

Sleutelinstallatie

Voor de authenticatie van knooppunten gebruikt WireGuard een eenvoudige privé/open sleutel-systeem voor de authenticatie van VPN-knooppunten. U kunt eenvoudig VPN-sleutels maken met het volgende commando:

$ 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

Dit geeft ons drie paren sleutels (zes bestanden). Laten we niet naar bestanden in de configuraties verwijzen, maar de inhoud hier kopiëren: elke sleutel is één regel in base64.

Het creëren van een configuratiebestand voor de VPN-server (Raspberry Pi)

De configuratie is vrij eenvoudig, ik heb het volgende bestand gemaakt /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]
# mobiele telefoon
PublicKey = 
AllowedIPs = 10.200.200.3/32

Een paar opmerkingen:

  • De betreffende regels uit de bestanden met sleutels moeten op de juiste plaatsen worden ingevoerd
  • Mijn VPN-netwerk gebruikt een intern bereik 10.200.200.0/24
  • Voor de opdrachten PostUp/PostDown ik heb de externe netwerkinterface wwan0 opgegeven, u heeft mogelijk een andere (bijv. eth0)

Het VPN-netwerk kan eenvoudig worden gestart met de volgende opdracht:

$ sudo wg-quick up wg0

Één klein detail: als DNS-server heb ik gebruikt dnsmasq met de binding aan de netwerkinterface br0, ik heb ook apparaten wg0 aan de lijst met toegestane apparaten toegevoegd. In dnsmasq gebeurt dit door een nieuwe regel met de netwerkinterface in het configuratiebestand toe te voegen /etc/dnsmasq.conf, bijvoorbeeld:

interface=br0
interface=wg0

Daarnaast heb ik een iptable-regel toegevoegd om verkeer naar de luisterende UDP-poort (51280) toe te staan:

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

Nu alles werkt, kunnen we de automatische opstart van de VPN-tunnel configureren:

$ sudo systemctl enable wg-quick@wg0.service

Clientconfiguratie op de laptop

Op de laptop maken we een configuratiebestand aan /etc/wireguard/wg0.conf met dezelfde instellingen:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

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

Aantekeningen:

  • In plaats van edgewalker moet het publieke IP of de host van de VPN-server worden opgegeven
  • Door AllowedIPs en een werkende opdracht krijgen. 10.200.200.0/24, gebruiken we VPN alleen voor toegang tot het interne netwerk. Verkeer naar alle andere IP-adressen/serveren gaat nog steeds via "gewone" open kanalen. Ook wordt de vooraf ingestelde DNS-server op de laptop gebruikt.

Voor testen en automatische opstart gebruiken we dezelfde opdrachten wg-quick en systemd:

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

Instelling van de client op de Android-telefoon

Voor de Android-telefoon maken we een zeer vergelijkbaar configuratiebestand aan (laten we het noemen 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

In tegenstelling tot de configuratie op de laptop, moet de telefoon onze VPN-server gebruiken als DNS-server (regel DNS), en ook al het verkeer door de VPN-tunnel leiden (AllowedIPs = 0.0.0.0/0).

In plaats van het bestand naar het mobiele apparaat te kopiëren, kan het in een QR-code worden omgezet:

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

De QR-code verschijnt in de console als ASCII. Deze kan vanuit de Android VPN-app worden gescand en de VPN-tunnel automatisch configureren.

Uitslag

De configuratie van WireGuard is ronduit magisch in vergelijking met OpenVPN.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster