Konfigurera ett självvärdat VPN med Wireguard
A VPN (Virtual Private Network) låter användaren ansluta till ett privat nätverk på distans som om användarens dator var direkt ansluten till det privata nätverket. Tekniken utvecklades ursprungligen för att möjliggöra fjärråtkomst till ett företags interna privata nätverk, för anställda som faktiskt inte finns på platsen för det interna nätverket.
En VPN-server är utplacerad på platsen för det interna nätverket. Denna server är på det offentliga nätverket och kan nås med en VPN-klient av den anställde. Autentisering krävs för att ansluta till VPN-servern. Kommunikationen mellan VPN-servern och VPN-klienten säkras med ett tunnlingsprotokoll. Observera att denna kommunikation kan vara krypterad eller inte, men vanligtvis i de flesta VPN-protokoll är den krypterad.
En annan användning av VPN är att få anonymitet när du ansluter till Internet eller för att kringgå geografiska begränsningar som införs när du besöker vissa webbplatser. I sådana fall är det nätverk som användaren vill ansluta till inte ett privat nätverk utan istället är det Internet.
Många VPN-protokoll har utvecklats under åren. Dessa protokoll använder sig av olika tunnlingsprotokoll och krypteringsalgoritmer för kommunikation mellan servern och klienten.
Ett sådant protokoll, som har fått stor användning nyligen, är Trådskydd. Wireguard är lättare, enklare och mer presterande än välkända traditionellt använda VPN-protokoll som OpenVPN, IPSec. Det är redan implementerat för Windows, Mac OS och ett stort antal Linux-distributioner. I Linux är den implementerad som en kärnmodul. Det är tillgängligt i officiella arkiv för Ubuntu 20.04.
I den här artikeln kommer vi att se hur du ställer in en Wireguard VPN-server och klient i Ubuntu 20.04.
Installation
För den här artikeln ställer jag in en Wireguard Server på en Ubuntu 20.04 Linode och Wireguard Client på min lokala dator med Ubuntu 20.04.
Förpackningen trådskydd
installerar både Wireguard Server och Client. Kör följande kommando på både serverdatorn och klientdatorn.
sudo apt installera wireguard
Serverkonfiguration
Säkerhetsnycklar
Vi behöver generera en uppsättning offentliga/privata nyckelpar för att autentisera och säkra Wireguard-anslutningen. Detta kan göras med hjälp av följande kommandon:
sudo su cd /etc/wireguard umask 077 wg genkey | tee private_key | wg pubkey > public_key
Observera att vi utför alla konfigurationsuppgifter som en superanvändare. Anledningen är att tillgången till katalogen /etc/wireguard
förhindras för normala användare, och katalogåtkomst kan inte erhållas med bara sudo-privilegier för en normal användare.
Därefter ställer vi in filskapandemasken till 077
. Detta innebär att när en ny fil skapas i den här mappen av någon process, kommer dess behörigheter automatiskt att maskeras med 077. T.ex. om en fil skapas i den här mappen med behörigheter 777, maskeras den automatiskt och behörigheterna blir i praktiken 700. Detta görs så att endast ägaren av filen har alla behörigheter på filen, och alla andra har inga behörigheter.
På nästa rad, vi genererar det offentliga/privata nyckelparet för servern. De sparas i filer privat_nyckel
och public_key
. För att se nycklarna, kör:
katt privat_nyckel katt offentlig nyckel
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91.jpg)
Kopiera den privata nyckeln, vi behöver den i nästa steg.
Notera: Dela aldrig din privata nyckel offentligt!
Konfigurationsfil
Låt oss skapa en konfigurationsfil för Wireguard-servern. Du kan välja vilket namn som helst för filen. Vi kommer att skapa en fil wg0.conf
i detta exempel.
vim wg0.conf
Lägg till följande i filen.
[Gränssnitt] Adress = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FRAMÅT -i wg0 -j ACCEPTERAR; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FRAMÅT -i wg0 -j ACCEPTERA; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FRAMÅT -i wg0 -j ACCEPTERAR; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Klistra in den privata nyckeln som vi tidigare kopierade på rad 5 i koden ovan.
Vi måste konfigurera Wireguard på ett annat (virtuellt) subnät än serverns IP-adress. Här har jag använt 10.20.43.1 för servern och kommer att använda 10.20.43.2 för klienten. Alla undernät kan användas här. För att få serverns och gränssnittets IP-adress, kör:
ifconfig
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-1.jpg)
Notera serverns IP-adress. Detta krävs under klientkonfigurationen.
Gränssnittet som används av servern, som visas i bilden ovan, är eth0
. Gränssnittsnamnet kan skilja sig beroende på användarens nätverk, det kan vara det wlan0
eller wlp2s0
om användaren är ansluten till ett WiFi-nätverk med hjälp av ett trådlöst kort.
Ersätt i
Skicka upp
och PostDown
med ditt gränssnitt; i detta exempel är det eth0
.Skicka upp
och PostDown
direktiv används för att specificera vilka kommandon som ska köras när servern startar respektive stoppar. I vårt exempel använder vi iptables
kommando för att ställa in IP-regler så att serverns IP-adress delas av klienterna. Reglerna försvinner när servern stannar.
Spara och avsluta filen. När du använder vim, tryck Esc, skriv sedan :wq
och tryck Stiga på för att spara och avsluta.
Om du använder en ufw
brandvägg på servern måste vi tillåta UDP-anslutningar till porten för VPN-servern, 51190.
ufw tillåt 51190/udp
Starta tjänsten
Nu när konfigurationen är klar kan vi starta Wireguard VPN-tjänsten.
Att möjliggöra tjänsten för att starta vid uppstart, kör:
systemctl aktivera wg-quick@wg0
Notera det här wg0
är namnet på konfigurationsfilen.
Att börja tjänsten, kör:
tjänsten wg-quick@wg0 start
Kontrollera att tjänsten har startat framgångsrikt:
tjänsten wg-quick@wg0 status
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-2.jpg)
Kontrollera att gränssnittet vi skapade i konfigurationsfilen har startat med IP-kommandot.
ip en show wg0
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-3.jpg)
Wireguard VPN-servern är nu konfigurerad och igång. Låt oss konfigurera klienten nu.
Klientkonfiguration
Klientkonfiguration för Wireguard är mer eller mindre densamma som en serverkonfiguration. Vi genererar nycklarna för klienten och skapar sedan en konfigurationsfil.
Säkerhetsnycklar
För att generera den offentliga/privata nyckeln par för klienten, kör:
sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key
De offentliga och privata nycklarna för klienten genereras nu i respektive filer client_private_key
och client_public_key
.
Kontrollera att de har skapats med hjälp av katt
kommando.
cat client_private_key cat client_public_key
Kopiera den visade privata nyckeln eftersom vi behöver lägga till den i konfigurationsfilen för klienten.
Konfigurationsfil
Skapa konfigurationsfilen med vilket namn du vill. Vi kommer att skapa den med namnet wg0-klient
för detta exempel.
vim wg0-client.conf
Lägg till följande konfiguration.
[Gränssnitt] # IP-adress och privat nyckel för klientadressen = 10.20.43.2/24 PrivateKey = [Peer] # Offentlig nyckel, IP-adress och port för servern PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0
Ange subnätadressen för klienten. Som beskrivits tidigare använder vi 10.20.43.2
för kunden i detta exempel.
Lägg till klientens privata nyckel genererade i föregående steg på rad 4 i konfigurationskoden ovan.
Under "Peer" lägger vi till information om Wireguard VPN-servern vi vill ansluta till.
Ange serverns publika nyckel. Gå in i serverns IP-adress, som vi tidigare noterat, och port i det givna formatet mot Slutpunkt. Detta är den port som vi angav i serverkonfigurationsfilen och på vilken VPN-tjänst på servern startade.
Tillåtna IP-adresser bör anges som givna (0.0.0.0/0) så att varje begäran på en dynamisk publik IP som används av klienten alltid kommer att vidarebefordras till VPN-servern.
Spara och avsluta filen. När du använder vim, tryck Esc, skriv sedan :wq
och tryck Stiga på för att spara och avsluta.
Aktivera kundtjänsten att köra med varje start och starta den.
systemctl aktivera wg-quick@wg-client-tjänsten wg-quick@wg-client start
Kontrollera om tjänsten har startat.
tjänsten wg-quick@wg-client status
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-4.jpg)
Lägger till Peer till servern
Nu har vi VPN-servern och klienten igång. En säker tunnel mellan de två upprättas dock inte om vi inte upprättar en peer-to-peer-anslutning mellan servern och klienten.
Gå tillbaka till servern. Först, stoppa VPN-tjänsten.
tjänsten wg-quick@wg0 stopp
Öppna sedan konfigurationsfilen till lägga till konfiguration för peer (klient).
vim /etc/wireguard/wg0.conf
Bifoga följande rader till filen.
[Peer] PublicKey = AllowedIPs = 10.20.43.2/32
Nu, starta VPN-tjänsten igen.
tjänsten wg-quick@wg0 start
Det är allt! Detta är all konfiguration som behövs för Wireguard VPN-klient och serverinstallation. Låt oss nu testa vår VPN.
Testar VPN
Låt oss först göra en enkel ping från klienten till servern för att säkerställa att VPN-tunnelkommunikationen fungerar. Kör följande på klienten:
ping 10.20.43.1
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-5.jpg)
Nästa, öppna en webbläsare och öppna valfri webbplats för att kontrollera om du kan ansluta till Internet från klientdatorn. Du kan också kontrollera din internetanslutning från kommandoraden med hjälp av wget
.
wget
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-6.jpg)
Nu har vi kontrollerat tunnelanslutningen och internetanslutningen. Om båda fungerar måste vi nu se till att all internettrafik som kommer till klienten passerar genom servern.
För detta behöver vi helt enkelt kontrollera klientens IP-adress som ses av Internet. Ett sätt att göra det är att gå till whatsmyip.org. Eller från kommandoraden kan vi fråga en annan liknande tjänst som heter IP-info, med hjälp av Curl.
Kör följande på klientdatorn
curl //ipinfo.io/ip
![](http://img.drupalst.com/wp-content/uploads/linux/1480/qsdoqcnq91-7.jpg)
Ja. Det är den offentliga IP-adressen för Linode där VPN-servern är värd. Detta är hur anonymitet uppnås med VPN, eftersom över hela Internet nu IP-adressen för VPN-servern ses och inte för din dator.
Slutsats
Den enkla installationen är en av de viktigaste fördelarna med Wireguard jämfört med traditionell VPN-programvara som OpenVPN, som behöver en högre nivå av nätverks- och routingkunskaper för att ställa in. Det finns dock en brist på detaljerad officiell dokumentation för Wireguard vilket kan orsaka problem om din Wireguard-installation ger fel eller inte fungerar som förväntat.
Ändå är Wireguard ett utmärkt val om du vill ha en självvärd VPN för säker kommunikation över Internet. För att lära dig mer om Wireguard och de protokoll och tekniker den använder kan du kolla in den officiella webbplatsen.