En VPN du selv hoster, giver dig en krypteret tunnel mellem din telefon, din bærbare og en server du selv kontrollerer. Ingen tredjepart logger din trafik, og du betaler ikke et månedligt abonnement. WireGuard har gjort den slags opsætning enkel nok til at klares på cirka 20 minutter. Protokollen er en del af Linux-kernen siden version 5.6, bruger moderne kryptografi og fylder kun omkring 4.000 linjer kode, langt mindre end OpenVPN og IPsec.

Denne guide tager dig gennem 12 konkrete trin: fra en frisk Ubuntu- eller Debian-server til en fungerende WireGuard VPN med både desktop- og mobilklienter, NAT, DNS og automatisk start ved boot. Hver kommando kan kopieres direkte. Til sidst finder du et komplet opsætningsscript, en tabel over alle konfigurationsnøgler og en fejlfindingssektion med de problemer folk oftest løber ind i.

Hvad er WireGuard, og hvorfor hoste din egen VPN i 2026

WireGuard er en moderne VPN-protokol, der flytter IP-pakker gennem en krypteret tunnel på Layer 3. Den blev skabt af Jason Donenfeld og blev flettet ind i mainline Linux-kernen i 2020 med kerneversion 5.6. Det betyder, at protokollen kører i kernen på langt de fleste moderne Linux-servere uden ekstra moduler. Resultatet er lavere latenstid og højere gennemløb end brugerland-VPN’er som OpenVPN.

Den lille kodebase er ikke kun en teknisk kuriositet. Færre linjer kode betyder færre fejl og en angrebsflade, som en enkelt person realistisk kan revidere. OpenVPN og de klassiske IPsec-stakke tæller titusindvis af linjer. WireGuard nøjes med cirka 4.000, og det er en stor del af grunden til, at protokollen vandt frem så hurtigt.

Hvorfor selv-hoste i stedet for at købe et VPN-abonnement? Tre grunde dominerer. For det første kontrol: din trafik forlader serveren under din egen IP, og ingen kommerciel udbyder sidder mellem dig og internettet. For det andet pris: en billig virtuel server koster typisk 25 til 50 kroner om måneden og kan betjene hele husstanden. For det tredje læring: når du selv sætter tunnelen op, forstår du præcis, hvad der krypteres, hvor det dirigeres hen, og hvilke porte der er åbne. Det er den samme tankegang, der ligger bag HTTPS og TLS, hvor du flytter tillid fra en udbyder til verificerbar kryptografi.

En selv-hostet WireGuard VPN erstatter ikke en no-log-udbyder, hvis dit mål er at skjule, at du overhovedet bruger en VPN, for din serverudbyder kender din identitet. Men til at sikre din trafik på et offentligt WiFi, nå hjemmenetværket på afstand eller samle flere maskiner i ét privat net er den svær at slå.

Sådan fungerer WireGuard: kryptografi og arkitektur

WireGuard adskiller sig fra ældre VPN’er ved ikke at lade brugeren vælge cipher-suiter. Der er ét fast sæt primitiver, valgt af protokollens designere. Det fjerner hele klassen af fejl, hvor en administrator ved et uheld aktiverer en svag algoritme. Hver peer identificeres udelukkende af sin offentlige nøgle, præcis som med SSH-nøgler, og der er ingen certifikater eller centrale myndigheder involveret.

FunktionAlgoritmeRolle i tunnelen
NøgleudvekslingCurve25519Etablerer delt hemmelighed mellem to peers
Symmetrisk krypteringChaCha20Krypterer selve pakkernes indhold
AutentificeringPoly1305Sikrer at pakker ikke er ændret undervejs
HashingBLAKE2sBruges i håndtrykket og nøgleafledning
HashtabelbeskyttelseSipHash24Beskytter interne datastrukturer mod DoS

Kombinationen ChaCha20-Poly1305 er en autentificeret kryptering (AEAD), som både skjuler og beskytter pakker i én operation. Curve25519 håndterer Diffie-Hellman-nøgleudveksling med kurver, der er kendt for at være hurtige og modstandsdygtige over for implementeringsfejl. Hvis du vil forstå, hvorfor valg af hashfunktion betyder noget, så dækker vores artikel om hashfunktioner egenskaberne i detaljer.

Arkitektonisk er WireGuard tavs. Serveren svarer ikke på pakker fra ukendte nøgler, så en port-scanner kan ikke umiddelbart se, at der kører en VPN. Hver peer har en liste af AllowedIPs, der både fungerer som adgangskontrol og som routingtabel. På serveren betyder en peers AllowedIPs, hvilke tunnel-IP’er der hører til netop den klient. På klienten betyder den, hvilken trafik der skal sendes ind i tunnelen. Den dobbelte rolle forvirrer mange begyndere, så hold den for øje gennem hele opsætningen.

Forudsætninger og versioner

Inden du går i gang, skal følgende være på plads. Versionerne herunder er testet i 2026, men WireGuard er stabilt, så lidt ældre eller nyere versioner virker fint.

  • En virtuel server (VPS) med en offentlig IPv4-adresse. Ubuntu 24.04 LTS eller Debian 12 anbefales. Begge har en kerne nyere end 5.6, så WireGuard er indbygget.
  • Root-adgang eller en bruger med sudo. Alle kommandoer herunder forudsætter, at du kan køre sudo.
  • SSH-adgang til serveren. Hvis du endnu ikke har hærdet SSH, så gør det først, og brug gerne kodeordsråd fra kodeordssikkerhed.
  • WireGuard-tools. Kommandoerne wg og wg-quick følger med pakken wireguard på Ubuntu og Debian.
  • En klient. Den officielle WireGuard-app til Android, iOS, Windows og macOS, eller pakken wireguard på en Linux-klient.
  • Adgang til serverens firewall. Du skal kunne åbne UDP-port 51820 (standardporten), både i serverens eget firewall og i udbyderens eventuelle netværksfilter.

Du kan tjekke din kerneversion med uname -r. Får du et tal på 5.6 eller højere, er du klar. Næsten alle servere udlejet i 2025 og 2026 kører kerner langt over dette, typisk 6.x.

Trin 1: Opdater serveren og installer WireGuard

Start med at opdatere pakkelisterne og installere WireGuard. På Ubuntu og Debian trækker pakken wireguard de nødvendige værktøjer med, inklusive wg og wg-quick.

sudo apt update
sudo apt install -y wireguard qrencode

# Bekraeft installationen
wg --version

Pakken qrencode tager vi med nu, fordi vi senere bruger den til at vise mobilklientens konfiguration som en QR-kode. Outputtet fra wg --version ser typisk sådan ud:

wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/

Ser du en version, er kerneunderstøttelsen til stede, og du kan fortsætte. Hvis kommandoen ikke findes, kører du sandsynligvis en meget gammel distribution. Opgrader til Ubuntu 24.04 LTS eller Debian 12 frem for at kæmpe med backports.

Trin 2: Aktivér IP-forwarding på serveren

For at serveren kan videresende klienternes trafik ud på internettet, skal IP-forwarding være slået til. Som standard er det deaktiveret af sikkerhedsgrunde. Vi aktiverer det permanent via en fil i /etc/sysctl.d/.

# Opret en dedikeret sysctl-fil
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

# Indlaes aendringerne uden reboot
sudo sysctl --system

# Bekraeft at vaerdien nu er 1
sysctl net.ipv4.ip_forward

Den sidste kommando skal returnere net.ipv4.ip_forward = 1. Glemmer du dette trin, vil klienter kunne oprette håndtryk med serveren og pinge tunnel-IP’en, men de får ikke adgang til internettet. Det er en af de mest almindelige fejl, og vi vender tilbage til den i fejlfindingsafsnittet.

Trin 3: Generér serverens nøglepar

Hver peer i et WireGuard-netværk har et nøglepar: en privat nøgle, der aldrig forlader maskinen, og en offentlig nøgle, der deles med modparten. Vi genererer serverens par i /etc/wireguard og strammer rettighederne, så kun root kan læse den private nøgle.

# Skift til konfigurationsmappen og saet en stram umask
cd /etc/wireguard
umask 077

# Generer privat og offentlig noegle i en arbejdsgang
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key

# Se den offentlige noegle (den private skal forblive hemmelig)
sudo cat server_public.key

Kommandoen wg genkey producerer en tilfældig privat nøgle, og wg pubkey afleder den matchende offentlige nøgle. umask 077 sikrer, at filerne kun kan læses af ejeren. Noter den offentlige nøgle, for du skal indsætte den i hver klients konfiguration. Den private nøgle skal du behandle som en adgangskode: den må aldrig deles eller commites til et repository.

Princippet med offentlige og private nøgler er det samme, som driver digitale signaturer. Den offentlige nøgle kan deles frit, mens den private bevarer hemmeligheden, der gør hele systemet sikkert.

Trin 4: Opret serverkonfigurationen wg0.conf

Nu samler vi det hele i konfigurationsfilen /etc/wireguard/wg0.conf. Navnet wg0 bliver navnet på netværksgrænsefladen. Vi vælger et privat subnet til tunnelen, her 10.8.0.0/24, hvor serveren får 10.8.0.1.

sudo nano /etc/wireguard/wg0.conf

Indsæt følgende, og udskift SERVERENS_PRIVATE_NOEGLE med indholdet af server_private.key. Tilpas eth0 til navnet på serverens offentlige grænseflade (find det med ip route get 1.1.1.1).

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVERENS_PRIVATE_NOEGLE

# NAT og forwarding aktiveres naar tunnelen kommer op
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Klienter tilfoejes som [Peer]-blokke laengere nede

Linjerne PostUp og PostDown kører automatisk, når tunnelen henholdsvis startes og stoppes. De tilføjer og fjerner NAT-reglerne, så vi ikke skal vedligeholde firewall-regler manuelt. Tabellen herunder forklarer de vigtigste nøgler i konfigurationen.

NøgleSektionBetydning
Address[Interface]Tunnel-IP for denne maskine
ListenPort[Interface]UDP-port serveren lytter på (standard 51820)
PrivateKey[Interface]Maskinens egen private nøgle
DNS[Interface]DNS-server klienten bruger i tunnelen
PublicKey[Peer]Modpartens offentlige nøgle
AllowedIPs[Peer]Hvilke IP’er der hører til/dirigeres til denne peer
Endpoint[Peer]Modpartens offentlige adresse og port
PersistentKeepalive[Peer]Sekunder mellem keepalive-pakker (typisk 25)

Trin 5: NAT og firewall

NAT-reglerne i PostUp sørger for masquerading, så pakker fra tunnel-subnettet 10.8.0.0/24 får serverens offentlige IP som afsender. Uden masquerading ville svarpakker aldrig finde tilbage til klienten. Vi skal også åbne selve VPN-porten i firewallen. Bruger du UFW, ser det sådan ud.

# Tillad WireGuard-porten ind
sudo ufw allow 51820/udp

# Sikr at SSH stadig er aabent, saa du ikke laaser dig selv ude
sudo ufw allow OpenSSH

# Aktiver firewallen hvis den ikke koerer
sudo ufw enable
sudo ufw status verbose

Foretrækker du nftables frem for iptables, kan du erstatte masquerade-reglerne med en tilsvarende NAT-regel i nftables. På de fleste moderne systemer oversætter iptables alligevel til nftables bagved, så kommandoerne ovenfor virker. Det vigtige er, at både serverens lokale firewall og din udbyders eventuelle netværksfilter slipper UDP 51820 igennem. Mange fejlsøgningssessioner ender med, at porten var blokeret hos hosting-udbyderen, ikke på serveren selv.

Trin 6: Start tunnelen og aktivér ved boot

Med konfigurationen på plads kan vi bringe grænsefladen op. Værktøjet wg-quick læser /etc/wireguard/wg0.conf, opretter grænsefladen, sætter IP-adressen og kører PostUp-reglerne i ét hug.

# Bring tunnelen op manuelt foerste gang
sudo wg-quick up wg0

# Faa den til at starte automatisk ved hver opstart
sudo systemctl enable wg-quick@wg0

# Bekraeft at tjenesten koerer
sudo systemctl status wg-quick@wg0 --no-pager

Instansnavnet @wg0 skal matche filnavnet wg0.conf. Vil du senere stoppe tunnelen, bruger du sudo wg-quick down wg0. Et vellykket up giver et output, der bekræfter, at grænsefladen og reglerne blev oprettet:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Serveren er nu klar og lytter på UDP 51820. Næste skridt er at oprette den første klient og give den adgang.

Trin 7: Opret den første klient som peer

En klient har sit eget nøglepar, ligesom serveren. Generér det enten på selve klienten eller på serveren, hvis det er lettere at administrere centralt. Her genererer vi på serveren for overskuelighedens skyld.

cd /etc/wireguard
umask 077

# Generer noeglepar til foerste klient (telefon)
wg genkey | sudo tee phone_private.key | wg pubkey | sudo tee phone_public.key

Tilføj nu klienten som en [Peer]-blok i serverens wg0.conf. Klienten får tunnel-IP’en 10.8.0.2. Bemærk, at AllowedIPs her er /32, fordi det på serversiden kun betyder “denne ene IP tilhører denne klient”.

# Tilfoej til bunden af /etc/wireguard/wg0.conf

[Peer]
# Telefon
PublicKey = INDHOLD_AF_phone_public.key
AllowedIPs = 10.8.0.2/32

Genindlæs konfigurationen uden at afbryde eksisterende forbindelser med en syntaks, der kombinerer wg og wg-quick:

sudo wg syncconf wg0 <(wg-quick strip wg0)

Selve klientkonfigurationen, som telefonen skal bruge, ser sådan ud. Udskift pladsholderne, og brug serverens offentlige IP i Endpoint. AllowedIPs = 0.0.0.0/0 dirigerer al klientens trafik gennem tunnelen, en fuld VPN.

[Interface]
PrivateKey = INDHOLD_AF_phone_private.key
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = SERVERENS_OFFENTLIGE_NOEGLE
Endpoint = DIN_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

PersistentKeepalive = 25 sender en lille pakke hvert 25. sekund, så NAT-mappingen mellem klient og server holdes åben. Det er vigtigt for mobile klienter og maskiner bag NAT, ellers falder forbindelsen efter et stykke inaktivitet.

Trin 8: Mobilklient med QR-kode

I stedet for at taste den lange klientkonfiguration ind på telefonen kan du vise den som en QR-kode i terminalen. Gem klientkonfigurationen fra forrige trin som phone.conf, og kør qrencode.

# Vis konfigurationen som QR-kode direkte i terminalen
qrencode -t ansiutf8 < phone.conf

# Eller gem den som et PNG-billede til senere
qrencode -o phone.png < phone.conf

Åbn den officielle WireGuard-app på Android eller iOS, vælg "Tilføj tunnel" og derefter "Scan fra QR-kode", og ret kameraet mod terminalen. Profilen importeres på sekunder, og du kan slå tunnelen til. Outputtet i terminalen er et blokmønster i sort og hvidt, som app-kameraet læser direkte.

Husk at slette phone.png bagefter, hvis du gemte den som fil. Billedet indeholder klientens private nøgle i klartekst og bør behandles lige så fortroligt som en adgangskode.

Trin 9: DNS, kill switch og split tunneling

Linjen DNS = 1.1.1.1 i klientkonfigurationen bestemmer, hvilken resolver klienten bruger, mens tunnelen er aktiv. Det forhindrer DNS-lækager, hvor opslag ellers ville gå uden om VPN'en og afsløre, hvilke domæner du besøger. Vil du have endnu mere privatliv, kan du pege på en resolver, der understøtter DNS over HTTPS.

WireGuard-appen indeholder en indbygget kill switch. Aktiverer du "Block untrusted networks", afvises al trafik, hvis tunnelen falder, så intet siver ud udenom. På desktop opnår du samme effekt med firewall-regler, der kun tillader trafik gennem wg0.

Split tunneling i praksis

Vil du kun sende noget trafik gennem VPN'en, for eksempel trafik til dit hjemmenetværk, men lade resten gå direkte, justerer du AllowedIPs på klienten. I stedet for 0.0.0.0/0 angiver du de specifikke subnet, der skal i tunnelen.

# Kun trafik til hjemmenettet og tunnelen gaar gennem VPN
AllowedIPs = 10.8.0.0/24, 192.168.1.0/24

Det er nyttigt på en mobil, hvor du vil nå hjemmeserveren uden at dirigere streaming og opdateringer gennem din egen VPS. Split tunneling sparer båndbredde og holder din IP uændret for almindelig surf.

Trin 10: Verificér forbindelsen

Kommandoen wg show er dit primære diagnoseværktøj. Den viser peers, seneste håndtryk og overførte bytes. Kør den på serveren, efter du har forbundet en klient.

sudo wg show

Et sundt output ser sådan ud. Linjen latest handshake og stigende transfer-tal bekræfter, at tunnelen fungerer:

interface: wg0
  public key: Hk7c...serverens offentlige noegle...=
  private key: (hidden)
  listening port: 51820

peer: 9bT2...telefonens offentlige noegle...=
  endpoint: 87.51.xx.xx:48213
  allowed ips: 10.8.0.2/32
  latest handshake: 18 seconds ago
  transfer: 1.42 MiB received, 9.81 MiB sent

Fra klienten kan du teste, at du faktisk når internettet gennem serveren, ved at slå op, hvilken offentlig IP du fremstår med. Den skal matche serverens IP, ikke dit lokale net.

# Skal returnere serverens offentlige IP, ikke din egen
curl https://api.ipify.org
echo
ping -c 3 10.8.0.1

Trin 11: Tilføj flere klienter

At tilføje en bærbar, en tablet eller et familiemedlems telefon følger nøjagtig samme mønster som telefonen. Generér et nyt nøglepar, giv klienten den næste ledige tunnel-IP, og tilføj en [Peer]-blok. Hver klient skal have en unik AllowedIPs på serversiden, ellers kolliderer routingen.

# Noeglepar til baerbar
wg genkey | sudo tee laptop_private.key | wg pubkey | sudo tee laptop_public.key

# Tilfoej som peer med naeste IP, 10.8.0.3
sudo tee -a /etc/wireguard/wg0.conf > /dev/null <<'EOF'

[Peer]
# Baerbar
PublicKey = INDHOLD_AF_laptop_public.key
AllowedIPs = 10.8.0.3/32
EOF

# Genindlaes uden at afbryde de andre
sudo wg syncconf wg0 <(wg-quick strip wg0)

En praktisk regel er at føre en simpel liste over, hvilken IP der hører til hvilken enhed, for eksempel 10.8.0.2 telefon, 10.8.0.3 baerbar. Med et /24-subnet har du plads til 253 klienter, rigeligt til en husstand eller et lille team.

Trin 12: Komplet projekt, scriptet fra A til Z

Her er hele opsætningen samlet i ét script til en frisk Ubuntu- eller Debian-server. Det installerer WireGuard, genererer servernøgler, skriver konfigurationen, aktiverer forwarding og starter tunnelen. Læs det igennem, tilpas WAN_IF og din serveradresse, og kør det med sudo bash setup-wg.sh.

#!/usr/bin/env bash
set -euo pipefail

# === Tilpas disse vaerdier ===
WG_NET="10.8.0.1/24"
WG_PORT="51820"
WAN_IF="$(ip route get 1.1.1.1 | awk '{print $5; exit}')"

echo "[*] Installerer WireGuard paa graenseflade $WAN_IF"
apt update && apt install -y wireguard qrencode

echo "[*] Aktiverer IP-forwarding"
cat > /etc/sysctl.d/99-wireguard.conf </dev/null

echo "[*] Genererer servernoegler"
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
SERVER_PRIV="$(cat server_private.key)"

echo "[*] Skriver wg0.conf"
cat > /etc/wireguard/wg0.conf <

Efter scriptet har kørt, mangler du blot at tilføje klienter, præcis som i trin 7 og 11. Gem scriptet i et privat repository, aldrig et offentligt, da det rører ved nøgler. Med dette grundlag har du en fuldt fungerende WireGuard VPN, der overlever genstart og videresender trafik korrekt.

Almindelige faldgruber

Disse fem fejl står for langt størstedelen af de mislykkede opsætninger. Tjek dem først, hvis noget ikke virker.

  • IP-forwarding glemt. Klienten får håndtryk og kan pinge 10.8.0.1, men ikke nå internettet. Løsning: bekræft sysctl net.ipv4.ip_forward returnerer 1, som i trin 2.
  • Forkert WAN-grænseflade i NAT-reglen. Hvis eth0 i virkeligheden hedder ens3 eller enp1s0, fejler masquerading lydløst. Find det rigtige navn med ip route get 1.1.1.1.
  • Overlappende AllowedIPs. To peers med samme AllowedIPs på serveren ødelægger routingen. Hver klient skal have sin egen unikke /32.
  • Manglende PersistentKeepalive. Mobile klienter bag NAT mister forbindelsen efter inaktivitet uden PersistentKeepalive = 25.
  • Port blokeret hos udbyderen. Serverens firewall tillader UDP 51820, men hosting-udbyderens netværksfilter gør ikke. Tjek udbyderens kontrolpanel, ikke kun ufw.

Fejlfinding: 8 konkrete problemer

Når wg show ikke viser det forventede, så arbejd systematisk gennem denne liste. De fleste problemer falder i en af otte kategorier.

  • Intet håndtryk overhovedet. Linjen latest handshake mangler. Tjek at klientens Endpoint peger på serverens korrekte offentlige IP og port, og at UDP 51820 er åben hele vejen.
  • Håndtryk, men ingen internetadgang. Næsten altid IP-forwarding eller NAT. Bekræft net.ipv4.ip_forward = 1 og at masquerade-reglen bruger den rigtige WAN-grænseflade.
  • Forbindelsen falder efter et par minutter. Tilføj PersistentKeepalive = 25 på klienten bag NAT.
  • DNS virker ikke i tunnelen. Sæt en gyldig DNS-linje i klientens [Interface], for eksempel 1.1.1.1. Uden DNS kan navne ikke slås op, selvom IP-trafik virker.
  • "RTNETLINK answers: File exists". Grænsefladen er allerede oppe. Kør sudo wg-quick down wg0 før et nyt up.
  • Forkert MTU og hakkende forbindelse. På nogle netværk hjælper det at sætte MTU = 1380 i klientens [Interface], hvis store pakker tabes.
  • Tjenesten starter ikke ved boot. Bekræft systemctl is-enabled wg-quick@wg0 returnerer enabled. Ellers kør systemctl enable wg-quick@wg0.
  • Permission denied på nøglefiler. Hvis wg-quick klager over rettigheder, så sæt chmod 600 på de private nøgler og på wg0.conf.

Et godt generelt værktøj er at se på systemloggen med journalctl -u wg-quick@wg0 --no-pager. Den viser præcis, hvilken kommando i PostUp der eventuelt fejlede, og sparer dig for gætteri.

Avancerede tips

Når grundopsætningen kører, kan du stramme og udvide den. Her er teknikker, der løfter en hjemmelavet WireGuard-server til noget mere robust.

Preshared key som ekstra lag

Du kan tilføje en symmetrisk delt nøgle oven på den asymmetriske kryptering. Det giver et ekstra lag mod fremtidige kvantecomputere, der måtte true Curve25519. Generér med wg genpsk, og tilføj PresharedKey i både serverens og klientens peer-blok.

# Generer en preshared key
wg genpsk | sudo tee /etc/wireguard/phone_psk.key

# Tilfoej linjen i begge peer-blokke
# PresharedKey = INDHOLD_AF_phone_psk.key

Emnet kvanteresistens er værd at følge. Vores gennemgang af principperne bag moderne hashing i SHA-256 giver baggrunden for, hvorfor algoritmevalg betyder noget på den lange bane.

IPv6 og administrationsværktøjer

Tilføj et IPv6-subnet til tunnelen, for eksempel fd86:ea04:1115::1/64Address-linjen, hvis dine klienter har brug for IPv6. Til større opsætninger findes færdige administrationspaneler som wg-easy, der giver et webinterface til at oprette og tilbagekalde klienter. For en husstand er manuel redigering af wg0.conf dog både hurtigere og mere gennemskueligt.

Vil du tilbagekalde en klient, fjerner du blot dens [Peer]-blok og kører wg syncconf igen. Adgangen forsvinder øjeblikkeligt, fordi serveren ikke længere anerkender den offentlige nøgle. Det er enklere end at trække certifikater tilbage i en klassisk PKI, og det er relevant i konteksten af datalæk og hvordan kompromitterede nøgler bør håndteres.

Sådan vælger du server og placering

Kvaliteten af din WireGuard VPN afhænger lige så meget af serveren som af konfigurationen. Til en husstand eller en enkelt bruger rækker den mindste virtuelle server hos de fleste udbydere, typisk en maskine med én vCPU, 1 GB RAM og et par hundrede GB trafik om måneden. WireGuard kører i kernen og bruger næsten ingen CPU, så flaskehalsen bliver din båndbredde, ikke processorkraften.

Placeringen betyder noget for både hastighed og jura. Vælger du en server i Danmark eller et nabolandsdatacenter, får du lav latenstid og hører under europæisk databeskyttelse. Vil du fremstå med en IP fra et bestemt land, for eksempel for at nå tjenester, der kun virker dér, vælger du en server placeret tilsvarende. Husk, at din serverudbyder ser din trafik på samme måde, som et internetudbyder ville, så vælg en udbyder, du har tillid til.

  • Latenstid. Jo tættere serveren er fysisk på dig, desto hurtigere føles forbindelsen. En server i Norden er ideel for danske brugere.
  • Trafikgrænse. Tjek udbyderens månedlige datakvote. Streaming gennem tunnelen tæller med, så vælg rigeligt med trafik, hvis hele husstanden bruger den.
  • IPv4 inkluderet. Bekræft at serveren får en dedikeret offentlig IPv4-adresse. Nogle billige planer deler IP, hvilket bryder indgående VPN.
  • Jurisdiktion. En server i EU er underlagt GDPR. Det giver et forudsigeligt retsgrundlag for, hvordan dine data behandles.

Mange danske brugere vælger en nordisk udbyder af både hensyn til hastighed og databeskyttelse. Når serveren først er sat op, kan den køre i årevis med minimal vedligeholdelse, fordi WireGuard selv er stabilt og sjældent kræver opdatering ud over de almindelige systempatches.

Sikkerhed og vedligeholdelse af din WireGuard-server

En VPN-server, der er åben mod internettet, skal holdes hærdet. Selve WireGuard er svær at angribe direkte, fordi den ignorerer pakker fra ukendte nøgler, men resten af serveren skal også passes. Den vigtigste enkeltvane er at holde systemet opdateret, så kendte sårbarheder lukkes løbende.

# Hold serveren opdateret og aktiver automatiske sikkerhedsopdateringer
sudo apt update && sudo apt upgrade -y
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

Beskyt SSH-adgangen, så serveren ikke kompromitteres ad bagvejen. Slå adgangskodelogin fra til fordel for nøgler, skift eventuelt SSH-porten, og overvej et værktøj som fail2ban, der blokerer IP-adresser efter gentagne mislykkede loginforsøg. Kombineret med en stram firewall, der kun tillader SSH og UDP 51820, reducerer du angrebsfladen markant. De samme principper om stærke nøgler og adgangskoder gælder her som i kodeordssikkerhed.

  • Roter nøgler ved mistanke. Hvis en enheds private nøgle kan være lækket, fjern dens peer-blok og udsted et nyt nøglepar. Tilbagekaldelse virker øjeblikkeligt.
  • Tag backup af wg0.conf. Gem en krypteret kopi af serverkonfigurationen, så du hurtigt kan genskabe opsætningen på en ny server.
  • Overvåg håndtryk. Et hurtigt wg show afslører ukendte peers eller forbindelser fra uventede endpoints.
  • Begræns adgang. Brug AllowedIPs stramt, så hver klient kun kan nå det, den faktisk har brug for, frem for hele netværket.

Med disse vaner kører en selv-hostet WireGuard VPN sikkert i lang tid. Den månedlige vedligeholdelse er reelt blot at lade de automatiske opdateringer køre og kaste et blik på wg show en gang imellem. Det er en af de mest robuste sikkerhedsinvesteringer, en privat bruger eller et lille team kan lave.

WireGuard mod OpenVPN og IPsec

Hvorfor vælge WireGuard frem for de etablerede alternativer? Tabellen sammenfatter de praktiske forskelle, der betyder noget for en selv-hostet opsætning.

EgenskabWireGuardOpenVPNIPsec/IKEv2
Kodebase~4.000 linjerTitusindvis af linjerMeget stor, flere komponenter
PlaceringLinux-kernen (5.6+)BrugerlandKerne plus dæmoner
KryptografiFast, moderne sætKonfigurerbarKonfigurerbar
OpsætningstidCirka 20 minutterLængere, flere filerKompleks
TransportUDPUDP eller TCPUDP/ESP
RoamingIndbygget, sømløstBegrænsetGod med MOBIKE

OpenVPN har stadig en plads, hvor man skal igennem aggressive firewalls, fordi det kan køre over TCP-port 443 og ligne almindelig HTTPS-trafik. IPsec er dybt integreret i virksomhedsudstyr. Men til en personlig eller lille teamopsætning vinder WireGuard på enkelhed, ydelse og en kodebase, der er til at overskue. Den lave kompleksitet er i sig selv en sikkerhedsfordel, fordi der simpelthen er mindre, der kan gå galt.

Ofte stillede spørgsmål

Er WireGuard sikkert nok til daglig brug?

Ja. WireGuard bruger moderne, velgennemgåede primitiver som Curve25519, ChaCha20 og Poly1305, og protokollens lille kodebase gør den lettere at revidere end ældre VPN'er. Den er en del af mainline Linux-kernen, hvilket betyder bred granskning fra kerneudviklere.

Hvilken port bruger WireGuard?

Standardporten er UDP 51820. Du kan ændre den med ListenPort i serverens konfiguration og Endpoint i klientens, hvis du vil bruge en anden port for at undgå blokering.

Kan jeg køre WireGuard på Windows og macOS?

Ja. Der findes officielle WireGuard-apps til Windows, macOS, Android og iOS. Klientkonfigurationen er den samme uanset platform, og på mobil kan du importere den via QR-kode.

Hvad koster det at hoste sin egen WireGuard VPN?

En lille virtuel server, der er rigeligt til formålet, koster typisk 25 til 50 kroner om måneden hos en europæisk udbyder. Selve WireGuard-softwaren er gratis og open source.

Skjuler en selv-hostet VPN min identitet?

Den krypterer din trafik og skjuler din rigtige IP for de sider, du besøger, men din serverudbyder kender dig. Hvis målet er anonymitet over for selve udbyderen, er en revideret no-log-tjeneste eller Tor en bedre tilgang.

Hvorfor får jeg håndtryk, men ingen internetadgang?

Det skyldes næsten altid manglende IP-forwarding eller en forkert NAT-regel. Bekræft, at net.ipv4.ip_forward er 1, og at masquerade-reglen peger på serverens rigtige WAN-grænseflade.

Hvor mange klienter kan en server håndtere?

Med et /24-subnet har du plads til 253 klient-IP'er. Ydelsesmæssigt kan selv en lille server betjene en husstand eller et lille team uden problemer, fordi WireGuard kører effektivt i kernen.

Eksterne kilder

Sidst opdateret juni 2026. Denne guide er testet på Ubuntu 24.04 LTS og Debian 12. Kommandoer kan kræve mindre tilpasning afhængigt af din udbyder og netværksopsætning.