Konfigurera en enkel VPN med WireGuard och Raspberry Pi som server

Eftersom WireGuard kommer att bli en del av den kommande Linux-kärnan 5.6 bestämde jag mig för att se hur jag bäst kan integrera denna VPN med min LTE-router/åtkomstpunkt på Raspberry Pi.

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

  • Raspberry Pi 3 med LTE-modul och offentlig IP-adress. Det kommer att finnas en VPN-server här (nedan i texten kallas den edgewalker)
  • En Android-telefon som måste använda ett VPN för all kommunikation
  • Linux bärbar dator som bara ska använda en VPN inom nätverket

Varje enhet som ansluter till VPN måste kunna ansluta till alla andra enheter. Till exempel bör en telefon kunna ansluta till en webbserver på en bärbar dator om båda enheterna är en del av ett VPN-nätverk. Om installationen visar sig vara ganska enkel, kan du tänka på att ansluta skrivbordet till VPN (via Ethernet).

Med tanke på att trådbundna och trådlösa anslutningar blir mindre säkra med tiden (riktade attacker, KRACK WPA2 cracking attack и Dragonblood attack mot WPA3), Jag överväger allvarligt att använda WireGuard för alla mina enheter, oavsett vilken miljö de befinner sig i.

Programvaruinstallation

WireGuard tillhandahåller förkompilerade paket för de flesta Linux-, Windows- och macOS-distributioner. Android- och iOS-appar levereras via appkataloger.

Jag har den senaste Fedora Linux 31, och jag var för lat för att läsa manualen innan jag installerade. Hittade precis paketen wireguard-tools, installerade dem och kunde sedan inte ta reda på varför ingenting fungerade. Ytterligare undersökning visade att jag inte har paketet installerat wireguard-dkms (med en nätverksdrivrutin), men den fanns inte i min distributions arkiv.

Om jag hade läst instruktionerna hade jag tagit rätt steg:

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

Jag har Raspbian Buster-distributionen installerad på min Raspberry Pi, det finns redan ett paket där wireguard, installera det:

$ sudo apt install wireguard

På min Android-telefon installerade jag applikationen WireGuardVPN från den officiella Google App Store-katalogen.

Installation av nycklar

För peer-autentisering använder Wireguard ett enkelt privat/offentlig nyckelschema för att autentisera VPN-peers. Du kan enkelt skapa VPN-nycklar med följande 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

Detta ger oss tre nyckelpar (sex filer). Vi kommer inte att referera till filerna i konfigurationerna, utan kopiera innehållet här: varje nyckel är en rad i base64.

Skapa en konfigurationsfil för VPN-servern (Raspberry Pi)

Konfigurationen är ganska enkel, jag skapade följande 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

Ett par anteckningar:

  • På lämpliga platser måste du infoga rader från filerna med nycklarna
  • Mitt VPN använder internt band 10.200.200.0/24
  • För lag PostUp/PostDown Jag har det externa nätverksgränssnittet wwan0, du kan ha ett annat (till exempel eth0)

VPN-nätverket höjs enkelt med följande kommando:

$ sudo wg-quick up wg0

En liten detalj: som den DNS-server jag använde dnsmasq kopplat till ett nätverksgränssnitt br0, Jag har också lagt till enheter wg0 till listan över tillåtna enheter. I dnsmasq görs detta genom att lägga till en ny nätverksgränssnittslinje i konfigurationsfilen /etc/dnsmasq.conf, till exempel:

interface=br0
interface=wg0

Dessutom lade jag till en iptable-regel för att tillåta trafik till UDP-lyssningsporten (51280):

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

Nu när allt fungerar kan vi ställa in den automatiska lanseringen av VPN-tunneln:

$ sudo systemctl enable [email protected]

Klientkonfiguration på bärbar dator

Skapa en konfigurationsfil på en bärbar dator /etc/wireguard/wg0.conf med samma inställningar:

[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

Anmärkningar:

  • Istället för edgewalker måste du ange den offentliga IP- eller VPN-servervärden
  • Har installerat AllowedIPs10.200.200.0/24, vi använder bara VPN för att komma åt det interna nätverket. Trafiken till alla andra IP-adresser/servrar kommer att fortsätta att gå genom "normala" öppna kanaler. Den kommer också att använda den förkonfigurerade DNS-servern på den bärbara datorn.

För testning och automatisk start använder vi samma kommandon wg-quick и systemd:

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

Konfigurera en klient på en Android-telefon

För en Android-telefon skapar vi en mycket liknande konfigurationsfil (låt oss kalla 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

Till skillnad från konfigurationen på den bärbara datorn måste telefonen använda vår VPN-server som DNS-server (linje DNS), och även skicka all trafik genom VPN-tunneln (AllowedIPs = 0.0.0.0/0).

Istället för att kopiera filen till din mobila enhet kan du konvertera den till en QR-kod:

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

QR-koden kommer att matas ut till konsolen som ASCII. Den kan skannas från Android VPN-appen och kommer automatiskt att skapa en VPN-tunnel.

Utgång

Att ställa in WireGuard är helt enkelt magiskt jämfört med OpenVPN.

Källa: will.com

Lägg en kommentar