{"id":55,"date":"2026-06-11T20:37:26","date_gmt":"2026-06-11T20:37:26","guid":{"rendered":"https:\/\/shattered.io\/dk\/2026\/06\/11\/wireguard-vpn-server-2026\/"},"modified":"2026-06-11T20:38:37","modified_gmt":"2026-06-11T20:38:37","slug":"wireguard-vpn-server-2026","status":"publish","type":"post","link":"https:\/\/shattered.io\/dk\/2026\/06\/11\/wireguard-vpn-server-2026\/","title":{"rendered":"WireGuard VPN p\u00e5 12 trin: egen server p\u00e5 20 min [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En VPN du selv hoster, giver dig en krypteret tunnel mellem din telefon, din b\u00e6rbare og en server du selv kontrollerer. Ingen tredjepart logger din trafik, og du betaler ikke et m\u00e5nedligt abonnement. <strong>WireGuard<\/strong> har gjort den slags ops\u00e6tning enkel nok til at klares p\u00e5 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Denne guide tager dig gennem 12 konkrete trin: fra en frisk Ubuntu- eller Debian-server til en fungerende <strong>WireGuard VPN<\/strong> med b\u00e5de desktop- og mobilklienter, NAT, DNS og automatisk start ved boot. Hver kommando kan kopieres direkte. Til sidst finder du et komplet ops\u00e6tningsscript, en tabel over alle konfigurationsn\u00f8gler og en fejlfindingssektion med de problemer folk oftest l\u00f8ber ind i.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hvad-er-wireguard\">Hvad er WireGuard, og hvorfor hoste din egen VPN i 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>WireGuard<\/strong> er en moderne VPN-protokol, der flytter IP-pakker gennem en krypteret tunnel p\u00e5 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\u00f8rer i kernen p\u00e5 langt de fleste moderne Linux-servere uden ekstra moduler. Resultatet er lavere latenstid og h\u00f8jere genneml\u00f8b end brugerland-VPN&#8217;er som OpenVPN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den lille kodebase er ikke kun en teknisk kuriositet. F\u00e6rre linjer kode betyder f\u00e6rre fejl og en angrebsflade, som en enkelt person realistisk kan revidere. OpenVPN og de klassiske IPsec-stakke t\u00e6ller titusindvis af linjer. WireGuard n\u00f8jes med cirka 4.000, og det er en stor del af grunden til, at protokollen vandt frem s\u00e5 hurtigt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hvorfor selv-hoste i stedet for at k\u00f8be et VPN-abonnement? Tre grunde dominerer. For det f\u00f8rste 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\u00e5neden og kan betjene hele husstanden. For det tredje l\u00e6ring: n\u00e5r du selv s\u00e6tter tunnelen op, forst\u00e5r du pr\u00e6cis, hvad der krypteres, hvor det dirigeres hen, og hvilke porte der er \u00e5bne. Det er den samme tankegang, der ligger bag <a href=\"\/dk\/https-og-tls\/\">HTTPS og TLS<\/a>, hvor du flytter tillid fra en udbyder til verificerbar kryptografi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En selv-hostet <strong>WireGuard VPN<\/strong> erstatter ikke en no-log-udbyder, hvis dit m\u00e5l er at skjule, at du overhovedet bruger en VPN, for din serverudbyder kender din identitet. Men til at sikre din trafik p\u00e5 et offentligt WiFi, n\u00e5 hjemmenetv\u00e6rket p\u00e5 afstand eller samle flere maskiner i \u00e9t privat net er den sv\u00e6r at sl\u00e5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kryptografi-arkitektur\">S\u00e5dan fungerer WireGuard: kryptografi og arkitektur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard adskiller sig fra \u00e6ldre VPN&#8217;er ved ikke at lade brugeren v\u00e6lge cipher-suiter. Der er \u00e9t fast s\u00e6t 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\u00f8gle, pr\u00e6cis som med SSH-n\u00f8gler, og der er ingen certifikater eller centrale myndigheder involveret.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Funktion<\/th><th>Algoritme<\/th><th>Rolle i tunnelen<\/th><\/tr><\/thead><tbody>\n<tr><td>N\u00f8gleudveksling<\/td><td>Curve25519<\/td><td>Etablerer delt hemmelighed mellem to peers<\/td><\/tr>\n<tr><td>Symmetrisk kryptering<\/td><td>ChaCha20<\/td><td>Krypterer selve pakkernes indhold<\/td><\/tr>\n<tr><td>Autentificering<\/td><td>Poly1305<\/td><td>Sikrer at pakker ikke er \u00e6ndret undervejs<\/td><\/tr>\n<tr><td>Hashing<\/td><td>BLAKE2s<\/td><td>Bruges i h\u00e5ndtrykket og n\u00f8gleafledning<\/td><\/tr>\n<tr><td>Hashtabelbeskyttelse<\/td><td>SipHash24<\/td><td>Beskytter interne datastrukturer mod DoS<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kombinationen ChaCha20-Poly1305 er en autentificeret kryptering (AEAD), som b\u00e5de skjuler og beskytter pakker i \u00e9n operation. Curve25519 h\u00e5ndterer Diffie-Hellman-n\u00f8gleudveksling med kurver, der er kendt for at v\u00e6re hurtige og modstandsdygtige over for implementeringsfejl. Hvis du vil forst\u00e5, hvorfor valg af hashfunktion betyder noget, s\u00e5 d\u00e6kker vores artikel om <a href=\"\/dk\/hashfunktioner\/\">hashfunktioner<\/a> egenskaberne i detaljer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Arkitektonisk er WireGuard tavs. Serveren svarer ikke p\u00e5 pakker fra ukendte n\u00f8gler, s\u00e5 en port-scanner kan ikke umiddelbart se, at der k\u00f8rer en VPN. Hver peer har en liste af <code>AllowedIPs<\/code>, der b\u00e5de fungerer som adgangskontrol og som routingtabel. P\u00e5 serveren betyder en peers <code>AllowedIPs<\/code>, hvilke tunnel-IP&#8217;er der h\u00f8rer til netop den klient. P\u00e5 klienten betyder den, hvilken trafik der skal sendes ind i tunnelen. Den dobbelte rolle forvirrer mange begyndere, s\u00e5 hold den for \u00f8je gennem hele ops\u00e6tningen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forudsaetninger\">Foruds\u00e6tninger og versioner<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inden du g\u00e5r i gang, skal f\u00f8lgende v\u00e6re p\u00e5 plads. Versionerne herunder er testet i 2026, men <strong>WireGuard<\/strong> er stabilt, s\u00e5 lidt \u00e6ldre eller nyere versioner virker fint.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>En virtuel server (VPS)<\/strong> med en offentlig IPv4-adresse. Ubuntu 24.04 LTS eller Debian 12 anbefales. Begge har en kerne nyere end 5.6, s\u00e5 WireGuard er indbygget.<\/li>\n<li><strong>Root-adgang eller en bruger med sudo.<\/strong> Alle kommandoer herunder foruds\u00e6tter, at du kan k\u00f8re <code>sudo<\/code>.<\/li>\n<li><strong>SSH-adgang<\/strong> til serveren. Hvis du endnu ikke har h\u00e6rdet SSH, s\u00e5 g\u00f8r det f\u00f8rst, og brug gerne kodeordsr\u00e5d fra <a href=\"\/dk\/kodeordssikkerhed\/\">kodeordssikkerhed<\/a>.<\/li>\n<li><strong>WireGuard-tools.<\/strong> Kommandoerne <code>wg<\/code> og <code>wg-quick<\/code> f\u00f8lger med pakken <code>wireguard<\/code> p\u00e5 Ubuntu og Debian.<\/li>\n<li><strong>En klient.<\/strong> Den officielle WireGuard-app til Android, iOS, Windows og macOS, eller pakken <code>wireguard<\/code> p\u00e5 en Linux-klient.<\/li>\n<li><strong>Adgang til serverens firewall.<\/strong> Du skal kunne \u00e5bne UDP-port 51820 (standardporten), b\u00e5de i serverens eget firewall og i udbyderens eventuelle netv\u00e6rksfilter.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Du kan tjekke din kerneversion med <code>uname -r<\/code>. F\u00e5r du et tal p\u00e5 5.6 eller h\u00f8jere, er du klar. N\u00e6sten alle servere udlejet i 2025 og 2026 k\u00f8rer kerner langt over dette, typisk 6.x.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-1-installer\">Trin 1: Opdater serveren og installer WireGuard<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start med at opdatere pakkelisterne og installere WireGuard. P\u00e5 Ubuntu og Debian tr\u00e6kker pakken <code>wireguard<\/code> de n\u00f8dvendige v\u00e6rkt\u00f8jer med, inklusive <code>wg<\/code> og <code>wg-quick<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y wireguard qrencode\n\n# Bekraeft installationen\nwg --version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pakken <code>qrencode<\/code> tager vi med nu, fordi vi senere bruger den til at vise mobilklientens konfiguration som en QR-kode. Outputtet fra <code>wg --version<\/code> ser typisk s\u00e5dan ud:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wireguard-tools v1.0.20210914 - https:\/\/git.zx2c4.com\/wireguard-tools\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ser du en version, er kerneunderst\u00f8ttelsen til stede, og du kan forts\u00e6tte. Hvis kommandoen ikke findes, k\u00f8rer du sandsynligvis en meget gammel distribution. Opgrader til Ubuntu 24.04 LTS eller Debian 12 frem for at k\u00e6mpe med backports.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-2-ip-forwarding\">Trin 2: Aktiv\u00e9r IP-forwarding p\u00e5 serveren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For at serveren kan videresende klienternes trafik ud p\u00e5 internettet, skal IP-forwarding v\u00e6re sl\u00e5et til. Som standard er det deaktiveret af sikkerhedsgrunde. Vi aktiverer det permanent via en fil i <code>\/etc\/sysctl.d\/<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Opret en dedikeret sysctl-fil\necho 'net.ipv4.ip_forward = 1' | sudo tee \/etc\/sysctl.d\/99-wireguard.conf\necho 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a \/etc\/sysctl.d\/99-wireguard.conf\n\n# Indlaes aendringerne uden reboot\nsudo sysctl --system\n\n# Bekraeft at vaerdien nu er 1\nsysctl net.ipv4.ip_forward<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den sidste kommando skal returnere <code>net.ipv4.ip_forward = 1<\/code>. Glemmer du dette trin, vil klienter kunne oprette h\u00e5ndtryk med serveren og pinge tunnel-IP&#8217;en, men de f\u00e5r ikke adgang til internettet. Det er en af de mest almindelige fejl, og vi vender tilbage til den i fejlfindingsafsnittet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-3-noegler\">Trin 3: Gener\u00e9r serverens n\u00f8glepar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hver peer i et <strong>WireGuard<\/strong>-netv\u00e6rk har et n\u00f8glepar: en privat n\u00f8gle, der aldrig forlader maskinen, og en offentlig n\u00f8gle, der deles med modparten. Vi genererer serverens par i <code>\/etc\/wireguard<\/code> og strammer rettighederne, s\u00e5 kun root kan l\u00e6se den private n\u00f8gle.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Skift til konfigurationsmappen og saet en stram umask\ncd \/etc\/wireguard\numask 077\n\n# Generer privat og offentlig noegle i en arbejdsgang\nwg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key\n\n# Se den offentlige noegle (den private skal forblive hemmelig)\nsudo cat server_public.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kommandoen <code>wg genkey<\/code> producerer en tilf\u00e6ldig privat n\u00f8gle, og <code>wg pubkey<\/code> afleder den matchende offentlige n\u00f8gle. <code>umask 077<\/code> sikrer, at filerne kun kan l\u00e6ses af ejeren. Noter den offentlige n\u00f8gle, for du skal inds\u00e6tte den i hver klients konfiguration. Den private n\u00f8gle skal du behandle som en adgangskode: den m\u00e5 aldrig deles eller commites til et repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Princippet med offentlige og private n\u00f8gler er det samme, som driver <a href=\"\/dk\/digitale-signaturer\/\">digitale signaturer<\/a>. Den offentlige n\u00f8gle kan deles frit, mens den private bevarer hemmeligheden, der g\u00f8r hele systemet sikkert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-4-server-config\">Trin 4: Opret serverkonfigurationen wg0.conf<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu samler vi det hele i konfigurationsfilen <code>\/etc\/wireguard\/wg0.conf<\/code>. Navnet <code>wg0<\/code> bliver navnet p\u00e5 netv\u00e6rksgr\u00e6nsefladen. Vi v\u00e6lger et privat subnet til tunnelen, her <code>10.8.0.0\/24<\/code>, hvor serveren f\u00e5r <code>10.8.0.1<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/wireguard\/wg0.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inds\u00e6t f\u00f8lgende, og udskift <code>SERVERENS_PRIVATE_NOEGLE<\/code> med indholdet af <code>server_private.key<\/code>. Tilpas <code>eth0<\/code> til navnet p\u00e5 serverens offentlige gr\u00e6nseflade (find det med <code>ip route get 1.1.1.1<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Interface]\nAddress = 10.8.0.1\/24\nListenPort = 51820\nPrivateKey = SERVERENS_PRIVATE_NOEGLE\n\n# NAT og forwarding aktiveres naar tunnelen kommer op\nPostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE\n\n# Klienter tilfoejes som [Peer]-blokke laengere nede<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Linjerne <code>PostUp<\/code> og <code>PostDown<\/code> k\u00f8rer automatisk, n\u00e5r tunnelen henholdsvis startes og stoppes. De tilf\u00f8jer og fjerner NAT-reglerne, s\u00e5 vi ikke skal vedligeholde firewall-regler manuelt. Tabellen herunder forklarer de vigtigste n\u00f8gler i konfigurationen.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>N\u00f8gle<\/th><th>Sektion<\/th><th>Betydning<\/th><\/tr><\/thead><tbody>\n<tr><td>Address<\/td><td>[Interface]<\/td><td>Tunnel-IP for denne maskine<\/td><\/tr>\n<tr><td>ListenPort<\/td><td>[Interface]<\/td><td>UDP-port serveren lytter p\u00e5 (standard 51820)<\/td><\/tr>\n<tr><td>PrivateKey<\/td><td>[Interface]<\/td><td>Maskinens egen private n\u00f8gle<\/td><\/tr>\n<tr><td>DNS<\/td><td>[Interface]<\/td><td>DNS-server klienten bruger i tunnelen<\/td><\/tr>\n<tr><td>PublicKey<\/td><td>[Peer]<\/td><td>Modpartens offentlige n\u00f8gle<\/td><\/tr>\n<tr><td>AllowedIPs<\/td><td>[Peer]<\/td><td>Hvilke IP&#8217;er der h\u00f8rer til\/dirigeres til denne peer<\/td><\/tr>\n<tr><td>Endpoint<\/td><td>[Peer]<\/td><td>Modpartens offentlige adresse og port<\/td><\/tr>\n<tr><td>PersistentKeepalive<\/td><td>[Peer]<\/td><td>Sekunder mellem keepalive-pakker (typisk 25)<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-5-nat-firewall\">Trin 5: NAT og firewall<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">NAT-reglerne i <code>PostUp<\/code> s\u00f8rger for masquerading, s\u00e5 pakker fra tunnel-subnettet <code>10.8.0.0\/24<\/code> f\u00e5r serverens offentlige IP som afsender. Uden masquerading ville svarpakker aldrig finde tilbage til klienten. Vi skal ogs\u00e5 \u00e5bne selve VPN-porten i firewallen. Bruger du UFW, ser det s\u00e5dan ud.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tillad WireGuard-porten ind\nsudo ufw allow 51820\/udp\n\n# Sikr at SSH stadig er aabent, saa du ikke laaser dig selv ude\nsudo ufw allow OpenSSH\n\n# Aktiver firewallen hvis den ikke koerer\nsudo ufw enable\nsudo ufw status verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Foretr\u00e6kker du <code>nftables<\/code> frem for <code>iptables<\/code>, kan du erstatte masquerade-reglerne med en tilsvarende NAT-regel i nftables. P\u00e5 de fleste moderne systemer overs\u00e6tter <code>iptables<\/code> alligevel til nftables bagved, s\u00e5 kommandoerne ovenfor virker. Det vigtige er, at b\u00e5de serverens lokale firewall og din udbyders eventuelle netv\u00e6rksfilter slipper UDP 51820 igennem. Mange fejls\u00f8gningssessioner ender med, at porten var blokeret hos hosting-udbyderen, ikke p\u00e5 serveren selv.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-6-start-tunnel\">Trin 6: Start tunnelen og aktiv\u00e9r ved boot<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Med konfigurationen p\u00e5 plads kan vi bringe gr\u00e6nsefladen op. V\u00e6rkt\u00f8jet <code>wg-quick<\/code> l\u00e6ser <code>\/etc\/wireguard\/wg0.conf<\/code>, opretter gr\u00e6nsefladen, s\u00e6tter IP-adressen og k\u00f8rer <code>PostUp<\/code>-reglerne i \u00e9t hug.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Bring tunnelen op manuelt foerste gang\nsudo wg-quick up wg0\n\n# Faa den til at starte automatisk ved hver opstart\nsudo systemctl enable wg-quick@wg0\n\n# Bekraeft at tjenesten koerer\nsudo systemctl status wg-quick@wg0 --no-pager<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instansnavnet <code>@wg0<\/code> skal matche filnavnet <code>wg0.conf<\/code>. Vil du senere stoppe tunnelen, bruger du <code>sudo wg-quick down wg0<\/code>. Et vellykket <code>up<\/code> giver et output, der bekr\u00e6fter, at gr\u00e6nsefladen og reglerne blev oprettet:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[#] ip link add wg0 type wireguard\n[#] wg setconf wg0 \/dev\/fd\/63\n[#] ip -4 address add 10.8.0.1\/24 dev wg0\n[#] ip link set mtu 1420 up dev wg0\n[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Serveren er nu klar og lytter p\u00e5 UDP 51820. N\u00e6ste skridt er at oprette den f\u00f8rste klient og give den adgang.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-7-klient\">Trin 7: Opret den f\u00f8rste klient som peer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En klient har sit eget n\u00f8glepar, ligesom serveren. Gener\u00e9r det enten p\u00e5 selve klienten eller p\u00e5 serveren, hvis det er lettere at administrere centralt. Her genererer vi p\u00e5 serveren for overskuelighedens skyld.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/wireguard\numask 077\n\n# Generer noeglepar til foerste klient (telefon)\nwg genkey | sudo tee phone_private.key | wg pubkey | sudo tee phone_public.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tilf\u00f8j nu klienten som en <code>[Peer]<\/code>-blok i serverens <code>wg0.conf<\/code>. Klienten f\u00e5r tunnel-IP&#8217;en <code>10.8.0.2<\/code>. Bem\u00e6rk, at <code>AllowedIPs<\/code> her er <code>\/32<\/code>, fordi det p\u00e5 serversiden kun betyder &#8220;denne ene IP tilh\u00f8rer denne klient&#8221;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tilfoej til bunden af \/etc\/wireguard\/wg0.conf\n\n[Peer]\n# Telefon\nPublicKey = INDHOLD_AF_phone_public.key\nAllowedIPs = 10.8.0.2\/32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Genindl\u00e6s konfigurationen uden at afbryde eksisterende forbindelser med en syntaks, der kombinerer <code>wg<\/code> og <code>wg-quick<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo wg syncconf wg0 <(wg-quick strip wg0)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Selve klientkonfigurationen, som telefonen skal bruge, ser s\u00e5dan ud. Udskift pladsholderne, og brug serverens offentlige IP i <code>Endpoint<\/code>. <code>AllowedIPs = 0.0.0.0\/0<\/code> dirigerer al klientens trafik gennem tunnelen, en fuld VPN.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Interface]\nPrivateKey = INDHOLD_AF_phone_private.key\nAddress = 10.8.0.2\/32\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = SERVERENS_OFFENTLIGE_NOEGLE\nEndpoint = DIN_SERVER_IP:51820\nAllowedIPs = 0.0.0.0\/0\nPersistentKeepalive = 25<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PersistentKeepalive = 25<\/code> sender en lille pakke hvert 25. sekund, s\u00e5 NAT-mappingen mellem klient og server holdes \u00e5ben. Det er vigtigt for mobile klienter og maskiner bag NAT, ellers falder forbindelsen efter et stykke inaktivitet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-8-mobil-qr\">Trin 8: Mobilklient med QR-kode<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I stedet for at taste den lange klientkonfiguration ind p\u00e5 telefonen kan du vise den som en QR-kode i terminalen. Gem klientkonfigurationen fra forrige trin som <code>phone.conf<\/code>, og k\u00f8r <code>qrencode<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Vis konfigurationen som QR-kode direkte i terminalen\nqrencode -t ansiutf8 < phone.conf\n\n# Eller gem den som et PNG-billede til senere\nqrencode -o phone.png < phone.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c5bn den officielle WireGuard-app p\u00e5 Android eller iOS, v\u00e6lg \"Tilf\u00f8j tunnel\" og derefter \"Scan fra QR-kode\", og ret kameraet mod terminalen. Profilen importeres p\u00e5 sekunder, og du kan sl\u00e5 tunnelen til. Outputtet i terminalen er et blokm\u00f8nster i sort og hvidt, som app-kameraet l\u00e6ser direkte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Husk at slette <code>phone.png<\/code> bagefter, hvis du gemte den som fil. Billedet indeholder klientens private n\u00f8gle i klartekst og b\u00f8r behandles lige s\u00e5 fortroligt som en adgangskode.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-9-dns-splittunnel\">Trin 9: DNS, kill switch og split tunneling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Linjen <code>DNS = 1.1.1.1<\/code> i klientkonfigurationen bestemmer, hvilken resolver klienten bruger, mens tunnelen er aktiv. Det forhindrer DNS-l\u00e6kager, hvor opslag ellers ville g\u00e5 uden om VPN'en og afsl\u00f8re, hvilke dom\u00e6ner du bes\u00f8ger. Vil du have endnu mere privatliv, kan du pege p\u00e5 en resolver, der underst\u00f8tter DNS over HTTPS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard-appen indeholder en indbygget kill switch. Aktiverer du \"Block untrusted networks\", afvises al trafik, hvis tunnelen falder, s\u00e5 intet siver ud udenom. P\u00e5 desktop opn\u00e5r du samme effekt med firewall-regler, der kun tillader trafik gennem <code>wg0<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"split-tunneling\">Split tunneling i praksis<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du kun sende noget trafik gennem VPN'en, for eksempel trafik til dit hjemmenetv\u00e6rk, men lade resten g\u00e5 direkte, justerer du <code>AllowedIPs<\/code> p\u00e5 klienten. I stedet for <code>0.0.0.0\/0<\/code> angiver du de specifikke subnet, der skal i tunnelen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Kun trafik til hjemmenettet og tunnelen gaar gennem VPN\nAllowedIPs = 10.8.0.0\/24, 192.168.1.0\/24<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Det er nyttigt p\u00e5 en mobil, hvor du vil n\u00e5 hjemmeserveren uden at dirigere streaming og opdateringer gennem din egen VPS. Split tunneling sparer b\u00e5ndbredde og holder din IP u\u00e6ndret for almindelig surf.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-10-verificer\">Trin 10: Verific\u00e9r forbindelsen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kommandoen <code>wg show<\/code> er dit prim\u00e6re diagnosev\u00e6rkt\u00f8j. Den viser peers, seneste h\u00e5ndtryk og overf\u00f8rte bytes. K\u00f8r den p\u00e5 serveren, efter du har forbundet en klient.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo wg show<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et sundt output ser s\u00e5dan ud. Linjen <code>latest handshake<\/code> og stigende <code>transfer<\/code>-tal bekr\u00e6fter, at tunnelen fungerer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface: wg0\n  public key: Hk7c...serverens offentlige noegle...=\n  private key: (hidden)\n  listening port: 51820\n\npeer: 9bT2...telefonens offentlige noegle...=\n  endpoint: 87.51.xx.xx:48213\n  allowed ips: 10.8.0.2\/32\n  latest handshake: 18 seconds ago\n  transfer: 1.42 MiB received, 9.81 MiB sent<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fra klienten kan du teste, at du faktisk n\u00e5r internettet gennem serveren, ved at sl\u00e5 op, hvilken offentlig IP du fremst\u00e5r med. Den skal matche serverens IP, ikke dit lokale net.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Skal returnere serverens offentlige IP, ikke din egen\ncurl https:\/\/api.ipify.org\necho\nping -c 3 10.8.0.1<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-11-flere-klienter\">Trin 11: Tilf\u00f8j flere klienter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At tilf\u00f8je en b\u00e6rbar, en tablet eller et familiemedlems telefon f\u00f8lger n\u00f8jagtig samme m\u00f8nster som telefonen. Gener\u00e9r et nyt n\u00f8glepar, giv klienten den n\u00e6ste ledige tunnel-IP, og tilf\u00f8j en <code>[Peer]<\/code>-blok. Hver klient skal have en unik <code>AllowedIPs<\/code> p\u00e5 serversiden, ellers kolliderer routingen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Noeglepar til baerbar\nwg genkey | sudo tee laptop_private.key | wg pubkey | sudo tee laptop_public.key\n\n# Tilfoej som peer med naeste IP, 10.8.0.3\nsudo tee -a \/etc\/wireguard\/wg0.conf > \/dev\/null <<'EOF'\n\n[Peer]\n# Baerbar\nPublicKey = INDHOLD_AF_laptop_public.key\nAllowedIPs = 10.8.0.3\/32\nEOF\n\n# Genindlaes uden at afbryde de andre\nsudo wg syncconf wg0 <(wg-quick strip wg0)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En praktisk regel er at f\u00f8re en simpel liste over, hvilken IP der h\u00f8rer til hvilken enhed, for eksempel <code>10.8.0.2 telefon<\/code>, <code>10.8.0.3 baerbar<\/code>. Med et <code>\/24<\/code>-subnet har du plads til 253 klienter, rigeligt til en husstand eller et lille team.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-12-komplet-projekt\">Trin 12: Komplet projekt, scriptet fra A til Z<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Her er hele ops\u00e6tningen samlet i \u00e9t script til en frisk Ubuntu- eller Debian-server. Det installerer WireGuard, genererer servern\u00f8gler, skriver konfigurationen, aktiverer forwarding og starter tunnelen. L\u00e6s det igennem, tilpas <code>WAN_IF<\/code> og din serveradresse, og k\u00f8r det med <code>sudo bash setup-wg.sh<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\nset -euo pipefail\n\n# === Tilpas disse vaerdier ===\nWG_NET=\"10.8.0.1\/24\"\nWG_PORT=\"51820\"\nWAN_IF=\"$(ip route get 1.1.1.1 | awk '{print $5; exit}')\"\n\necho \"[*] Installerer WireGuard paa graenseflade $WAN_IF\"\napt update && apt install -y wireguard qrencode\n\necho \"[*] Aktiverer IP-forwarding\"\ncat > \/etc\/sysctl.d\/99-wireguard.conf <<SYS\nnet.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1\nSYS\nsysctl --system >\/dev\/null\n\necho \"[*] Genererer servernoegler\"\ncd \/etc\/wireguard\numask 077\nwg genkey | tee server_private.key | wg pubkey > server_public.key\nSERVER_PRIV=\"$(cat server_private.key)\"\n\necho \"[*] Skriver wg0.conf\"\ncat > \/etc\/wireguard\/wg0.conf <<CONF\n[Interface]\nAddress = ${WG_NET}\nListenPort = ${WG_PORT}\nPrivateKey = ${SERVER_PRIV}\nPostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ${WAN_IF} -j MASQUERADE\nPostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ${WAN_IF} -j MASQUERADE\nCONF\n\necho \"[*] Aabner firewall og starter tunnel\"\nufw allow ${WG_PORT}\/udp || true\nsystemctl enable wg-quick@wg0\nwg-quick up wg0\n\necho \"[*] Faerdig. Serverens offentlige noegle er:\"\ncat \/etc\/wireguard\/server_public.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Efter scriptet har k\u00f8rt, mangler du blot at tilf\u00f8je klienter, pr\u00e6cis som i trin 7 og 11. Gem scriptet i et privat repository, aldrig et offentligt, da det r\u00f8rer ved n\u00f8gler. Med dette grundlag har du en fuldt fungerende <strong>WireGuard VPN<\/strong>, der overlever genstart og videresender trafik korrekt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faldgruber\">Almindelige faldgruber<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Disse fem fejl st\u00e5r for langt st\u00f8rstedelen af de mislykkede ops\u00e6tninger. Tjek dem f\u00f8rst, hvis noget ikke virker.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP-forwarding glemt.<\/strong> Klienten f\u00e5r h\u00e5ndtryk og kan pinge <code>10.8.0.1<\/code>, men ikke n\u00e5 internettet. L\u00f8sning: bekr\u00e6ft <code>sysctl net.ipv4.ip_forward<\/code> returnerer 1, som i trin 2.<\/li>\n<li><strong>Forkert WAN-gr\u00e6nseflade i NAT-reglen.<\/strong> Hvis <code>eth0<\/code> i virkeligheden hedder <code>ens3<\/code> eller <code>enp1s0<\/code>, fejler masquerading lydl\u00f8st. Find det rigtige navn med <code>ip route get 1.1.1.1<\/code>.<\/li>\n<li><strong>Overlappende AllowedIPs.<\/strong> To peers med samme <code>AllowedIPs<\/code> p\u00e5 serveren \u00f8del\u00e6gger routingen. Hver klient skal have sin egen unikke <code>\/32<\/code>.<\/li>\n<li><strong>Manglende PersistentKeepalive.<\/strong> Mobile klienter bag NAT mister forbindelsen efter inaktivitet uden <code>PersistentKeepalive = 25<\/code>.<\/li>\n<li><strong>Port blokeret hos udbyderen.<\/strong> Serverens firewall tillader UDP 51820, men hosting-udbyderens netv\u00e6rksfilter g\u00f8r ikke. Tjek udbyderens kontrolpanel, ikke kun <code>ufw<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fejlfinding\">Fejlfinding: 8 konkrete problemer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r <code>wg show<\/code> ikke viser det forventede, s\u00e5 arbejd systematisk gennem denne liste. De fleste problemer falder i en af otte kategorier.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Intet h\u00e5ndtryk overhovedet.<\/strong> Linjen <code>latest handshake<\/code> mangler. Tjek at klientens <code>Endpoint<\/code> peger p\u00e5 serverens korrekte offentlige IP og port, og at UDP 51820 er \u00e5ben hele vejen.<\/li>\n<li><strong>H\u00e5ndtryk, men ingen internetadgang.<\/strong> N\u00e6sten altid IP-forwarding eller NAT. Bekr\u00e6ft <code>net.ipv4.ip_forward = 1<\/code> og at masquerade-reglen bruger den rigtige WAN-gr\u00e6nseflade.<\/li>\n<li><strong>Forbindelsen falder efter et par minutter.<\/strong> Tilf\u00f8j <code>PersistentKeepalive = 25<\/code> p\u00e5 klienten bag NAT.<\/li>\n<li><strong>DNS virker ikke i tunnelen.<\/strong> S\u00e6t en gyldig <code>DNS<\/code>-linje i klientens <code>[Interface]<\/code>, for eksempel <code>1.1.1.1<\/code>. Uden DNS kan navne ikke sl\u00e5s op, selvom IP-trafik virker.<\/li>\n<li><strong>\"RTNETLINK answers: File exists\".<\/strong> Gr\u00e6nsefladen er allerede oppe. K\u00f8r <code>sudo wg-quick down wg0<\/code> f\u00f8r et nyt <code>up<\/code>.<\/li>\n<li><strong>Forkert MTU og hakkende forbindelse.<\/strong> P\u00e5 nogle netv\u00e6rk hj\u00e6lper det at s\u00e6tte <code>MTU = 1380<\/code> i klientens <code>[Interface]<\/code>, hvis store pakker tabes.<\/li>\n<li><strong>Tjenesten starter ikke ved boot.<\/strong> Bekr\u00e6ft <code>systemctl is-enabled wg-quick@wg0<\/code> returnerer <code>enabled<\/code>. Ellers k\u00f8r <code>systemctl enable wg-quick@wg0<\/code>.<\/li>\n<li><strong>Permission denied p\u00e5 n\u00f8glefiler.<\/strong> Hvis <code>wg-quick<\/code> klager over rettigheder, s\u00e5 s\u00e6t <code>chmod 600<\/code> p\u00e5 de private n\u00f8gler og p\u00e5 <code>wg0.conf<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Et godt generelt v\u00e6rkt\u00f8j er at se p\u00e5 systemloggen med <code>journalctl -u wg-quick@wg0 --no-pager<\/code>. Den viser pr\u00e6cis, hvilken kommando i <code>PostUp<\/code> der eventuelt fejlede, og sparer dig for g\u00e6tteri.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avancerede-tips\">Avancerede tips<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r grundops\u00e6tningen k\u00f8rer, kan du stramme og udvide den. Her er teknikker, der l\u00f8fter en hjemmelavet <strong>WireGuard<\/strong>-server til noget mere robust.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"preshared-key\">Preshared key som ekstra lag<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Du kan tilf\u00f8je en symmetrisk delt n\u00f8gle oven p\u00e5 den asymmetriske kryptering. Det giver et ekstra lag mod fremtidige kvantecomputere, der m\u00e5tte true Curve25519. Gener\u00e9r med <code>wg genpsk<\/code>, og tilf\u00f8j <code>PresharedKey<\/code> i b\u00e5de serverens og klientens peer-blok.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Generer en preshared key\nwg genpsk | sudo tee \/etc\/wireguard\/phone_psk.key\n\n# Tilfoej linjen i begge peer-blokke\n# PresharedKey = INDHOLD_AF_phone_psk.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Emnet kvanteresistens er v\u00e6rd at f\u00f8lge. Vores gennemgang af principperne bag moderne hashing i <a href=\"\/dk\/sha-256\/\">SHA-256<\/a> giver baggrunden for, hvorfor algoritmevalg betyder noget p\u00e5 den lange bane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ip6-og-vaerktoejer\">IPv6 og administrationsv\u00e6rkt\u00f8jer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tilf\u00f8j et IPv6-subnet til tunnelen, for eksempel <code>fd86:ea04:1115::1\/64<\/code> p\u00e5 <code>Address<\/code>-linjen, hvis dine klienter har brug for IPv6. Til st\u00f8rre ops\u00e6tninger findes f\u00e6rdige administrationspaneler som wg-easy, der giver et webinterface til at oprette og tilbagekalde klienter. For en husstand er manuel redigering af <code>wg0.conf<\/code> dog b\u00e5de hurtigere og mere gennemskueligt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du tilbagekalde en klient, fjerner du blot dens <code>[Peer]<\/code>-blok og k\u00f8rer <code>wg syncconf<\/code> igen. Adgangen forsvinder \u00f8jeblikkeligt, fordi serveren ikke l\u00e6ngere anerkender den offentlige n\u00f8gle. Det er enklere end at tr\u00e6kke certifikater tilbage i en klassisk PKI, og det er relevant i konteksten af <a href=\"\/dk\/datalaek\/\">datal\u00e6k<\/a> og hvordan kompromitterede n\u00f8gler b\u00f8r h\u00e5ndteres.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vaelg-server\">S\u00e5dan v\u00e6lger du server og placering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kvaliteten af din <strong>WireGuard VPN<\/strong> afh\u00e6nger lige s\u00e5 meget af serveren som af konfigurationen. Til en husstand eller en enkelt bruger r\u00e6kker den mindste virtuelle server hos de fleste udbydere, typisk en maskine med \u00e9n vCPU, 1 GB RAM og et par hundrede GB trafik om m\u00e5neden. WireGuard k\u00f8rer i kernen og bruger n\u00e6sten ingen CPU, s\u00e5 flaskehalsen bliver din b\u00e5ndbredde, ikke processorkraften.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Placeringen betyder noget for b\u00e5de hastighed og jura. V\u00e6lger du en server i Danmark eller et nabolandsdatacenter, f\u00e5r du lav latenstid og h\u00f8rer under europ\u00e6isk databeskyttelse. Vil du fremst\u00e5 med en IP fra et bestemt land, for eksempel for at n\u00e5 tjenester, der kun virker d\u00e9r, v\u00e6lger du en server placeret tilsvarende. Husk, at din serverudbyder ser din trafik p\u00e5 samme m\u00e5de, som et internetudbyder ville, s\u00e5 v\u00e6lg en udbyder, du har tillid til.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Latenstid.<\/strong> Jo t\u00e6ttere serveren er fysisk p\u00e5 dig, desto hurtigere f\u00f8les forbindelsen. En server i Norden er ideel for danske brugere.<\/li>\n<li><strong>Trafikgr\u00e6nse.<\/strong> Tjek udbyderens m\u00e5nedlige datakvote. Streaming gennem tunnelen t\u00e6ller med, s\u00e5 v\u00e6lg rigeligt med trafik, hvis hele husstanden bruger den.<\/li>\n<li><strong>IPv4 inkluderet.<\/strong> Bekr\u00e6ft at serveren f\u00e5r en dedikeret offentlig IPv4-adresse. Nogle billige planer deler IP, hvilket bryder indg\u00e5ende VPN.<\/li>\n<li><strong>Jurisdiktion.<\/strong> En server i EU er underlagt GDPR. Det giver et forudsigeligt retsgrundlag for, hvordan dine data behandles.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Mange danske brugere v\u00e6lger en nordisk udbyder af b\u00e5de hensyn til hastighed og databeskyttelse. N\u00e5r serveren f\u00f8rst er sat op, kan den k\u00f8re i \u00e5revis med minimal vedligeholdelse, fordi WireGuard selv er stabilt og sj\u00e6ldent kr\u00e6ver opdatering ud over de almindelige systempatches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sikkerhed-vedligehold\">Sikkerhed og vedligeholdelse af din WireGuard-server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En VPN-server, der er \u00e5ben mod internettet, skal holdes h\u00e6rdet. Selve <strong>WireGuard<\/strong> er sv\u00e6r at angribe direkte, fordi den ignorerer pakker fra ukendte n\u00f8gler, men resten af serveren skal ogs\u00e5 passes. Den vigtigste enkeltvane er at holde systemet opdateret, s\u00e5 kendte s\u00e5rbarheder lukkes l\u00f8bende.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Hold serveren opdateret og aktiver automatiske sikkerhedsopdateringer\nsudo apt update && sudo apt upgrade -y\nsudo apt install -y unattended-upgrades\nsudo dpkg-reconfigure --priority=low unattended-upgrades<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Beskyt SSH-adgangen, s\u00e5 serveren ikke kompromitteres ad bagvejen. Sl\u00e5 adgangskodelogin fra til fordel for n\u00f8gler, skift eventuelt SSH-porten, og overvej et v\u00e6rkt\u00f8j som fail2ban, der blokerer IP-adresser efter gentagne mislykkede loginfors\u00f8g. Kombineret med en stram firewall, der kun tillader SSH og UDP 51820, reducerer du angrebsfladen markant. De samme principper om st\u00e6rke n\u00f8gler og adgangskoder g\u00e6lder her som i <a href=\"\/dk\/kodeordssikkerhed\/\">kodeordssikkerhed<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Roter n\u00f8gler ved mistanke.<\/strong> Hvis en enheds private n\u00f8gle kan v\u00e6re l\u00e6kket, fjern dens peer-blok og udsted et nyt n\u00f8glepar. Tilbagekaldelse virker \u00f8jeblikkeligt.<\/li>\n<li><strong>Tag backup af wg0.conf.<\/strong> Gem en krypteret kopi af serverkonfigurationen, s\u00e5 du hurtigt kan genskabe ops\u00e6tningen p\u00e5 en ny server.<\/li>\n<li><strong>Overv\u00e5g h\u00e5ndtryk.<\/strong> Et hurtigt <code>wg show<\/code> afsl\u00f8rer ukendte peers eller forbindelser fra uventede endpoints.<\/li>\n<li><strong>Begr\u00e6ns adgang.<\/strong> Brug <code>AllowedIPs<\/code> stramt, s\u00e5 hver klient kun kan n\u00e5 det, den faktisk har brug for, frem for hele netv\u00e6rket.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Med disse vaner k\u00f8rer en selv-hostet <strong>WireGuard VPN<\/strong> sikkert i lang tid. Den m\u00e5nedlige vedligeholdelse er reelt blot at lade de automatiske opdateringer k\u00f8re og kaste et blik p\u00e5 <code>wg show<\/code> en gang imellem. Det er en af de mest robuste sikkerhedsinvesteringer, en privat bruger eller et lille team kan lave.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wireguard-vs-andre\">WireGuard mod OpenVPN og IPsec<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hvorfor v\u00e6lge <strong>WireGuard<\/strong> frem for de etablerede alternativer? Tabellen sammenfatter de praktiske forskelle, der betyder noget for en selv-hostet ops\u00e6tning.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Egenskab<\/th><th>WireGuard<\/th><th>OpenVPN<\/th><th>IPsec\/IKEv2<\/th><\/tr><\/thead><tbody>\n<tr><td>Kodebase<\/td><td>~4.000 linjer<\/td><td>Titusindvis af linjer<\/td><td>Meget stor, flere komponenter<\/td><\/tr>\n<tr><td>Placering<\/td><td>Linux-kernen (5.6+)<\/td><td>Brugerland<\/td><td>Kerne plus d\u00e6moner<\/td><\/tr>\n<tr><td>Kryptografi<\/td><td>Fast, moderne s\u00e6t<\/td><td>Konfigurerbar<\/td><td>Konfigurerbar<\/td><\/tr>\n<tr><td>Ops\u00e6tningstid<\/td><td>Cirka 20 minutter<\/td><td>L\u00e6ngere, flere filer<\/td><td>Kompleks<\/td><\/tr>\n<tr><td>Transport<\/td><td>UDP<\/td><td>UDP eller TCP<\/td><td>UDP\/ESP<\/td><\/tr>\n<tr><td>Roaming<\/td><td>Indbygget, s\u00f8ml\u00f8st<\/td><td>Begr\u00e6nset<\/td><td>God med MOBIKE<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">OpenVPN har stadig en plads, hvor man skal igennem aggressive firewalls, fordi det kan k\u00f8re over TCP-port 443 og ligne almindelig HTTPS-trafik. IPsec er dybt integreret i virksomhedsudstyr. Men til en personlig eller lille teamops\u00e6tning vinder WireGuard p\u00e5 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\u00e5 galt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Ofte stillede sp\u00f8rgsm\u00e5l<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"er-wireguard-sikkert-nok-til-daglig-brug\">Er WireGuard sikkert nok til daglig brug?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. WireGuard bruger moderne, velgennemg\u00e5ede primitiver som Curve25519, ChaCha20 og Poly1305, og protokollens lille kodebase g\u00f8r den lettere at revidere end \u00e6ldre VPN'er. Den er en del af mainline Linux-kernen, hvilket betyder bred granskning fra kerneudviklere.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvilken-port-bruger-wireguard\">Hvilken port bruger WireGuard?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Standardporten er UDP 51820. Du kan \u00e6ndre den med <code>ListenPort<\/code> i serverens konfiguration og <code>Endpoint<\/code> i klientens, hvis du vil bruge en anden port for at undg\u00e5 blokering.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jeg-koere-wireguard-paa-windows-og-macos\">Kan jeg k\u00f8re WireGuard p\u00e5 Windows og macOS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Der findes officielle WireGuard-apps til Windows, macOS, Android og iOS. Klientkonfigurationen er den samme uanset platform, og p\u00e5 mobil kan du importere den via QR-kode.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-koster-det-at-hoste-sin-egen-wireguard-vpn\">Hvad koster det at hoste sin egen WireGuard VPN?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En lille virtuel server, der er rigeligt til form\u00e5let, koster typisk 25 til 50 kroner om m\u00e5neden hos en europ\u00e6isk udbyder. Selve WireGuard-softwaren er gratis og open source.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skjuler-en-selv-hostet-vpn-min-identitet\">Skjuler en selv-hostet VPN min identitet?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Den krypterer din trafik og skjuler din rigtige IP for de sider, du bes\u00f8ger, men din serverudbyder kender dig. Hvis m\u00e5let er anonymitet over for selve udbyderen, er en revideret no-log-tjeneste eller Tor en bedre tilgang.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvorfor-faar-jeg-haandtryk-men-ingen-internetadgang\">Hvorfor f\u00e5r jeg h\u00e5ndtryk, men ingen internetadgang?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Det skyldes n\u00e6sten altid manglende IP-forwarding eller en forkert NAT-regel. Bekr\u00e6ft, at <code>net.ipv4.ip_forward<\/code> er 1, og at masquerade-reglen peger p\u00e5 serverens rigtige WAN-gr\u00e6nseflade.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvor-mange-klienter-kan-en-server-haandtere\">Hvor mange klienter kan en server h\u00e5ndtere?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Med et <code>\/24<\/code>-subnet har du plads til 253 klient-IP'er. Ydelsesm\u00e6ssigt kan selv en lille server betjene en husstand eller et lille team uden problemer, fordi WireGuard k\u00f8rer effektivt i kernen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"related\">Relateret indhold<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/dk\/https-og-tls\/\">HTTPS og TLS: s\u00e5dan beskyttes din forbindelse<\/a><\/li>\n<li><a href=\"\/dk\/ssl-tls-certifikat-certbot-2026\/\">Gratis SSL\/TLS-certifikat med Certbot<\/a><\/li>\n<li><a href=\"\/dk\/kodeordssikkerhed\/\">Kodeordssikkerhed: l\u00e6ngde, hashing og 2FA<\/a><\/li>\n<li><a href=\"\/dk\/digitale-signaturer\/\">Digitale signaturer: hvordan n\u00f8gler skaber tillid<\/a><\/li>\n<li><a href=\"\/dk\/datalaek\/\">Datal\u00e6k: s\u00e5dan opst\u00e5r de, og s\u00e5dan beskytter du dig<\/a><\/li>\n<li><a href=\"\/dk\/phishing\/\">Phishing og social engineering: kend fors\u00f8get<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kilder\">Eksterne kilder<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.wireguard.com\/\" target=\"_blank\" rel=\"noopener\">WireGuard officielt websted<\/a><\/li>\n<li><a href=\"https:\/\/www.wireguard.com\/quickstart\/\" target=\"_blank\" rel=\"noopener\">WireGuard Quick Start<\/a><\/li>\n<li><a href=\"https:\/\/www.wireguard.com\/protocol\/\" target=\"_blank\" rel=\"noopener\">WireGuard protokol og kryptografi<\/a><\/li>\n<li><a href=\"https:\/\/man7.org\/linux\/man-pages\/man8\/wg.8.html\" target=\"_blank\" rel=\"noopener\">wg(8) Linux manualside<\/a><\/li>\n<li><a href=\"https:\/\/git.zx2c4.com\/wireguard-tools\/about\/\" target=\"_blank\" rel=\"noopener\">wireguard-tools kildekode<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Sidst opdateret juni 2026. Denne guide er testet p\u00e5 Ubuntu 24.04 LTS og Debian 12. Kommandoer kan kr\u00e6ve mindre tilpasning afh\u00e6ngigt af din udbyder og netv\u00e6rksops\u00e6tning.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En VPN du selv hoster, giver dig en krypteret tunnel mellem din telefon, din b\u00e6rbare og en server du selv kontrollerer. Ingen tredjepart logger din trafik, og du betaler ikke\u2026<\/p>\n","protected":false},"author":8,"featured_media":56,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-55","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-privacy"],"_links":{"self":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/comments?post=55"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/55\/revisions\/57"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media\/56"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media?parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/categories?post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/tags?post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}