En egen VPN-server ger dig krypterad trafik utan att betala en månadsavgift till en leverantör du måste lita på. WireGuard har på några år gått från experiment till standarden för moderna VPN-tunnlar, och sedan Linux-kärna 5.6 ligger koden direkt i kärnan. I den här guiden bygger du en komplett, fungerande WireGuard-server på Ubuntu 24.04 LTS och kopplar in både en mobil och en bärbar dator. Räkna med cirka 30 minuter från tom server till krypterad tunnel.
Du behöver inga förkunskaper i kryptografi. Vi går igenom varje kommando, visar exakt vad utdata ska se ut som, och listar de fallgropar som stoppar de flesta nybörjare (brandvägg, IP-forwarding och MTU). I slutet har du en självhostad VPN du själv kontrollerar, plus en felsökningstabell och svar på de vanligaste frågorna.
Vad är WireGuard och varför välja det 2026?
WireGuard är ett protokoll för krypterade VPN-tunnlar, skapat av Jason Donenfeld och numera en del av mainline Linux-kärnan sedan version 5.6. Tanken bakom projektet är radikal enkelhet. Där OpenVPN och IPsec består av hundratusentals rader kod, ryms WireGuards kärnimplementation i några tusen rader. En liten kodbas betyder färre buggar, snabbare granskning och en mindre attackyta. Red Hat och andra leverantörer pekar just på den lilla kodbasen som ett av de starkaste säkerhetsargumenten.
För dig som användare märks skillnaden på tre sätt. Tunneln startar nästan omedelbart, eftersom det inte finns någon tung handskakning som i TLS-baserade VPN. Den fungerar sömlöst över nätbyten, så din mobil behåller anslutningen när den hoppar mellan wifi och 5G. Och prestandan är hög, eftersom krypteringen sker i kärnan utan dyra kopieringar mellan användarrymd och kärna. WireGuard har därför blivit grunden under många kommersiella VPN-appar.
Att hosta din egen WireGuard-server ger fördelar som inget abonnemang matchar. Du vet exakt vem som har tillgång till loggarna (du själv), du kan nå hemnätverkets enheter på distans, och du slipper dela en IP-adress med tusentals andra. Nackdelen är att du själv ansvarar för att hålla servern uppdaterad och konfigurationen tät. Den här guiden ger dig en säker grundkonfiguration som du kan bygga vidare på. Vill du sätta in VPN i ett större säkerhetsperspektiv, läs vår bevakning av cyberattacker mot Sverige.
Förkunskaper och systemkrav
Innan du börjar behöver du en handfull saker på plats. Tutorialen är skriven för Ubuntu 24.04 LTS, men kommandona fungerar nästan oförändrat på Debian 12 och nyare. Det viktiga är att kärnan är 5.6 eller senare, vilket alla aktuella distributioner uppfyller. Du behöver också root-åtkomst eller en användare med sudo-rättigheter.
| Komponent | Version / krav | Kommentar |
|---|---|---|
| Server-OS | Ubuntu 24.04 LTS | Debian 12+ fungerar likadant |
| Linux-kärna | 5.6 eller senare | WireGuard ligger i mainline-kärnan |
| Paket | wireguard-tools | Ger kommandona wg och wg-quick |
| Publik IP | Statisk eller DDNS | VPS, hemserver med portöppning eller dynamisk DNS |
| Öppen port | UDP 51820 | Standardport, går att byta |
| Åtkomst | sudo eller root | Krävs för kärnkonfiguration |
| Klient | iOS, Android, Windows, macOS, Linux | Officiella appar finns |
En billig VPS hos valfri molnleverantör räcker gott. Du kan också köra servern på en Raspberry Pi eller en gammal dator hemma, men då måste du öppna UDP-port 51820 i din router och helst sätta upp dynamisk DNS eftersom hemmaabonnemang sällan har statisk IP. Har du redan läst vår guide om HTTPS och TLS känner du igen tänket: rätt port öppen, rätt nycklar på plats, och resten sköter protokollet.
Notera adresserna du ska använda. I exemplen nedan har servern den publika IP-adressen 203.0.113.10 och tunnelnätet 10.8.0.0/24. Servern får tunneladressen 10.8.0.1 och den första klienten 10.8.0.2. Byt ut den publika adressen mot din egen, men du kan behålla tunnelnätet som det är så länge det inte krockar med ditt lokala nät.
Så fungerar WireGuard-kryptografin
Du behöver inte förstå matematiken för att sätta upp WireGuard, men en kort överblick gör felsökning lättare. WireGuard använder en fast uppsättning moderna primitiver i stället för att låta dig välja bland dussintals chiffer som OpenVPN gör. Det tar bort en hel klass av felkonfigurationer: det finns helt enkelt ingen svag inställning att råka välja.
- ChaCha20-Poly1305 för autentiserad kryptering av all trafik. Snabbt även på enheter utan hårdvaruacceleration för AES, vilket är vanligt på mobiler.
- Curve25519 för nyckelutbyte. Varje peer har ett nyckelpar, och den publika nyckeln fungerar som identitet.
- BLAKE2s för hashning och nyckelhärledning. Snabb och utan kända svagheter.
Identiteten i WireGuard är publika nyckeln, inte ett användarnamn eller lösenord. Servern accepterar bara trafik från peers vars publika nyckel den känner till, och varje paket är kryptografiskt knutet till rätt avsändare. Det här liknar logiken bakom digitala signaturer, där en publik nyckel verifierar att data kommer från rätt källa. Vill du fördjupa dig i hashfunktionerna som WireGuard bygger på, har vi en grundlig genomgång i vårt nav om kryptografi.
En viktig konsekvens av designen: WireGuard är tyst som standard. Servern svarar inte alls på paket som inte är korrekt autentiserade, vilket gör den svår att ens upptäcka för en portskanner. Det här är en medveten egenskap som minskar risken för att din server hamnar på listor över sårbara tjänster.
Steg-för-steg: bygg din WireGuard-server
Nu till själva bygget. Följ stegen i ordning. Varje steg innehåller exakt kommando, förväntad utdata och en kort förklaring. Kör allt som root eller med sudo framför kommandona.
Steg 1: Uppdatera servern och installera wireguard-tools
Börja med en uppdaterad server och installera verktygspaketet. Det ger dig kommandona wg och wg-quick. Själva protokollet finns redan i kärnan, så ingen extra modul behövs på ett aktuellt system.
sudo apt update && sudo apt upgrade -y
sudo apt install -y wireguard-tools
# Verifiera att verktygen finns
wg --version
wg-quick --help | head -n 1
Förväntad utdata från wg --version är en rad som börjar med wireguard-tools v1.x. Får du “command not found” installerades paketet inte korrekt, kontrollera att apt install avslutades utan fel.
Steg 2: Generera serverns nyckelpar
WireGuard identifierar varje peer med ett nyckelpar. Vi genererar serverns privata och publika nyckel och låser ner rättigheterna så att bara root kan läsa den privata nyckeln. Gör detta i katalogen /etc/wireguard.
cd /etc/wireguard
umask 077
# Generera privat nyckel och härled publik nyckel
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Titta på nycklarna
cat server_private.key
cat server_public.key
Varje nyckel är en rad med base64-tecken, ungefär iJ8z...c=. Den privata nyckeln är hemlig och ska aldrig lämna servern. Den publika nyckeln delar du senare med dina klienter. Kommandot umask 077 ser till att de nyskapade filerna bara går att läsa av ägaren.
Steg 3: Aktivera IP-forwarding i kärnan
För att servern ska kunna skicka vidare klienternas trafik ut på internet måste IP-forwarding vara påslaget. Detta är den vanligaste orsaken till att en tunnel ansluter men inte ger internet. Vi sätter det permanent via sysctl.
# Aktivera direkt
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
# Gör det permanent
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
Utdata bekräftar de satta värdena: net.ipv4.ip_forward = 1. Glömmer du det här steget kommer klienten att få en tunnel som ser ut att fungera, men ingen webbsida laddar. Kom ihåg raden, vi återkommer till den i felsökningsdelen.
Steg 4: Skapa serverkonfigurationen wg0.conf
Nu skapar vi själva konfigurationsfilen. WireGuard använder ett enkelt INI-liknande format med en [Interface]-sektion för servern och en [Peer]-sektion per klient. Skapa filen /etc/wireguard/wg0.conf.
[Interface]
# Serverns tunneladress
Address = 10.8.0.1/24
# UDP-porten WireGuard lyssnar på
ListenPort = 51820
# Klistra in innehållet fran server_private.key
PrivateKey = SERVERNS_PRIVATA_NYCKEL
# Peers (klienter) laggs till nedan i steg 9
Byt ut SERVERNS_PRIVATA_NYCKEL mot raden från server_private.key. Spara filen. Lägg märke till att vi ännu inte har lagt till någon klient, det gör vi när vi har genererat klientnycklarna. Adressen 10.8.0.1/24 ger servern den första adressen i tunnelnätet och definierar nätets storlek.
Steg 5: Konfigurera NAT med masquerade
För att klienternas privata tunneladresser ska kunna nå internet via serverns publika IP behöver vi NAT-masquerading. Det enklaste och mest robusta sättet är att lägga in regler som körs automatiskt när tunneln startar. Lägg till raderna PostUp och PostDown i [Interface]-sektionen.
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVERNS_PRIVATA_NYCKEL
# Sla pa NAT nar tunneln startar, ta bort nar den stoppas
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Viktigt: byt ut eth0 mot namnet på serverns publika nätverkskort. Kör ip route show default och titta efter ordet dev, namnet som följer (ofta eth0, ens3 eller enp1s0) är ditt interface. Använder du nftables i stället för iptables fungerar samma logik, men de flesta Ubuntu-installationer har iptables-kompatibilitet på plats som standard.
Steg 6: Öppna UDP-porten i brandväggen
WireGuard lyssnar på UDP-port 51820. Är brandväggen aktiv måste du släppa in den porten, annars når inga klientpaket fram. På Ubuntu med UFW gör du så här.
# Tillat WireGuard-porten (UDP)
sudo ufw allow 51820/udp
# Tillat aven SSH sa du inte laser ute dig sjalv
sudo ufw allow 22/tcp
# Aktivera och kontrollera
sudo ufw enable
sudo ufw status verbose
I statusutdata ska du se en rad 51820/udp ALLOW Anywhere. Kör du servern hemma bakom en router måste du dessutom vidarebefordra UDP-port 51820 till serverns lokala IP i routerns inställningar. Det här steget och IP-forwarding är de två vanligaste snubbeltrådarna, så dubbelkolla båda.
Steg 7: Starta tunneln och aktivera vid omstart
Med konfigurationen på plats startar vi gränssnittet. Verktyget wg-quick läser wg0.conf, sätter upp interfacet och kör dina PostUp-regler i ett enda kommando.
# Starta tunneln manuellt
sudo wg-quick up wg0
# Starta automatiskt vid varje omstart (systemd)
sudo systemctl enable wg-quick@wg0
# Kontrollera status
sudo systemctl status wg-quick@wg0 --no-pager
Förväntad utdata från wg-quick up wg0 är några rader som börjar med [#] och visar att interfacet, adressen och iptables-reglerna sattes upp. Får du ett felmeddelande om att nyckeln är ogiltig, kontrollera att du klistrade in hela raden från server_private.key utan extra blanksteg. För att stänga tunneln igen använder du sudo wg-quick down wg0.
Steg 8: Generera klientnycklar
Varje klient (mobil, laptop) behöver ett eget nyckelpar. Generera dem på servern för enkelhetens skull, eller direkt på klienten om du föredrar att den privata nyckeln aldrig lämnar enheten. Vi gör en första klient som vi kallar telefon.
cd /etc/wireguard
umask 077
# Klientens nyckelpar
wg genkey | tee telefon_private.key | wg pubkey > telefon_public.key
# Valfritt men rekommenderat: en delad pre-shared key for extra skydd
wg genpsk > telefon_preshared.key
cat telefon_public.key
Den valfria pre-shared key (PSK) läggs ovanpå den vanliga krypteringen och ger ett extra symmetriskt lager. Det är ett billigt sätt att höja ribban mot framtida kvantdatorer. Vill du läsa mer om hur lager av skydd hänger ihop, har vi täckt ämnet i vår genomgång av säkerhet online.
Steg 9: Lägg till klienten som peer på servern
Nu kopplar vi ihop klienten med servern. Öppna /etc/wireguard/wg0.conf igen och lägg till en [Peer]-sektion längst ner. Klientens publika nyckel identifierar den, och AllowedIPs bestämmer vilken tunneladress den får.
[Peer]
# Telefonens publika nyckel (fran telefon_public.key)
PublicKey = TELEFONENS_PUBLIKA_NYCKEL
# Det extra PSK-lagret (fran telefon_preshared.key)
PresharedKey = TELEFONENS_PRESHARED_NYCKEL
# Vilken tunneladress denna klient tilldelas
AllowedIPs = 10.8.0.2/32
På serversidan är AllowedIPs = 10.8.0.2/32 en routningsregel: bara den exakta adressen 10.8.0.2 hör till den här klienten. Lägger du till fler klienter ger du dem 10.8.0.3/32, 10.8.0.4/32 och så vidare. Ladda om konfigurationen utan att bryta befintliga anslutningar med kommandot nedan.
# Ladda om konfigurationen utan avbrott
sudo wg syncconf wg0 <(wg-quick strip wg0)
Steg 10: Skapa klientkonfigurationen
Klienten behöver en egen konfigurationsfil. Den speglar serverns, men med klientens privata nyckel och serverns publika nyckel. Här bestämmer AllowedIPs i stället vad som ska skickas genom tunneln. Värdet 0.0.0.0/0 betyder all trafik, alltså en full VPN.
[Interface]
# Telefonens privata nyckel
PrivateKey = TELEFONENS_PRIVATA_NYCKEL
# Klientens tunneladress
Address = 10.8.0.2/24
# DNS som klienten ska anvanda i tunneln
DNS = 1.1.1.1
[Peer]
# Serverns publika nyckel (fran server_public.key)
PublicKey = SERVERNS_PUBLIKA_NYCKEL
PresharedKey = TELEFONENS_PRESHARED_NYCKEL
# Serverns publika adress och port
Endpoint = 203.0.113.10:51820
# Skicka all trafik genom tunneln
AllowedIPs = 0.0.0.0/0
# Hall NAT-mappningen vid liv bakom router
PersistentKeepalive = 25
Raden PersistentKeepalive = 25 är viktig för mobiler bakom NAT. Den skickar ett litet paket var 25:e sekund så att routern håller porten öppen och tunneln inte dör i tysthet. Sätter du klienten bakom en strikt NAT och hoppar över den här raden får du sporadiska avbrott som är svåra att felsöka.
Steg 11: Anslut mobilen med QR-kod
För mobila klienter är det smidigast att generera en QR-kod av konfigurationen och skanna den i den officiella WireGuard-appen för iOS eller Android. Installera ett litet verktyg och låt det rita upp koden i terminalen.
# Installera QR-generatorn
sudo apt install -y qrencode
# Rita upp klientkonfigurationen som QR-kod
qrencode -t ansiutf8 < telefon.conf
Öppna WireGuard-appen på telefonen, välj “Lägg till tunnel”, sedan “Skanna QR-kod”, och rikta kameran mot terminalen. Tunneln dyker upp direkt. För en bärbar dator kopierar du i stället telefon.conf (döp gärna om den till laptop.conf med ett eget nyckelpar) till klienten och importerar den i skrivbordsappen. De officiella apparna finns för iOS, Android, Windows, macOS och Linux.
Steg 12: Verifiera tunneln
Sista steget: bekräfta att allt fungerar. Slå på tunneln i klientappen och kör statuskommandot på servern. Du ska se klienten med en färsk handskakning och räknare som tickar uppåt.
# Visa tunnelstatus pa servern
sudo wg show
# Exempelutdata:
# interface: wg0
# public key: aBcD...=
# listening port: 51820
# peer: TELEFONENS_PUBLIKA_NYCKEL
# preshared key: (hidden)
# endpoint: 198.51.100.42:49321
# allowed ips: 10.8.0.2/32
# latest handshake: 8 seconds ago
# transfer: 1.21 MiB received, 3.48 MiB sent
Ser du raden latest handshake med ett färskt värde är tunneln uppe. Testa sedan från klienten: besök en sida som visar din IP-adress, till exempel ifconfig.me, och bekräfta att den visar serverns publika IP och inte ditt vanliga internet. Saknas handskakningen helt, gå direkt till felsökningstabellen längre ner.
Komplett fungerande projekt: server och klient
Här är hela projektet samlat, så att du ser hur delarna hänger ihop. Först den färdiga serverfilen /etc/wireguard/wg0.conf med en klient inlagd, sedan klientfilen. Klistra in dina egna nycklar och din publika IP på de markerade platserna.
# /etc/wireguard/wg0.conf (SERVER)
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVERNS_PRIVATA_NYCKEL
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Klient: telefon
PublicKey = TELEFONENS_PUBLIKA_NYCKEL
PresharedKey = TELEFONENS_PRESHARED_NYCKEL
AllowedIPs = 10.8.0.2/32
# telefon.conf (KLIENT)
[Interface]
PrivateKey = TELEFONENS_PRIVATA_NYCKEL
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = SERVERNS_PUBLIKA_NYCKEL
PresharedKey = TELEFONENS_PRESHARED_NYCKEL
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Lägg märke till symmetrin. Serverns PublicKey i klientfilen matchar serverns privata nyckel, och klientens PublicKey i serverfilen matchar klientens privata nyckel. PSK-raden är identisk i båda. Den enda regeln att minnas är att privata nycklar stannar lokalt och publika nycklar utbyts. Får du detta rätt fungerar tunneln, punkt.
7 vanliga fallgropar och hur du undviker dem
De flesta misslyckade WireGuard-installationer beror på en liten handfull misstag. Gå igenom listan innan du börjar felsöka på djupet, sannolikt sitter ditt problem här.
- IP-forwarding glömt. Tunneln ansluter men ingen sida laddar. Kör
sysctl net.ipv4.ip_forwardoch kontrollera att svaret är1. Detta är det allra vanligaste felet. - Fel nätverkskort i NAT-regeln. Står det
eth0i PostUp men ditt kort heterens3får klienten tunnel utan internet. Kontrollera medip route show default. - UDP-porten blockerad. WireGuard använder UDP, inte TCP. En brandväggsregel för TCP 51820 hjälper inte. Öppna
51820/udpbåde i UFW och i routern om servern står hemma. - PersistentKeepalive saknas på mobil. Tunneln fungerar några sekunder och dör sedan. Lägg till
PersistentKeepalive = 25i klientens peer-sektion. - AllowedIPs förväxlat. På servern listar du klientens adress (
/32), på klienten listar du vad som ska skickas genom tunneln (0.0.0.0/0). Förväxlar du dem routas trafiken fel. - DNS-läckor. Utan
DNS-raden i klienten kan uppslag gå utanför tunneln och avslöja vilka sidor du besöker. Sätt en DNS du litar på. - MTU-problem. Vissa nät kräver lägre MTU. Laddar små sidor men inte stora, lägg till
MTU = 1420under[Interface]i klienten.
En felkonfigurerad VPN kan ge en falsk känsla av säkerhet, precis som ett svagt lösenord. Vill du förstå hur läckande metadata kan utnyttjas, läs vår genomgång av hur dataintrång sker. En tät tunnel är bara en del av ett bredare försvar.
Felsökning: 8 vanliga problem och lösningar
När tunneln inte beter sig som väntat ger den här tabellen en snabb diagnos. Börja uppifrån, problemen är sorterade efter hur vanliga de är.
| Symptom | Trolig orsak | Lösning |
|---|---|---|
| Ansluter men ingen internetåtkomst | IP-forwarding avstängt | Sätt net.ipv4.ip_forward=1 via sysctl |
Ingen handskakning alls i wg show | UDP-port blockerad | Öppna 51820/udp i UFW och router |
| Tunnel dör efter några sekunder | NAT-timeout | Lägg till PersistentKeepalive = 25 |
| Internet via tunnel men inte hemnätets enheter | Fel AllowedIPs | Lägg till hemnätet i klientens AllowedIPs |
| Stora sidor laddar inte, små fungerar | MTU för hög | Sätt MTU = 1420 i klienten |
| “Key is not the correct length” | Trasig eller halv nyckel | Generera om nyckeln, klistra in hela raden |
| DNS fungerar inte i tunneln | DNS-rad saknas | Lägg till DNS = 1.1.1.1 i klienten |
| Tunnel försvinner efter omstart | Tjänsten ej aktiverad | systemctl enable wg-quick@wg0 |
Ett kraftfullt felsökningsknep är att läsa loggarna i realtid. Kör sudo journalctl -u wg-quick@wg0 -f medan du startar tunneln, så ser du exakt vilket kommando som fallerar. Vill du se trafiken på låg nivå hjälper sudo tcpdump -ni eth0 udp port 51820 dig att avgöra om paketen ens når servern. Ser du inkommande paket men ingen handskakning är det nästan alltid en nyckel- eller PSK-felmatchning.
Avancerade tips: split tunneling, kill switch och fler klienter
När grunden fungerar finns det flera sätt att skräddarsy din WireGuard-server. Här är de mest användbara justeringarna.
Split tunneling
Vill du bara skicka viss trafik genom tunneln, till exempel åtkomst till ett företagsnät medan resten går direkt, byter du klientens AllowedIPs från 0.0.0.0/0 till de specifika näten. Sätt exempelvis AllowedIPs = 10.8.0.0/24, 192.168.1.0/24 för att bara nå tunnelnätet och ett hemnät. All annan trafik går då utanför VPN, vilket sparar bandbredd och latens.
Kill switch på klienten
En kill switch hindrar trafik från att läcka utanför tunneln om VPN-anslutningen faller. På Linux-klienter lägger du till brandväggsregler i klientens egna PostUp och PostDown. Skrivbordsappen för Windows och macOS har en inbyggd inställning som heter “Block untunneled traffic” (kill switch) som du bara bockar i. Det här är ett enkelt men effektivt skydd mot oväntade läckor.
Skala till många klienter
Att lägga till en tionde eller hundrade klient skalar utmärkt eftersom WireGuard är så lätt. Ge varje peer ett unikt nyckelpar och en egen /32-adress i tunnelnätet. För större uppsättningar är det värt att skripta nyckelgenereringen och konfigurationsutskriften. Ett litet bash-skript som tar emot ett klientnamn, genererar nycklar, lägger till en peer på servern och skriver ut en QR-kod sparar mycket tid. Eftersom wg syncconf laddar om utan avbrott kan du lägga till klienter mitt i drift.
WireGuard vs OpenVPN vs IPsec
WireGuard är inte det enda VPN-protokollet, men det vinner på de flesta punkter som spelar roll för en självhostad lösning. Tabellen sammanfattar skillnaderna mot de två etablerade alternativen.
| Egenskap | WireGuard | OpenVPN | IPsec/IKEv2 |
|---|---|---|---|
| Kodbas | Några tusen rader | Mycket stor | Mycket stor |
| Plats | I Linux-kärnan | Användarrymd | Kärna + användarrymd |
| Chiffer | Fast: ChaCha20-Poly1305 | Konfigurerbart | Konfigurerbart |
| Konfiguration | Mycket enkel | Komplex | Komplex |
| Anslutningstid | Nästan omedelbar | Långsammare | Medel |
| Nätbyten (mobil) | Sömlösa | Bryts ofta | Bra med MOBIKE |
| Transportprotokoll | UDP | UDP eller TCP | UDP |
Den fasta chifferuppsättningen är både en styrka och en begränsning. Du kan inte byta algoritm, men du kan heller inte råka välja en svag. För nästan alla användningsfall är det rätt avvägning. OpenVPN har fortfarande en fördel där du måste passera brandväggar som bara släpper igenom TCP 443, eftersom WireGuard alltid kör UDP. Behöver du den flexibiliteten kan WireGuard köras genom en TCP-omslagsteknik, men det ligger utanför den här guiden.
Säkerhet och prestanda i praktiken
WireGuards säkerhetsrykte vilar på två ben: den lilla kodbasen och de moderna primitiverna. En liten kodbas går att granska i sin helhet, vilket är praktiskt omöjligt med de stora alternativen. Det innebär inte att WireGuard är osårbart, men attackytan är dramatiskt mindre. Som med all programvara gäller att hålla servern uppdaterad, begränsa SSH-åtkomsten och inte exponera fler tjänster än nödvändigt.
Några konkreta säkerhetsråd för din nya server. Inaktivera lösenordsinloggning över SSH och använd enbart nycklar, precis som WireGuard självt bygger på nyckelpar. Den principen behandlar vi i vår guide om lösenordssäkerhet. Lägg till pre-shared keys för varje peer som ett extra lager. Och rotera nycklar om du misstänker att en klientenhet tappats bort, det räcker att ta bort dess peer-sektion och ladda om med wg syncconf.
Prestandamässigt är WireGuard svårslaget för en hemmaserver. Eftersom krypteringen sker i kärnan och chiffret ChaCha20 är optimerat även utan AES-hårdvara, blir overheaden låg. På en enkel VPS mättar tunneln i praktiken din uppkoppling snarare än processorn. Den största flaskhalsen blir nästan alltid serverns publika bandbredd, inte WireGuard självt. För de flesta hemmaanvändare räcker en billig VPS för att köra full hastighet till flera enheter samtidigt.
Tänk också på det juridiska. En egen VPN gör dig inte anonym, din serverleverantör ser fortfarande serverns trafik och din IP. Vill du både kryptera trafiken och dölja vem du är behövs en annan modell. Var också uppmärksam på nätfiske, eftersom en säker tunnel inte skyddar mot att du själv luras att lämna ut uppgifter. WireGuard löser konfidentialitet och åtkomst, inte anonymitet eller social manipulation.
Automatisera nya klienter med ett bash-skript
När du väl lagt till två eller tre klienter för hand inser du snabbt att stegen är identiska varje gång: generera nyckelpar, generera PSK, lägg till en peer på servern, skriv ut en klientkonfiguration och rita en QR-kod. Det är precis sådant som ett litet skript gör bättre och utan slarvfel. Här är ett komplett, fungerande skript du kan spara som /etc/wireguard/add-client.sh och köra med ett klientnamn som argument.
#!/usr/bin/env bash
# add-client.sh Lagger till en ny WireGuard-klient
# Anvandning: sudo ./add-client.sh telefon 10.8.0.2
set -euo pipefail
NAME="$1" # klientnamn, t.ex. telefon
CLIENT_IP="$2" # tunneladress, t.ex. 10.8.0.2
WG_DIR=/etc/wireguard
SERVER_PUB=$(cat "$WG_DIR/server_public.key")
ENDPOINT="203.0.113.10:51820" # byt till din publika IP
DNS="1.1.1.1"
cd "$WG_DIR"
umask 077
# 1. Nycklar
wg genkey | tee "${NAME}_private.key" | wg pubkey > "${NAME}_public.key"
wg genpsk > "${NAME}_preshared.key"
CLIENT_PRIV=$(cat "${NAME}_private.key")
CLIENT_PUB=$(cat "${NAME}_public.key")
PSK=$(cat "${NAME}_preshared.key")
# 2. Lagg till peer pa servern
cat >> wg0.conf <<EOF
[Peer]
# Klient: ${NAME}
PublicKey = ${CLIENT_PUB}
PresharedKey = ${PSK}
AllowedIPs = ${CLIENT_IP}/32
EOF
# 3. Skapa klientkonfiguration
cat > "${NAME}.conf" <<EOF
[Interface]
PrivateKey = ${CLIENT_PRIV}
Address = ${CLIENT_IP}/24
DNS = ${DNS}
[Peer]
PublicKey = ${SERVER_PUB}
PresharedKey = ${PSK}
Endpoint = ${ENDPOINT}
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
# 4. Ladda om utan avbrott och rita QR-kod
wg syncconf wg0 <(wg-quick strip wg0)
echo "Klient ${NAME} tillagd. Skanna QR-koden i appen:"
qrencode -t ansiutf8 < "${NAME}.conf"
Gör skriptet körbart med chmod +x /etc/wireguard/add-client.sh och kör det sedan med sudo /etc/wireguard/add-client.sh laptop 10.8.0.3. På några sekunder har du en ny klient inlagd, en färdig konfigurationsfil och en QR-kod att skanna. Skriptet är idempotent på nyckelnivå så länge du ger varje klient ett unikt namn och en unik adress. Vill du återanvända det för en hel familj eller ett litet team räcker det att hålla reda på vilka adresser som är upptagna i tunnelnätet.
En liten varning: skriptet skriver privata nycklar till disk i /etc/wireguard. Det är acceptabelt på en server bara root kommer åt, men om du delar servern eller tar säkerhetskopior bör du kryptera den katalogen eller flytta nyckelgenereringen till klienten. Principen är densamma som för all hemlighetshantering: minimera var den privata nyckeln finns och vem som kan läsa den.
Säkerhetskopiera, rotera och återkalla nycklar
En VPN är inte klar när tunneln går upp. Den behöver underhåll, precis som vilken säkerhetskritisk tjänst som helst. Tre rutiner är värda att etablera direkt: säkerhetskopiering, nyckelrotation och återkallande av borttappade enheter.
Säkerhetskopiera hela /etc/wireguard-katalogen till en krypterad plats. Den innehåller serverns privata nyckel och alla peer-definitioner, så en kopia räcker för att återställa servern efter en krasch. Kryptera kopian, eftersom den i klartext är lika känslig som själva servern. Ett enkelt sätt är att paketera och kryptera med ett verktyg du litar på och spara resultatet utanför servern.
Att återkalla en klient är enkelt och en av WireGuards styrkor. Tappar någon bort sin telefon tar du bara bort dess [Peer]-sektion ur wg0.conf och laddar om. Från den sekunden accepterar servern inga paket från den nyckeln längre. Det finns ingen central spärrlista att vänta på, åtkomsten upphör omedelbart.
# Ta bort en klients peer-sektion manuellt ur wg0.conf, sedan:
sudo wg syncconf wg0 <(wg-quick strip wg0)
# Bekrafta att klienten ar borta
sudo wg show wg0 peers
Rotera serverns nyckelpar med jämna mellanrum eller vid misstänkt intrång. Det kräver mer arbete, eftersom alla klienter måste få serverns nya publika nyckel i sin Endpoint-peer. Planera därför rotationen och meddela dina användare, eller automatisera utskicket av nya konfigurationer. För de flesta hemmaservrar räcker det att rotera vid byte av server eller om du misstänker att en privat nyckel läckt. Tänk på nyckelhantering som färskvara: ju färre kopior och ju kortare livslängd, desto mindre blir konsekvensen om något går fel.
Vanliga frågor om WireGuard
Är WireGuard säkert att använda?
Ja. WireGuard använder moderna, väl granskade primitiver (ChaCha20-Poly1305, Curve25519, BLAKE2s) och har en liten kodbas som är lätt att granska. Det ligger i mainline Linux-kärnan sedan version 5.6 och används som grund i många kommersiella VPN-tjänster. Säkerheten beror dock även på hur du konfigurerar och underhåller servern.
Vilken port använder WireGuard?
Standardporten är UDP 51820. Du kan byta till valfri UDP-port genom att ändra ListenPort i serverns wg0.conf och Endpoint i klientens konfiguration. WireGuard använder alltid UDP, aldrig TCP.
Behöver jag en statisk IP-adress?
Det underlättar men är inget krav. Kör du servern på en VPS får du oftast en statisk publik IP. Hemma kan du använda dynamisk DNS (DDNS) och ange ett domännamn i klientens Endpoint i stället för en IP-adress, så hittar klienten servern även när din IP byts.
Kan jag använda WireGuard på mobilen?
Ja. Det finns officiella WireGuard-appar för både iOS och Android. Det enklaste sättet att lägga till en tunnel är att skanna en QR-kod av klientkonfigurationen, vilket vi visar i steg 11. Kom ihåg PersistentKeepalive för stabil anslutning bakom mobilnät.
Varför ansluter tunneln men ger ingen internetåtkomst?
I nästan alla fall beror det på att IP-forwarding är avstängt eller att NAT-regeln pekar på fel nätverkskort. Kontrollera att net.ipv4.ip_forward är 1 och att eth0 i din PostUp-regel matchar serverns riktiga interface (kolla med ip route show default).
Hur många klienter klarar en WireGuard-server?
Många. Eftersom protokollet är så lätt begränsas du i praktiken av serverns bandbredd och inte av antalet peers. Ge varje klient ett eget nyckelpar och en unik /32-adress i tunnelnätet. Du kan lägga till klienter under drift med wg syncconf utan att bryta befintliga anslutningar.
Är WireGuard snabbare än OpenVPN?
I de allra flesta fall, ja. WireGuard kör i kärnan och använder ett chiffer som är effektivt även utan AES-hårdvara, vilket ger lägre overhead och snabbare anslutningstid. Den exakta skillnaden beror på hårdvara och nät, men på en typisk hemmaserver blir bandbredden snarare flaskhalsen än protokollet.
Vad är en pre-shared key och behöver jag den?
En pre-shared key (PSK) är en extra symmetrisk nyckel som läggs ovanpå den vanliga krypteringen. Den är valfri men rekommenderas, eftersom den höjer ribban mot framtida kvantdatorattacker. Generera den med wg genpsk och lägg in samma värde i både serverns peer-sektion och klientens.
Relaterad läsning
- HTTPS och TLS: hänglåset, certifikat och vad de skyddar
- Lösenordssäkerhet: längd, hashning och lösenordshanterare
- Dataintrång: hur de sker och hur du skyddar dig
- Cyberattacker mot Sverige: 3 215 i veckan
- Nätfiske: hur bedrägeriförsök fungerar och hur du känner igen dem
- Säkerhet online: dataintrång, lösenord, HTTPS och nätfiske
- Kryptografi: hashfunktioner, SHA och digitalt förtroende
Externa källor
- WireGuard officiella webbplats
- WireGuard Quick Start
- WireGuard Protocol och kryptografi
- wireguard-tools källkod
- Ubuntu Server-dokumentation
Publicerad 12 juni 2026. Kommandona är testade mot Ubuntu 24.04 LTS. Byt ut exempeladresserna och nycklarna mot dina egna värden innan du driftsätter.



