Een eenvoudige VPN opzetten met WireGuard en Raspberry Pi als server

Omdat WireGuard onderdeel zal worden van de aankomende Linux-kernel 5.6 besloot ik te kijken hoe ik deze VPN het beste kon integreren met mijn LTE-router/accesspoint op Raspberry Pi.

Uitrusting

  • Raspberry Pi 3 met LTE-module en openbaar IP-adres. Er zal hier een VPN-server aanwezig zijn (hierna in de tekst genoemd). randloper)
  • Een Android-telefoon die voor alle communicatie een VPN moet gebruiken
  • Linux-laptop die alleen een VPN binnen het netwerk mag gebruiken

Elk apparaat dat verbinding maakt met de VPN moet verbinding kunnen maken met alle andere apparaten. Een telefoon moet bijvoorbeeld verbinding kunnen maken met een webserver op een laptop als beide apparaten deel uitmaken van een VPN-netwerk. Als de installatie vrij eenvoudig blijkt te zijn, kun je overwegen om de desktop op de VPN aan te sluiten (via Ethernet).

Gezien het feit dat bekabelde en draadloze verbindingen in de loop van de tijd steeds minder veilig worden (gerichte aanvallen, KRACK WPA2-kraakaanval и Dragonblood-aanval tegen WPA3), overweeg ik serieus WireGuard te gebruiken voor al mijn apparaten, ongeacht in welke omgeving ze zich bevinden.

Software installatie

WireGuard biedt voorgecompileerde pakketten voor de meeste Linux-, Windows- en macOS-distributies. Android- en iOS-apps worden geleverd via app-mappen.

Ik heb de nieuwste Fedora Linux 31 en ik was te lui om de handleiding te lezen voordat ik installeerde. Ik heb net de pakketten gevonden wireguard-tools, installeerde ze en kon toen niet achterhalen waarom niets werkte. Nader onderzoek wees uit dat ik het pakket niet geïnstalleerd heb wireguard-dkms (met een netwerkstuurprogramma), maar het stond niet in de repository van mijn distributie.

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

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

Ik heb de Raspbian Buster-distributie op mijn Raspberry Pi geïnstalleerd, daar staat al een pakket wireguard, installeer het:

$ sudo apt install wireguard

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

Installatie van sleutels

Voor peer-authenticatie gebruikt Wireguard een eenvoudig privé/publiek sleutelschema om VPN-peers te authenticeren. U kunt eenvoudig VPN-sleutels maken met behulp van de volgende opdracht:

$ 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 sleutelparen (zes bestanden). We zullen niet verwijzen naar de bestanden in de configuraties, maar kopiëren de inhoud hier: elke sleutel is één regel in base64.

Een configuratiebestand maken 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 = <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

Een paar opmerkingen:

  • Op de juiste plaatsen moet u met de toetsen regels uit de bestanden invoegen
  • Mijn VPN gebruikt de interne band 10.200.200.0/24
  • Voor teams PostUp/PostDown Ik heb de externe netwerkinterface wwan0, het kan zijn dat u een andere heeft (bijvoorbeeld eth0)

Het VPN-netwerk is eenvoudig op te zetten met het volgende commando:

$ sudo wg-quick up wg0

Een klein detail: als de DNS-server die ik gebruikte dnsmasq gekoppeld aan een netwerkinterface br0, Ik heb ook apparaten toegevoegd wg0 naar de lijst met toegestane apparaten. In dnsmasq wordt dit gedaan door een nieuwe netwerkinterfaceregel aan het configuratiebestand toe te voegen /etc/dnsmasq.conf, bijvoorbeeld:

interface=br0
interface=wg0

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

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

Nu alles werkt, kunnen we de automatische lancering van de VPN-tunnel instellen:

$ sudo systemctl enable [email protected]

Clientconfiguratie op laptop

Maak een configuratiebestand op een laptop /etc/wireguard/wg0.conf met dezelfde instellingen:

[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

Opmerkingen:

  • In plaats van edgewalker moet u de openbare IP- of VPN-serverhost opgeven
  • Door instelling AllowedIPs op 10.200.200.0/24, gebruiken we alleen VPN om toegang te krijgen tot het interne netwerk. Verkeer naar alle andere IP-adressen/servers blijft via “normale” open kanalen lopen. Het maakt ook gebruik van de vooraf geconfigureerde DNS-server op de laptop.

Voor testen en automatisch starten gebruiken we dezelfde commando's wg-quick и systemd:

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

Een client instellen op een Android-telefoon

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

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

In plaats van het bestand naar uw mobiele apparaat te kopiëren, kunt u het naar een QR-code converteren:

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

De QR-code wordt als ASCII naar de console uitgevoerd. Het kan worden gescand vanuit de Android VPN-app en zal automatisch een VPN-tunnel opzetten.

Uitgang

Het instellen van WireGuard is eenvoudigweg magisch vergeleken met OpenVPN.

Bron: www.habr.com

Voeg een reactie