WireGuard VPN: Installation och konfiguration av VPN-server och klienter

WireGuard VPN är en helt gratis programvara som gör att vi kan skapa VPN-tunnlar. Denna kompletta programvara innehåller alla nödvändiga kommunikations- och kryptografiprotokoll för att bygga ett virtuellt privat nätverk mellan flera klienter och en server. WireGuard ger bättre prestanda än IPsec-protokollet och OpenVPN (både i anslutningarnas hastighet och latens), idag kommer vi att förklara dess huvudfunktioner, hur man enkelt installerar och konfigurerar det.

trådskydd-14

WireGuard VPN-funktioner

WireGuardVPN är en programvara för skapa ett virtuellt privat nätverk (VPN) extremt enkelt att konfigurera , väldigt snabbt (snabbare än IPsec och OpenVPN) och som använder mest moderna kryptografi som standard , utan att behöva välja mellan olika symmetriska krypteringsalgoritmer, asymmetriska och hashing. Målet med WireGuard VPN är att bli en standard och att fler hemmabrukare och företag ska börja använda det istället för att använda IPsec eller det populära OpenVPN som är svårare att konfigurera och långsammare. Denna programvara är utformad för att användas av alla målgrupper, både för hemmabrukare och superdatorer.

Med WireGuard VPN det är inte nödvändigt att hantera anslutningarna , oroa dig för tillståndet i det virtuella privata nätverket, hantera processer eller vet vad som finns under programvaran för att få det att fungera, precis som IPsec, där det ofta är nödvändigt att titta på loggar och undersöka vad som händer. En annan styrka är att konfigurationen är extremt grundläggande, men mycket kraftfull.

Denna programvaran är en L3 VPN , nu räcker det använder endast tunneling , det händer inte som OpenVPN där vi har möjlighet att arbeta i transportläge eller tunnelläge. I detta fall kommer vi alltid att använda tunnelläge, dessutom är det kompatibelt med båda IPv4-nätverk och IPv6-nätverk Dessutom kan det kapsla IPv4-paket i IPv6 och vice versa. Transportlagerprotokollet som används av WireGuard är UDP , så vi måste öppna en viss port (att välja, den kan ändras) i vår router som gör NAT.

Kompatibla operativsystem

Denna nya VPN-programvara släpptes först för Linux Kärnan, men det är det plattformsoberoende , eftersom det är kompatibelt med Windows, Linux, MacOS, FreeBSD, Android och även iOS operativsystem . En av styrkorna med denna programvara är att klient- och serverkonfigurationen är exakt desamma i olika operativsystem, med samma syntax, så att du kan konfigurera servern och klienterna i Linux och sedan "skicka" konfigurationen till andra enheter med andra operativsystem inuti.

Kryptografi används

Med IPsec- och OpenVPN-protokollen är det nödvändigt att både klienterna och servern "överens" om de kryptografiska protokollen som ska användas, både i fas 1 och fas 2 (av IPsec), och i kontroll- och datakanalen (av OpenVPN ), annars kommer inte anslutningen att upprättas korrekt. WireGuard ger ett helt kryptografiskt "paket" , säkerställer anslutning utan att behöva välja något. Om ett av de kryptografiska protokollen som används av denna VPN på en punkt anses vara osäkra, är det lika enkelt som att lansera en andra version av WireGuard med ett nytt protokoll som inte har någon säkerhetsfel, och mellan klienterna och servern kommer det att vara indikerade att använda "version 2", är helt transparent för oss.

En annan mycket viktig detalj är att denna VPN använder en mycket liten källkod . Det finns väldigt få kodrader jämfört med StrongSwan eller OpenVPN, så revisioner kan utföras på mycket kort tid, det kommer också att vara lättare att hitta möjliga sårbarheter eller säkerhetsbrister. Med färre kodrader är ytan på en eventuell attack på VPN-programmeringen också mindre.

WireGuard VPN använder för närvarande ChaCha20 för symmetrisk kryptering, autentiserad med Poly1305 , med hjälp av en AEAD-konstruktion. Den använder också Curve25519 för ECDH, BLAKE2 för hasning, SipHash24 för hashbar nycklar och HKDF för nyckelderering, vilket innebär att vi använder de mest moderna kryptografiska algoritmerna i syfte att ge maximal säkerhet och prestanda.

Support för Roaming och Kill Switch

Denna programvara är utformad för att kunna ströva lätt och snabbt , om vår enhet byter nätverk och logiskt ändrar offentlig IP, till exempel när vi passerar från Wi-Fi-nätverket och 4G / LTE-nätverket för vår operatör, kommer VPN-anslutningen att förbli upphöjd eftersom de snabbt kommer att autentisera med VPN server, så att vi alltid kommer att vara anslutna till VPN.

Vi kan också aktivera Kill-Switch på enheten , på detta sätt, om VPN-anslutningen avbryts, kommer själva programvaran också att ansvara för att avbryta all nätverkstrafik tills VPN-anslutningen återupprättas, så att vi inte navigerar utan det skydd som denna VPN ger oss.

WireGuard VPN-installation

Installationen av denna programvara är väldigt enkel, vi måste bara göra det gå till den officiella webbplatsen för WireGuard , och ladda ner körbara för Windows- eller MacOS-operativsystem. Om du använder ett Linux-baserat operativsystem med motsvarande förvar måste du förmodligen lägga till de specifika WireGuard-lagren, eftersom det för närvarande inte finns i den "stabila" grenen som standard.

Vi har till exempel installerat VPN-servern i en Debian senaste version, för att installera den har vi följt stegen som anges på den officiella webbplatsen. Superanvändarbehörigheter krävs för att utföra installationen korrekt.

 sudo echo "deb http://deb.debian.org/debian/ unstable main"> /etc/apt/sources.list.d/unstable.list sudo printf 'Package: * / nPin: släpp a = unstable / nPin- Prioritet: 90 / n '> /etc/apt/preferences.d/limit-unstable sudo apt uppdatering sudo apt installera wireguard

Vi får inte glömma att denna VPN också är kompatibel med operativsystem som FreeBSD, OpenBSD och till och med OpenWRT för routrar, eftersom du helt enkelt installerar det genom “opkg” eftersom all extra programvara vanligtvis installeras.

Om du ska installera VPN-klienten på din smartphone med Android eller iOS har vi för närvarande de officiella applikationerna, så du kan installera den utan problem från Google Play och app Store respektive:

WireGuard-konfiguration: offentliga, privata nycklar och konfigurationsfiler

När vi väl har installerat WireGuard, både på datorn som fungerar som en server, såväl som på alla klienter som vi vill ansluta, är det nödvändigt att konfigurera det. Det första vi måste göra är att skapa det offentlig-privata nyckelparet, både på servern och på alla klienter som vi vill ansluta. Vi har använt ett Debian-operativsystem för att generera nycklarna och även för att konfigurera servern, men vi kan också göra det direkt i Windows-programvaran.

Rutten för att köra WireGuard-servern på Debian är / etc / wireguard /, så vi kommer att gå till den här rutten med följande kommando:

cd /etc/wireguard/

Jämn offentlig-privat nyckelgenerering för servern

För att generera det offentliga och privata nyckelparet just på den här platsen måste vi helt enkelt sätta:

wg genkey | tee claveprivadaservidor | wg pubkey > clavepublicaservidor

Nu kommer vi att ha två filer, en med den offentliga nyckeln och en med den privata:

  • Privat nyckel: 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
  • Offentlig nyckel: xeTkJjjBUyp8paxTgajwDa + qWjrD2RpXlJRSHMwcGDQ =

Dessa nycklar är de som vi kommer att använda för WireGuard VPN «server».

Jämn offentlig-privat nyckelgenerering för en klient

För att skapa ytterligare ett par offentliga och privata nycklar, som vi kommer att använda i en klient, kan vi skapa dem i en ny mapp eller skapa dem på samma plats, men med ett annat namn.

wg genkey | tee claveprivadacliente1 | wg pubkey > clavepublicacliente1

Nu kommer vi att ha två filer, en med den offentliga nyckeln och en med den privata:

  • Privat nyckel: yPMpP2raY4FoCEJkmzQMlxzm / 6RBIW9HkjY6pVFIOnI =
  • Offentlig nyckel: 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPlLsri8klE =

Dessa nycklar är de vi kommer att använda för en WireGuard VPN-klient.

Serverkonfigurationsfil

Konfigurationen av WireGuard-servern är ganska enkel jämfört med IPsec- eller OpenVPN-servrar, men vi måste ta hänsyn till flera saker som vi förklarar nedan.

På servern måste vi ha en ” Gränssnitt ”Avsnitt, i det här avsnittet kan vi ange privat IP-adress som identifierar servern när klienterna ansluter. Vi måste komma ihåg att denna VPN är L3, så vi kan lägga till någon privat IP-adress som inte används vid en viss tidpunkt. Till exempel, i OpenVPN är standardundernätet 10.8.0.0/24, här kan vi också sätta samma eller något annat subnät 192.168.2.0/24 (och 192.168.2.1 är själva servern, och de andra IP-adresserna som är klienterna) . Med syntaxen av « Adress »Vi sätter det VPN-subnät som vi vill ha.

I " PrivateKey »Vi måste ange den privata nyckel som vi tidigare genererat för servern. I " Lyssna på Port »Vi kommer att sätta UDP-porten som vi vill använda för servern, den här porten är den som vi senare måste" öppna "i NAT om vi står bakom en router med NAT.

Slutligen, i detta avsnitt av "Interface" kan vi också definiera kommandon som ska utföras efter att det virtuella gränssnittet har lyftts med "PostUp" och efter att det virtuella gränssnittet kastats med "PostDown". Som ni ser har vi kommenterat det för närvarande, eftersom vi inte vill göra NAT mot detta gränssnitt, men det kan göras perfekt.

I avsnittet ” Päron ”Är där vi måste sätta listan över klienter som vi tillåter att ansluta. I det här fallet kommer vi bara att ansluta en «peer», så vi definierar din offentliga nyckel med « PublicKey »Som vi har skapat tidigare (eller att klienten har tillhandahållit oss, eftersom det är möjligt att det har genererats av honom), och vi kan också ange om vi tillåter den klienten med en specifik IP-adress att ansluta. Med " TillåtnaIP »Direktiv kan vi filtrera källens IP-adresser, om vi sätter 0.0.0.0/0 betyder det att vi tillåter någon IP-adress.

[Gränssnitt] Adress = 192.168.2.1/24
PrivateKey = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
ListenPort = 51820

#PostUp = iptables -A FORWARD -i% i -j ACCEPT; iptables -A FRAMTID -o% i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
#PostDown = iptables -D FRAMÅT -i% i -j ACCEPTERA; iptables -D FRAMÅT -o% i -j ACCEPTERA; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

[Peer] PublicKey = 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPlLsri8klE =
TillåtnaIPs = 0.0.0.0/0

Om vi ​​vill lägga till fler "kamrater", definierar du dem individuellt i konfigurationsfilen enligt följande:

[Gränssnitt] Adress = 192.168.2.1/24
PrivateKey = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
ListenPort = 51820

#PostUp = iptables -A FORWARD -i% i -j ACCEPT; iptables -A FRAMTID -o% i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
#PostDown = iptables -D FRAMÅT -i% i -j ACCEPTERA; iptables -D FRAMÅT -o% i -j ACCEPTERA; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

[Peer] PublicKey = 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPlLsri8klE =
TillåtnaIPs = 0.0.0.0/0

[Peer] PublicKey = klientens offentliga nyckel 2
TillåtnaIPs = 0.0.0.0/0

[Peer] PublicKey = kundens nyckel 3
TillåtnaIPs = 0.0.0.0/0

[/ kod]

Konfigurationsfilen kan kallas «wg0.conf», eftersom WireGuard skapar virtuella gränssnitt med det här namnet, idealiskt för att skilja dem perfekt. För att köra den här konfigurationsfilen, bara köra:

root@debian-vm:/etc/wireguard# wg-quick up wg0

När du startar det kommer WireGuard att ansvara för att skapa det virtuella gränssnittet, placera IP-adress, MTU och till och med skapa motsvarande rutter i routingtabellen:

root@debian-vm:/etc/wireguard# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.2.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

Konfigurationsfil för klienter

WireGuard-klientkonfigurationen är ganska enkel jämfört med IPsec- eller OpenVPN-servrar, men vi måste ta hänsyn till flera saker som vi förklarar nedan.

I klienten måste vi ha en ” Gränssnitt ”Avsnitt, i det här avsnittet kan vi ange privat IP-adress som identifierar klienten när vi ansluter. Vi måste komma ihåg att denna VPN är L3, så vi kan lägga till någon privat IP-adress som inte används vid en viss tidpunkt. Till exempel, i OpenVPN är standardundernätet 10.8.0.0/24, här kan vi också sätta samma eller något annat undernät 192.168.2.0/24 (och 192.168.2.1 är själva servern, och adressen 192.168.2.2 från och med nu , vara klienterna, med syntaxen av ” Adress ”Vi sätter det VPN-subnät som vi vill ha.

I " PrivateKey »Vi måste ange den privata nyckel som vi tidigare genererat för klienten.

I avsnittet ” Päron ”Där vi måste sätta den offentliga nyckeln med” PublicKey ”På WireGuard-servern som vi kommer att ansluta till, det vill säga den här offentliga nyckeln måste ha tillhandahållits till oss av servern. Vid detta tillfälle kan vi också använda ” TillåtnaIP ”-Direktivet, men operationen är annorlunda, vid det här tillfället kan vi definiera om vi bara vill gå via VPN till ett visst undernät (eller flera undernät), eller vi vill vidarebefordra all Internet-trafik via det virtuella privata nätverket. Om vi ​​lägger subnät separerade med komma kan vi få åtkomst till flera som vi har på servern, om vi vill vidarebefordra all trafik lägger vi helt enkelt 0.0.0.0/0, som det händer med IPsec.

Slutligen med " Slutpunkt »Direktiv kommer vi att definiera den offentliga IP-adressen till servern där vi har WireGuard VPN som körs, följt av två punkter (:) för den UDP-port som används. Vi måste komma ihåg att WireGuard använder UDP, så vi ska inte filtrera det på brandväggar.

Programvaran och kommunikationen med WireGuard försöker passera så obemärkt som möjligt om den inte används, det vill säga den skickar inte kontinuerligt data via VPN för att hålla tunneln aktiv, perfekt för att spara batteri- och mobildata på smartphones. I de flesta vanliga konfigurationer fungerar detta perfekt, men om vi står bakom en NAT eller brandvägg, det är möjligt att kommunikationen bryts eftersom inga data överförs, så det är nödvändigt att konfigurera ett "hålla vid liv". För att konfigurera Keep Alive, ange bara ”PersistentKeepAlive” -direktivet och ange ett heltal som betyder sekunder för att hålla sig vid liv. Enligt officiell dokumentation räcker det att ställa in 25 sekunder för de flesta brandväggar och NAT-system. Om vi ​​ställer in 0 inaktiveras den här funktionen. Om vi ​​står bakom NAT eller en brandvägg och vill ta emot inkommande anslutningar efter en lång tid utan trafik kommer detta direktiv att behövas, annars kan vi inte säga det.

[Interface] PrivateKey = yPMpP2raY4FoCEJkmzQMlxzm / 6RBIW9HkjY6pVFIOnI =
Adress = 192.168.2.2/32

[Peer] PublicKey = xeTkJjjBUyp8paxTgajwDa + qWjrD2RpXlJRSHMwcGDQ =
TillåtnaIPs = 0.0.0.0/0
Slutpunkt = 10.10.2.86:51820

#PersistentKeepalive = 25

I Windows-operativsystem kan vi importera samma konfiguration och vi har den redo att ansluta, även om vi kan ansluta från början till en klient, men vi måste "skicka" den genererade offentliga nyckeln till WireGuard-servern.

Det är också mycket viktigt att titta på WireGuard-loggarna för att kontrollera att VPN-anslutningen har upprättats korrekt. Vi kan inte lägga till en privat IP-adress som redan används i Windows-klienter i avsnittet "Gränssnitt / adress" eftersom vi har ett fel i anslutningen.

Som ni har sett är konfigurationen av WireGuard VPN verkligen lätt och snabb

WireGuard VPN-prestanda jämfört med L2TP / IPsec och OpenVPN

I RedesZone har vi kontrollerat prestanda för WireGuard VPN jämfört med L2TP / IPsec och OpenVPN, testerna har utförts i lokalt nätverk för att undvika problem med operatören, så vi kan mäta den verkliga maximala prestanda som kan ge oss en hårdvaruspecifik.

VPN-serverkonfigurationen vi har använt (för både L2TP / IPsec, OpenVPN och WireGuard) är som följer:

  • QNAP TS-1277: AMD Ryzen 7 2700 processor; RAM-minne: 64 GB RAM DDR4; Nätverksanslutning: QNAP QXG-10G2T-107 vid 10 Gbps med Cat7-kablar och en D-Link DXS-1210-10TS-omkopplare .
  • VPN-programvaran för L2TP / IPsec och OpenVPN (med UDP) är QVPN 2 från QNAP
  • I ett andra test med OpenVPN (med UDP) och AES-256-GCM använde vi Virtualization Station med Debian.
  • iperf3 installerades manuellt i QTS och även i virtualiserad Debian.

VPN-klientkonfigurationen som vi har använt (för både L2TP / IPsec, OpenVPN och WireGuard) är följande:

  • PC med AMD Ryzen 7 3800x processor; RAM-minne: 32 GB RAM DDR4 3200MHz; Nätverksanslutning: ASUS XG-C100C vid 10 Gbps med CAT7-kablar och en D-Link DXS-1210-10TS-omkopplare för anslutning av båda enheter . Operativsystem som används i testerna: Windows 10 1909.
  • Windows 10 L2TP / IPsec-klient
  • Senaste versionen av OpenVPN (2.4.8)
  • iperf 3 i Windows 10.

Prestandan som uppnåtts i testen är följande:

Som ni ser är den verkliga hastigheten för WireGuard dubbelt så hög som L2TP / IPsec eller OpenVPN, så vi kan säga att denna VPN är riktigt snabb.

Vi hoppas att denna installationshandledning hjälper dig och att du enkelt kan distribuera WireGuard-servrar och klienter för att säkert ansluta till vårt hem, företag eller internet från var som helst på ett säkert sätt.