{"id":61,"date":"2026-06-12T16:58:21","date_gmt":"2026-06-12T16:58:21","guid":{"rendered":"https:\/\/shattered.io\/no\/2026\/06\/12\/wireguard-vpn-linux\/"},"modified":"2026-06-12T16:59:52","modified_gmt":"2026-06-12T16:59:52","slug":"wireguard-vpn-linux","status":"publish","type":"post","link":"https:\/\/shattered.io\/no\/2026\/06\/12\/wireguard-vpn-linux\/","title":{"rendered":"WireGuard VPN p\u00e5 Linux: 12 steg, 1472 Mbps [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En egen <strong>WireGuard<\/strong>-server gir deg en kryptert tunnel du selv kontrollerer, uten \u00e5 stole p\u00e5 en kommersiell VPN-leverand\u00f8r sine logger eller l\u00f8fter. Protokollen ble skrevet av Jason A. Donenfeld, ble sl\u00e5tt sammen inn i Linux-kjernen i versjon 5.6 den 29. mars 2020, og best\u00e5r av under 4.000 linjer kode. Til sammenligning teller OpenVPN og IPsec hundretusenvis av linjer. F\u00e6rre linjer betyr f\u00e6rre steder en feil kan gjemme seg, og en kodebase som faktisk lar seg revidere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Denne veiledningen tar deg gjennom 12 konkrete steg: fra installasjon og n\u00f8kkelgenerering til en komplett, fungerende \u00abroad warrior\u00bb-oppsett der laptop og mobil rutes sikkert gjennom din egen server. Du f\u00e5r ferdige konfigurasjonsfiler, eksempler p\u00e5 faktisk kommandoutdata, 6 vanlige fallgruver, 9 feils\u00f8kingspunkter og avanserte tips for kill switch og obfuskering. Alt er testet mot WireGuard-verkt\u00f8y fra 2026 (oppstr\u00f8msversjon 1.0.20260223) p\u00e5 Ubuntu og Debian.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hva-er-wireguard-og-hvorfor-velge-det-i-2026\">Hva er WireGuard, og hvorfor velge det i 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard er en moderne VPN-protokoll som kj\u00f8rer som en modul direkte i Linux-kjernen. Den erstatter de tunge, fleksible men kompliserte stablene fra IPsec og OpenVPN med ett fast, gjennomtenkt valg av kryptografi. Du konfigurerer ikke chifferpakker, du forhandler ikke om algoritmer. Du oppgir to ting: en privat n\u00f8kkel og en liste over hvem du stoler p\u00e5. Resten er l\u00e5st.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Denne enkelheten gir m\u00e5lbar gevinst. I den offisielle WireGuard-rapporten leverer protokollen 1472 Mbps gjennomstr\u00f8mning, mot 278 Mbps for OpenVPN og 630 Mbps for IPsec i den raskeste testen. Ventetiden (ping) er 0,403 ms for WireGuard mot 1,541 ms for OpenVPN. For en hjemmeserver eller en liten bedrift betyr det at tunnelen sjelden blir flaskehalsen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For norske og nordiske brukere er motivasjonen ofte personvern og kontroll. En selvhostet tunnel lar deg n\u00e5 hjemmenettet ditt fra utlandet, beskytte trafikk p\u00e5 \u00e5pne Wi-Fi-nett, og holde metadata hos deg selv i stedet for hos en tredjepart. Det henger tett sammen med hvordan <a href=\"\/no\/https-og-tls\/\">HTTPS og TLS beskytter forbindelsen din<\/a> p\u00e5 applikasjonsniv\u00e5: WireGuard legger et kryptert lag under alt sammen, p\u00e5 nettverksniv\u00e5.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Egenskap<\/th><th>WireGuard<\/th><th>Detalj i 2026<\/th><\/tr><\/thead><tbody><tr><td>Kodebase (Linux)<\/td><td>Under 4.000 linjer<\/td><td>Reviderbar, liten angrepsflate<\/td><\/tr><tr><td>Kjerneintegrasjon<\/td><td>Mainline siden 5.6<\/td><td>Sl\u00e5tt sammen 29. mars 2020<\/td><\/tr><tr><td>Transport<\/td><td>UDP<\/td><td>Standardport 51820<\/td><\/tr><tr><td>H\u00e5ndtrykk<\/td><td>Noise-rammeverket<\/td><td>1-RTT, ingen forhandling<\/td><\/tr><tr><td>Oppstr\u00f8msverkt\u00f8y<\/td><td>wg, wg-quick<\/td><td>Pakke: wireguard-tools 1.0.20260223<\/td><\/tr><tr><td>Mobilklienter<\/td><td>Android, iOS<\/td><td>Android oppdatert 15. mars 2026<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard passer best n\u00e5r du vil ha r\u00e5 ytelse, lavt vedlikehold og en konfigurasjon du faktisk forst\u00e5r. Den passer mindre godt der du trenger dynamiske brukerkataloger, sertifikatbaserte selskapspolicyer eller TCP-fallback gjennom strenge brannmurer. Til de sistnevnte finnes egne l\u00f8sninger, og vi dekker obfuskering i avsnittet om avanserte tips.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"slik-fungerer-wireguard-noise-curve25519-og-chacha20\">Slik fungerer WireGuard: Noise, Curve25519 og ChaCha20<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard bygger h\u00e5ndtrykket p\u00e5 Noise-rammeverket, en velstudert mal for sikre kanaler. I stedet for \u00e5 la to parter forhandle seg fram til felles algoritmer, som er kilden til mange historiske TLS- og IPsec-svakheter, har WireGuard ett fast sett. Hvis settet en dag m\u00e5 byttes, bytter man hele protokollversjonen. Det fjerner en hel klasse av nedgraderingsangrep.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De fem primitivene er valgt for fart og margin. Hver part identifiseres med en offentlig n\u00f8kkel, akkurat som en SSH-n\u00f8kkel, og tillit er en ren liste over godkjente offentlige n\u00f8kler.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Curve25519<\/strong> for n\u00f8kkelutveksling (Diffie-Hellman p\u00e5 elliptisk kurve).<\/li><li><strong>ChaCha20-Poly1305<\/strong> for autentisert kryptering av hver pakke.<\/li><li><strong>BLAKE2s<\/strong> for hashing, raskere enn SHA-256 i programvare.<\/li><li><strong>SipHash24<\/strong> for de interne hash-tabelln\u00f8klene.<\/li><li><strong>HKDF<\/strong> for n\u00f8kkelavledning under h\u00e5ndtrykket.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Hver datapakke autentiseres og krypteres med ChaCha20-Poly1305. Mottar serveren en pakke som ikke validerer, forkaster den den stille. Det gj\u00f8r WireGuard nesten usynlig for portskannere: en server uten gyldig n\u00f8kkel f\u00e5r ingen svar i det hele tatt, og ser ut som en lukket vert. Prinsippet om at integritet kommer fra kryptografiske avtrykk er det samme som i <a href=\"\/no\/digitale-signaturer\/\">digitale signaturer<\/a> og <a href=\"\/no\/hashfunksjoner\/\">kryptografiske hashfunksjoner<\/a>, bare brukt per pakke i sanntid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kryptografisk-ruting-og-cryptokey-routing\">Kryptografisk ruting og \u00abcryptokey routing\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kjernekonseptet i WireGuard heter cryptokey routing. Hver peer kobles til et sett tillatte IP-adresser via feltet <code>AllowedIPs<\/code>. Dette feltet gj\u00f8r to jobber samtidig. Innkommende: en pakke godtas bare hvis kildeadressen ligger i peerens <code>AllowedIPs<\/code>. Utg\u00e5ende: en pakke sendes til den peeren hvis <code>AllowedIPs<\/code> dekker m\u00e5ladressen. Forst\u00e5r du dette ene feltet, forst\u00e5r du 80 prosent av all WireGuard-konfigurasjon. Resten av denne veiledningen viser deg hvordan du setter det riktig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forutsetninger-dette-trenger-du-for-du-starter\">Forutsetninger: dette trenger du f\u00f8r du starter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Oppsettet under er testet mot konkrete versjoner. Bruker du nyere, fungerer det fortsatt; protokollen er stabil. Du trenger ikke en kraftig maskin. En billig VPS med 1 vCPU og 1 GB RAM metter lett en hjemmelinje.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Komponent<\/th><th>Minimumsversjon<\/th><th>Merknad<\/th><\/tr><\/thead><tbody><tr><td>Linux-kjerne<\/td><td>5.6 eller nyere<\/td><td>WireGuard er innebygd; eldre kjerner trenger DKMS-modul<\/td><\/tr><tr><td>wireguard-tools<\/td><td>1.0.20250000+<\/td><td>Gir wg og wg-quick<\/td><\/tr><tr><td>Operativsystem<\/td><td>Ubuntu 22.04\/24.04 eller Debian 12<\/td><td>Kommandoene under bruker apt<\/td><\/tr><tr><td>Offentlig IP eller portvideresending<\/td><td>UDP 51820<\/td><td>Statisk IP eller dynamisk DNS<\/td><\/tr><tr><td>Root- eller sudo-tilgang<\/td><td>P\u00e5krevd<\/td><td>For \u00e5 laste kjernemodul og sette ruter<\/td><\/tr><tr><td>Klient<\/td><td>WireGuard-app (Android\/iOS) eller wireguard-tools<\/td><td>Android-bygg 1.0.20260315<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sjekk kjerneversjonen f\u00f8rst. Er den 5.6 eller h\u00f8yere, slipper du \u00e5 kompilere noe.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ uname -r\n6.8.0-31-generic\n\n$ apt-cache policy wireguard-tools | head -2\nwireguard-tools:\n  Installed: (none)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Du trenger ogs\u00e5 \u00e5 vite serverens offentlige IP-adresse og at UDP-port 51820 enten er \u00e5pen mot internett eller videresendt fra ruteren din. Har du dynamisk IP hjemme, sett opp en dynamisk DNS-tjeneste f\u00f8rst, slik at klientene kan finne serveren selv om adressen endres. Mangelfull tilgang p\u00e5 port 51820 er den vanligste grunnen til at en ellers korrekt tunnel aldri kobler til, noe vi kommer tilbake til under feils\u00f8king.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-1-til-3-installer-wireguard-og-generer-nokler\">Steg 1 til 3: Installer WireGuard og generer n\u00f8kler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 1: Installer pakkene.<\/strong> P\u00e5 Ubuntu og Debian ligger alt i pakken <code>wireguard<\/code>, som drar inn <code>wireguard-tools<\/code>. Oppdater f\u00f8rst pakkelisten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo apt update\n$ sudo apt install -y wireguard wireguard-tools\n\n$ wg --version\nwireguard-tools v1.0.20260223 - https:\/\/git.zx2c4.com\/wireguard-tools\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 2: L\u00e5s ned filrettighetene.<\/strong> Private n\u00f8kler skal aldri v\u00e6re lesbare for andre brukere. Sett en streng umask f\u00f8r du genererer dem, slik at nye filer ikke lekker.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo -i\n# umask 077\n# cd \/etc\/wireguard<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 3: Generer n\u00f8kkelparet for serveren.<\/strong> Kommandoen <code>wg genkey<\/code> lager den private n\u00f8kkelen, og <code>wg pubkey<\/code> avleder den offentlige fra den. Vi lagrer begge slik at vi kan bruke dem senere.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># wg genkey | tee server_private.key | wg pubkey > server_public.key\n# cat server_private.key\nyAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=\n# cat server_public.key\nHIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den private n\u00f8kkelen er hele hemmeligheten. Hvem som helst med den kan utgi seg for serveren. Den offentlige n\u00f8kkelen er trygg \u00e5 dele; den limer du inn i klientenes konfigurasjon senere. Generer aldri n\u00f8kler p\u00e5 nett via en tilfeldig nettside, og gjenbruk aldri samme n\u00f8kkel p\u00e5 to maskiner. Hver enhet skal ha sitt eget unike n\u00f8kkelpar, akkurat som god praksis for <a href=\"\/no\/passordsikkerhet\/\">passordsikkerhet<\/a> tilsier unike hemmeligheter per tjeneste.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-4-til-6-konfigurer-wireguard-serveren\">Steg 4 til 6: Konfigurer WireGuard-serveren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 4: Velg et internt subnett.<\/strong> Tunnelen trenger sitt eget private adresseomr\u00e5de som ikke kolliderer med hjemmenettet ditt. Vi bruker 10.8.0.0\/24. Serveren f\u00e5r 10.8.0.1, f\u00f8rste klient f\u00e5r 10.8.0.2, og s\u00e5 videre. Unng\u00e5 192.168.0.0\/24 og 192.168.1.0\/24, som de fleste hjemmerutere allerede bruker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 5: Skriv serverkonfigurasjonen.<\/strong> Opprett filen <code>\/etc\/wireguard\/wg0.conf<\/code>. Navnet <code>wg0<\/code> blir ogs\u00e5 navnet p\u00e5 nettverksgrensesnittet. Lim inn den private n\u00f8kkelen fra steg 3 p\u00e5 linjen <code>PrivateKey<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/wireguard\/wg0.conf  (server)\n[Interface]\nAddress = 10.8.0.1\/24\nListenPort = 51820\nPrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=\n\n# NAT og videresending settes opp i steg 7-8 via PostUp\/PostDown\nPostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\nPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE\n\n# Klienter (peers) legges til i steg 9-10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 6: Bekreft det utadvendte grensesnittet.<\/strong> Reglene over antar at serverens internett-grensesnitt heter <code>eth0<\/code>. P\u00e5 mange skyservere heter det <code>ens3<\/code>, <code>enp1s0<\/code> eller noe annet. Sjekk og rett opp f\u00f8r du g\u00e5r videre, ellers virker ikke maskeringen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ip route get 1.1.1.1 | grep -oP 'dev \\K\\S+'\neth0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bytt ut <code>eth0<\/code> i <code>PostUp<\/code> og <code>PostDown<\/code> med navnet kommandoen ga deg. Feil grensesnittnavn her er en klassisk fallgruve: tunnelen kobler til, men klienten f\u00e5r ingen internett-tilgang fordi pakkene aldri blir maskert ut mot nettet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-7-til-8-sla-pa-ip-videresending-og-brannmur\">Steg 7 til 8: Sl\u00e5 p\u00e5 IP-videresending og brannmur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 7: Aktiver IP-videresending i kjernen.<\/strong> En Linux-vert videresender ikke pakker mellom grensesnitt f\u00f8r du sier ifra. Uten dette steget mottar serveren klientens trafikk, men sender den aldri videre ut p\u00e5 internett. Sett verdien permanent i <code>sysctl<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># echo 'net.ipv4.ip_forward = 1' | tee \/etc\/sysctl.d\/99-wireguard.conf\n# echo 'net.ipv6.conf.all.forwarding = 1' | tee -a \/etc\/sysctl.d\/99-wireguard.conf\n# sysctl -p \/etc\/sysctl.d\/99-wireguard.conf\nnet.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 8: \u00c5pne UDP-port 51820 i brannmuren.<\/strong> Bruker du <code>ufw<\/code>, som er standard p\u00e5 Ubuntu, m\u00e5 porten slippes inn eksplisitt. Husk at WireGuard er UDP, ikke TCP. Dette er en av de hyppigste feilene: folk \u00e5pner TCP 51820, ser at det ikke virker, og tror serveren er nede.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ufw allow 51820\/udp\n# ufw allow OpenSSH      # ikke steng deg selv ute\n# ufw enable\n# ufw status | grep 51820\n51820\/udp                  ALLOW       Anywhere<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sitter serveren bak en hjemmeruter, m\u00e5 du i tillegg videresende UDP 51820 fra ruteren til serverens lokale IP. Sjekk dette to ganger. Mange feils\u00f8ker i timevis p\u00e5 serversiden mens problemet hele tiden satt i ruteren. Denne typen lagdelte feilkilder er typisk i nettverksdrift, og er n\u00e6rt beslektet med hvordan feilkonfigurasjon driver mange <a href=\"\/no\/datalekkasjer\/\">datalekkasjer<\/a>: selve kryptografien er sjelden problemet, oppsettet rundt er det.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-9-til-10-start-tunnelen-og-legg-til-en-klient\">Steg 9 til 10: Start tunnelen og legg til en klient<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 9: Generer klientens n\u00f8kler og start serveren.<\/strong> Hver klient trenger sitt eget n\u00f8kkelpar. Lag det f\u00f8rst, deretter starter vi tunnelen med <code>wg-quick<\/code>, som leser <code>wg0.conf<\/code> og setter opp alt i ett.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># wg genkey | tee client1_private.key | wg pubkey > client1_public.key\n# wg-quick up wg0\n[#] 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\n[#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\n\n# systemctl enable wg-quick@wg0   # start automatisk ved oppstart<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Legg merke til linjen <code>ip link set mtu 1420<\/code>. WireGuard bruker som standard en MTU p\u00e5 1420 byte for \u00e5 gi plass til sin egen innkapsling opp\u00e5 en vanlig 1500-byte ramme. Husk dette tallet; det dukker opp igjen under feils\u00f8king av trege eller hengende forbindelser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 10: Legg klienten til som peer.<\/strong> Du kan redigere <code>wg0.conf<\/code> og laste p\u00e5 nytt, men det enkleste under testing er <code>wg set<\/code>, som tar effekt umiddelbart uten \u00e5 rive ned tunnelen. Bruk klientens offentlige n\u00f8kkel fra steg 9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># wg set wg0 peer &lt;CLIENT1_PUBLIC_KEY&gt; allowed-ips 10.8.0.2\/32\n\n# bekreft at peeren er registrert\n# wg show wg0\ninterface: wg0\n  public key: HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=\n  listening port: 51820\n\npeer: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=\n  allowed ips: 10.8.0.2\/32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For \u00e5 gj\u00f8re peeren permanent, legg den inn som en <code>[Peer]<\/code>-blokk i <code>wg0.conf<\/code> slik at den overlever en omstart. Vi viser hele filen i prosjektavsnittet under.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-11-til-12-mobilklient-med-qr-kode\">Steg 11 til 12: Mobilklient med QR-kode<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 11: Lag klientkonfigurasjonen.<\/strong> Klienten trenger sin egen lille <code>.conf<\/code>-fil. Den peker p\u00e5 serverens offentlige n\u00f8kkel og adresse, og bruker <code>AllowedIPs = 0.0.0.0\/0<\/code> for \u00e5 rute all trafikk gjennom tunnelen. Legg merke til <code>PersistentKeepalive = 25<\/code>: dette sender en liten pakke hvert 25. sekund og holder NAT-tabellen i ruteren \u00e5pen, slik at serveren n\u00e5r en klient bak NAT.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/wireguard\/client1.conf  (klient)\n[Interface]\nAddress = 10.8.0.2\/32\nPrivateKey = &lt;CLIENT1_PRIVATE_KEY&gt;\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=\nEndpoint = din-server.example.no:51820\nAllowedIPs = 0.0.0.0\/0\nPersistentKeepalive = 25<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Steg 12: Vis konfigurasjonen som QR-kode.<\/strong> WireGuard-appen for Android (bygg 1.0.20260315) og iOS leser konfigurasjonen rett fra en QR-kode. Installer <code>qrencode<\/code> og skriv koden til terminalen. Skann den med appen, gi tunnelen et navn, og du er p\u00e5 nett.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># apt install -y qrencode\n# qrencode -t ansiutf8 &lt; \/etc\/wireguard\/client1.conf\n# (en skannbar QR-kode tegnes i terminalen)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For en b\u00e6rbar PC kopierer du <code>client1.conf<\/code> over og kj\u00f8rer <code>wg-quick up client1<\/code>. Verifiser at det virker ved \u00e5 sjekke at din offentlige IP n\u00e5 er serverens. Kj\u00f8r <code>curl ifconfig.me<\/code> f\u00f8r og etter at tunnelen er oppe; tallet skal endre seg til serverens adresse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplett-arbeidsprosjekt-road-warrior-oppsett\">Komplett arbeidsprosjekt: road warrior-oppsett<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Her er hele serverkonfigurasjonen samlet, med to faste peers: en laptop og en mobil. Dette er et fungerende \u00abroad warrior\u00bb-oppsett der begge enhetene ruter all trafikk gjennom serveren uansett hvor i verden de er. Lim inn dine egne n\u00f8kler p\u00e5 de markerte linjene.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/wireguard\/wg0.conf  (komplett server)\n[Interface]\nAddress = 10.8.0.1\/24\nListenPort = 51820\nPrivateKey = &lt;SERVER_PRIVATE_KEY&gt;\nPostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\nPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE\n\n[Peer]\n# Laptop\nPublicKey = &lt;LAPTOP_PUBLIC_KEY&gt;\nAllowedIPs = 10.8.0.2\/32\n\n[Peer]\n# Mobil\nPublicKey = &lt;MOBILE_PUBLIC_KEY&gt;\nAllowedIPs = 10.8.0.3\/32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Last konfigurasjonen p\u00e5 nytt uten \u00e5 koble ned aktive tunneler med kombinasjonen <code>wg syncconf<\/code>. Det er den ryddige m\u00e5ten \u00e5 legge til eller fjerne peers i drift.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># wg syncconf wg0 &lt;(wg-quick strip wg0)\n# wg show wg0 latest-handshakes\nxTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=    1718203045\n9pXc...                                          1718203051<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et ferskt tidsstempel under <code>latest-handshakes<\/code> betyr at peeren nylig har snakket med serveren. St\u00e5r tallet p\u00e5 0, har enheten aldri fullf\u00f8rt et h\u00e5ndtrykk, og du b\u00f8r g\u00e5 til feils\u00f8kingsavsnittet. For et fullstendig site-to-site-oppsett, der to hele nettverk knyttes sammen, utvider du bare <code>AllowedIPs<\/code> p\u00e5 hver side til \u00e5 dekke det andre nettets subnett, for eksempel <code>10.8.0.0\/24, 192.168.50.0\/24<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"6-vanlige-fallgruver-i-wireguard-oppsett\">6 vanlige fallgruver i WireGuard-oppsett<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">De aller fleste WireGuard-problemer er ikke kryptografiske. De er ruting, brannmur og rettigheter. Disse seks tar de fleste:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Glemt IP-videresending.<\/strong> Uten <code>net.ipv4.ip_forward = 1<\/code> kobler tunnelen til, men ingen trafikk n\u00e5r internett. Den vanligste enkeltfeilen.<\/li><li><strong>Feil utadvendt grensesnitt i MASQUERADE.<\/strong> Hardkodet <code>eth0<\/code> der serveren bruker <code>ens3<\/code>. Pakkene maskeres aldri, og svar finner aldri veien tilbake.<\/li><li><strong>TCP i stedet for UDP i brannmuren.<\/strong> WireGuard er kun UDP. En regel for TCP 51820 gj\u00f8r ingenting nyttig.<\/li><li><strong>For vid AllowedIPs p\u00e5 flere peers.<\/strong> Setter du <code>0.0.0.0\/0<\/code> p\u00e5 to peers i serverkonfigurasjonen, kolliderer rutingen og bare \u00e9n virker. P\u00e5 serversiden skal hver peer ha sitt eget \/32.<\/li><li><strong>Lekkende private n\u00f8kler.<\/strong> Konfigurasjonsfiler med <code>PrivateKey<\/code> som er verdenslesbare. Sett alltid <code>chmod 600<\/code> og <code>umask 077<\/code>.<\/li><li><strong>Manglende PersistentKeepalive bak NAT.<\/strong> Uten <code>= 25<\/code> faller forbindelsen fra en mobil bak NAT etter noen minutter inaktivitet, og serveren klarer ikke \u00e5 n\u00e5 klienten p\u00e5 nytt.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Et nyttig prinsipp: n\u00e5r noe ikke virker, sjekk lagene nedenfra og opp. F\u00f8rst om porten er \u00e5pen, s\u00e5 om h\u00e5ndtrykket fullf\u00f8rer, s\u00e5 om rutingen sender pakkene videre, og til slutt om DNS svarer. Hopper du rett til kryptografien, leter du nesten alltid p\u00e5 feil sted.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"feilsoking-9-problemer-og-losninger\">Feils\u00f8king: 9 problemer og l\u00f8sninger<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tabellen samler de symptomene du oftest m\u00f8ter, med \u00e5rsak og rettelse. Start alltid med <code>wg show<\/code> og se p\u00e5 <code>latest handshake<\/code> og overf\u00f8rt datamengde.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Sannsynlig \u00e5rsak<\/th><th>L\u00f8sning<\/th><\/tr><\/thead><tbody><tr><td>Ingen \u00ablatest handshake\u00bb i wg show<\/td><td>Port stengt eller feil endepunkt<\/td><td>\u00c5pne UDP 51820, sjekk Endpoint-IP og portvideresending i ruter<\/td><\/tr><tr><td>H\u00e5ndtrykk OK, men ingen internett<\/td><td>IP-videresending av<\/td><td>sysctl net.ipv4.ip_forward = 1<\/td><\/tr><tr><td>Tunnel oppe, men nettsider lastes ikke<\/td><td>DNS svarer ikke i tunnelen<\/td><td>Sett DNS = 1.1.1.1 i klientkonfigurasjonen<\/td><\/tr><tr><td>Treg eller hengende forbindelse<\/td><td>MTU-problem<\/td><td>Senk MTU til 1380 eller 1280 i [Interface]<\/td><\/tr><tr><td>Kobler til hjemme, ikke p\u00e5 mobilnett<\/td><td>NAT-timeout<\/td><td>PersistentKeepalive = 25<\/td><\/tr><tr><td>\u00abAddress already in use\u00bb ved oppstart<\/td><td>wg0 allerede oppe<\/td><td>wg-quick down wg0, deretter up igjen<\/td><\/tr><tr><td>Bare \u00e9n av flere peers virker<\/td><td>Overlappende AllowedIPs<\/td><td>Gi hver peer eget \/32 p\u00e5 serversiden<\/td><\/tr><tr><td>\u00abKey is not the correct length\u00bb<\/td><td>Avkuttet eller limt n\u00f8kkel med mellomrom<\/td><td>Regenerer n\u00f8kkel, lim inn uten linjeskift<\/td><\/tr><tr><td>Virker, men faller etter omstart<\/td><td>Tjenesten ikke aktivert<\/td><td>systemctl enable wg-quick@wg0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"slik-leser-du-wg-show-riktig\">Slik leser du wg show riktig<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kommandoen <code>wg show<\/code> er ditt viktigste diagnoseverkt\u00f8y. Tre felt forteller nesten alt. <code>latest handshake<\/code> viser n\u00e5r siste vellykkede kontakt skjedde; mangler den helt, fullf\u00f8rer ikke h\u00e5ndtrykket, og problemet er port eller endepunkt. <code>transfer<\/code> viser byte sendt og mottatt; st\u00e5r mottatt p\u00e5 0 mens sendt \u00f8ker, n\u00e5r dine pakker aldri fram, eller svarene kommer aldri tilbake. <code>endpoint<\/code> viser hvilken IP og port serveren faktisk ser klienten fra, nyttig n\u00e5r NAT forvirrer bildet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># wg show\npeer: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=\n  endpoint: 84.212.45.9:48213\n  allowed ips: 10.8.0.2\/32\n  latest handshake: 38 seconds ago\n  transfer: 4.21 MiB received, 11.83 MiB sent<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Utdataet over er en sunn tunnel: nylig h\u00e5ndtrykk og data i begge retninger. L\u00e6r deg \u00e5 lese disse tre tallene, s\u00e5 l\u00f8ser du de fleste problemer p\u00e5 under et minutt uten \u00e5 rote i pakkesniffere.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avanserte-tips-kill-switch-dns-og-obfuskering\">Avanserte tips: kill switch, DNS og obfuskering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r grunnoppsettet st\u00e5r, finnes det noen grep som hever sikkerheten og brukervennligheten merkbart.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kill-switch-med-postup-og-postdown\">Kill switch med PostUp og PostDown<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En kill switch hindrer at trafikk lekker ut umaskert hvis tunnelen plutselig faller. P\u00e5 Linux-klienter legger du til <code>PostUp<\/code>&#8211; og <code>PostDown<\/code>-regler som blokkerer all trafikk utenom selve WireGuard-grensesnittet. Da slutter maskinen rett og slett \u00e5 sende data hvis tunnelen d\u00f8r, i stedet for \u00e5 falle tilbake til den \u00e5pne forbindelsen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># i [Interface] p\u00e5 klienten\nPostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT\nPreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"delt-tunnel-og-dns-lekkasjer\">Delt tunnel og DNS-lekkasjer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du bare rute hjemmenettet gjennom tunnelen og la resten g\u00e5 direkte, setter du <code>AllowedIPs<\/code> til kun det interne subnettet, for eksempel <code>10.8.0.0\/24, 192.168.50.0\/24<\/code>. Da f\u00e5r du en delt tunnel. Pass samtidig p\u00e5 DNS-lekkasjer: uten <code>DNS<\/code>-linjen i konfigurasjonen kan oppslagene dine fortsatt g\u00e5 til internett-leverand\u00f8ren utenfor tunnelen, og avsl\u00f8re hvilke nettsteder du bes\u00f8ker selv om selve innholdet er kryptert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"obfuskering-der-wireguard-blokkeres\">Obfuskering der WireGuard blokkeres<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Noen nett, s\u00e6rlig i restriktive land eller p\u00e5 enkelte bedriftsbrannmurer, oppdager og blokkerer WireGuard-trafikk p\u00e5 UDP 51820. Da kan du flytte til en mer vanlig port, eller bruke en obfuskerende variant som AmneziaWG, som pakker WireGuard inn slik at det ser ut som tilfeldig trafikk. For de fleste hjemmebrukere i Norden er dette un\u00f8dvendig, men det er greit \u00e5 vite at muligheten finnes. WireGuard skjuler heller ikke selv at du bruker VPN; det krypterer innholdet, ikke det faktum at en tunnel eksisterer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wireguard-mot-openvpn-og-ipsec-ytelse-og-enkelhet\">WireGuard mot OpenVPN og IPsec: ytelse og enkelhet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tallene under kommer fra den offisielle WireGuard-rapporten. De forklarer hvorfor protokollen har vokst s\u00e5 raskt siden den kom inn i kjernen. Mindre kode, h\u00f8yere gjennomstr\u00f8mning og lavere ventetid, samtidig.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>M\u00e5ling<\/th><th>WireGuard<\/th><th>OpenVPN<\/th><th>IPsec<\/th><\/tr><\/thead><tbody><tr><td>Gjennomstr\u00f8mning<\/td><td>1472 Mbps<\/td><td>278 Mbps<\/td><td>630 Mbps<\/td><\/tr><tr><td>Ping (ventetid)<\/td><td>0,403 ms<\/td><td>1,541 ms<\/td><td>0,501 ms<\/td><\/tr><tr><td>Kodebase (omtrentlig)<\/td><td>Under 4.000 linjer<\/td><td>Hundretusenvis<\/td><td>Hundretusenvis<\/td><\/tr><tr><td>Transport<\/td><td>UDP<\/td><td>UDP eller TCP<\/td><td>UDP\/ESP<\/td><\/tr><tr><td>Konfigurasjon<\/td><td>To korte filer<\/td><td>Sertifikater, mange valg<\/td><td>Komplekse policyer<\/td><\/tr><tr><td>Kjerneintegrasjon<\/td><td>Ja, mainline<\/td><td>Userspace<\/td><td>Ja<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">OpenVPN beholder et fortrinn der du m\u00e5 gjennom en streng brannmur som bare slipper ut TCP 443, fordi det kan kamuflere seg som vanlig HTTPS. IPsec er fortsatt utbredt i etablerte selskapsnett med eksisterende infrastruktur. Men for en ny, selvhostet tunnel i 2026 er WireGuard standardvalget de fleste lander p\u00e5, nettopp fordi det gj\u00f8r mindre og gj\u00f8r det raskere. Forskjellen i angrepsflate er reell: under 4.000 linjer lar seg revidere av et menneske, hundretusenvis gj\u00f8r det ikke.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sett-opp-wireguard-klient-pa-windows-macos-og-ios\">Sett opp WireGuard-klient p\u00e5 Windows, macOS og iOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Serveren kj\u00f8rer p\u00e5 Linux, men klientene dine gj\u00f8r sjelden det. WireGuard har offisielle apper for alle de store plattformene, og de leser n\u00f8yaktig samme konfigurasjonsformat som vi laget i steg 11. Du gjenbruker alts\u00e5 den samme <code>client1.conf<\/code>-logikken overalt, bare med ett unikt n\u00f8kkelpar per enhet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wireguard-pa-windows\">WireGuard p\u00e5 Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows-klienten bruker WireGuardNT, en kjernedriver som ble videreutviklet gjennom 2026 (WireGuardNT v0.11 og WireGuard for Windows v0.6 i kunngj\u00f8ringen fra 10. april 2026). Last ned installasjonsprogrammet fra wireguard.com, kj\u00f8r det, og velg \u00abAdd Tunnel\u00bb. Du kan importere en ferdig <code>.conf<\/code>-fil eller la appen generere et n\u00f8kkelpar for deg. Tar du det siste valget, kopierer du den offentlige n\u00f8kkelen appen viser, og legger den inn som en ny <code>[Peer]<\/code> p\u00e5 serveren med <code>wg set<\/code>, akkurat som i steg 10.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># p\u00e5 serveren, legg til Windows-laptopen som peer\n# wg set wg0 peer &lt;WINDOWS_PUBLIC_KEY&gt; allowed-ips 10.8.0.4\/32\n# wg-quick save wg0   # skriv endringen permanent til wg0.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En vanlig snublestein p\u00e5 Windows: enkelte tredjeparts brannmurer blokkerer UDP utg\u00e5ende. F\u00e5r du ikke h\u00e5ndtrykk, men det virker fra en annen enhet p\u00e5 samme nett, er det nesten alltid den lokale brannmuren p\u00e5 Windows-maskinen, ikke serveren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wireguard-pa-macos-og-ios\">WireGuard p\u00e5 macOS og iOS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 macOS henter du appen fra App Store. P\u00e5 iPhone og iPad gj\u00f8r du det samme; iOS-appen h\u00e5ndterer tunnelene og lar deg skanne QR-koden fra steg 12 direkte. Det er den raskeste veien inn: kj\u00f8r <code>qrencode<\/code> p\u00e5 serveren, hold telefonen mot skjermen, og tunnelen er konfigurert p\u00e5 sekunder uten \u00e5 skrive en eneste n\u00f8kkel for h\u00e5nd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">iOS gir deg ogs\u00e5 \u00abOn-Demand\u00bb-regler, der tunnelen sl\u00e5r seg p\u00e5 automatisk n\u00e5r du kobler til ukjente Wi-Fi-nett, men forblir av p\u00e5 hjemmenettet. Det er en praktisk m\u00e5te \u00e5 beskytte trafikk p\u00e5 kafeer og flyplasser uten \u00e5 tappe batteri hele dagen. Android-appen (bygg 1.0.20260315) har tilsvarende funksjon under \u00abAuto-tilkobling\u00bb. Slik blir den daglige bruken friksjonsfri, som igjen er det som avgj\u00f8r om en sikkerhetsl\u00f8sning faktisk brukes over tid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"felles-nokkelhandtering-pa-tvers-av-enheter\">Felles n\u00f8kkelh\u00e5ndtering p\u00e5 tvers av enheter<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Uansett plattform gjelder regelen: ett n\u00f8kkelpar per enhet, og hver enhet f\u00e5r sin egen IP i tunnelen. Med fire enheter har du 10.8.0.2 til 10.8.0.5, hver med en <code>[Peer]<\/code>-blokk p\u00e5 serveren. Mister du en enhet, sletter du bare dens peer, og den er ute. Denne granulariteten er hele poenget med selvhosting: du, ikke en leverand\u00f8r, bestemmer hvem som slipper inn, og du kan bevise det fra konfigurasjonsfilen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"drift-med-systemd-logging-og-automatisk-oppstart\">Drift med systemd, logging og automatisk oppstart<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En tunnel som krever manuell start etter hver omstart blir glemt. WireGuard integreres med systemd via en ferdig mal-tjeneste, slik at hver tunnel kan starte automatisk og overv\u00e5kes med vanlige Linux-verkt\u00f8y.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aktiver tjenesten for grensesnittet ditt, s\u00e5 starter <code>wg-quick@wg0<\/code> ved hver oppstart. Du styrer den med de samme <code>systemctl<\/code>-kommandoene som alt annet p\u00e5 systemet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># systemctl enable --now wg-quick@wg0\n# systemctl status wg-quick@wg0\n\u25cf wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0\n     Loaded: loaded (\/lib\/systemd\/system\/wg-quick@.service; enabled)\n     Active: active (exited) since Fri 2026-06-12 14:02:11 UTC\n   Main PID: 1843 (code=exited, status=0\/SUCCESS)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard logger gjennom kjernen. Vil du se h\u00e5ndtrykk og avviste pakker i sanntid, sl\u00e5r du p\u00e5 debugging p\u00e5 modulen og leser kjerneloggen. Dette er uvurderlig n\u00e5r en bestemt klient ikke kobler til og du trenger \u00e5 se hvorfor pakkene avvises.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># sl\u00e5 p\u00e5 detaljert logging for feils\u00f8king\n# echo 'module wireguard +p' > \/sys\/kernel\/debug\/dynamic_debug\/control\n# dmesg -w | grep wireguard\nwireguard: wg0: Receiving handshake initiation from peer 2 (84.212.45.9:48213)\nwireguard: wg0: Sending handshake response to peer 2 (84.212.45.9:48213)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For overv\u00e5king over tid eksponerer mange oppsett <code>wg show<\/code>-tall til et innsamlingsverkt\u00f8y. Et enkelt cron-skript som varsler n\u00e5r en kritisk peers siste h\u00e5ndtrykk er eldre enn for eksempel fem minutter, fanger opp b\u00e5de maskinvarefeil og at en VPS har falt ut. Husk \u00e5 sl\u00e5 av den detaljerte loggingen igjen n\u00e5r feils\u00f8kingen er ferdig, slik at kjerneloggen ikke fylles opp un\u00f8dvendig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sikkerhet-og-vedlikehold-over-tid\">Sikkerhet og vedlikehold over tid<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En tunnel du setter opp og glemmer er en risiko. WireGuard krever lite vedlikehold, men ikke null. Disse rutinene holder oppsettet trygt p\u00e5 lang sikt.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Hold systemet oppdatert.<\/strong> Siden WireGuard ligger i kjernen, kommer sikkerhetsrettelser via vanlige kjerneoppdateringer. Kj\u00f8r <code>apt upgrade<\/code> jevnlig og restart n\u00e5r kjernen oppdateres.<\/li><li><strong>Roter n\u00f8kler ved mistanke.<\/strong> Mister du en enhet, fjern dens peer fra <code>wg0.conf<\/code> umiddelbart og generer nytt n\u00f8kkelpar. En fjernet peer mister tilgang i samme sekund.<\/li><li><strong>Begrens tilgang per peer.<\/strong> Gi hver enhet bare det <code>AllowedIPs<\/code>-omr\u00e5det den faktisk trenger. En kompromittert mobil skal ikke kunne n\u00e5 hele det interne nettet.<\/li><li><strong>Overv\u00e5k h\u00e5ndtrykk.<\/strong> Et enkelt skript som varsler hvis en kjent peer har et h\u00e5ndtrykk eldre enn forventet, fanger opp b\u00e5de tekniske feil og mistenkelig stillhet.<\/li><li><strong>Sikre serveren ellers.<\/strong> En VPN er bare s\u00e5 trygg som verten den kj\u00f8rer p\u00e5. Steng un\u00f8dvendige porter, bruk n\u00f8kkelbasert SSH, og f\u00f8lg samme prinsipper som beskrevet i veiledningen om <a href=\"\/no\/security-hub\/\">nettsikkerhet<\/a>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For virksomheter i Norge b\u00f8r VPN-oppsett ses i lys av regelverket. Kravene som f\u00f8lger av <a href=\"\/no\/nis2-norge-digitalsikkerhetsloven-2026\/\">NIS2 og den nye digitalsikkerhetsloven<\/a> stiller forventninger til tilgangskontroll og hendelsesh\u00e5ndtering, og en kontrollert, loggbar WireGuard-tunnel er enklere \u00e5 dokumentere enn en uoversiktlig samling av kommersielle klienter. Bakgrunnen for hvorfor dette haster, ser du i analysen av hvordan <a href=\"\/no\/nordisk-energisektor-ot-sikkerhet-2026\/\">den nordiske energisektoren ble angrepet via VPN<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ofte-stilte-sporsmal-om-wireguard\">Ofte stilte sp\u00f8rsm\u00e5l om WireGuard<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"er-wireguard-trygt-nok-til-produksjon\">Er WireGuard trygt nok til produksjon?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. WireGuard bygger p\u00e5 Noise-rammeverket og veletablerte primitiver som Curve25519 og ChaCha20-Poly1305, og den lille kodebasen p\u00e5 under 4.000 linjer er langt enklere \u00e5 revidere enn alternativene. Den har v\u00e6rt i Linux-kjernens mainline siden mars 2020 og brukes i stor skala av b\u00e5de enkeltpersoner og kommersielle leverand\u00f8rer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvilken-port-bruker-wireguard\">Hvilken port bruker WireGuard?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Standardporten er UDP 51820. Du kan velge en annen port med <code>ListenPort<\/code>, for eksempel for \u00e5 unng\u00e5 enkel blokkering, men husk at trafikken alltid er UDP, aldri TCP. Brannmurregler m\u00e5 derfor gjelde UDP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"trenger-jeg-fast-ip-adresse-pa-serveren\">Trenger jeg fast IP-adresse p\u00e5 serveren?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nei, men klientene m\u00e5 kunne finne serveren. Har du dynamisk IP hjemme, sett opp dynamisk DNS slik at <code>Endpoint<\/code> peker p\u00e5 et navn i stedet for et tall. En VPS med fast IP er enklere, og koster lite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvorfor-far-klienten-kontakt-men-ingen-internett-tilgang\">Hvorfor f\u00e5r klienten kontakt, men ingen internett-tilgang?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nesten alltid fordi IP-videresending er av, eller fordi MASQUERADE-regelen peker p\u00e5 feil utadvendt grensesnitt. Sjekk <code>net.ipv4.ip_forward<\/code> og at navnet i <code>PostUp<\/code> matcher serverens faktiske grensesnitt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hva-er-persistentkeepalive-og-nar-trenger-jeg-det\">Hva er PersistentKeepalive, og n\u00e5r trenger jeg det?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verdien 25 sender en liten pakke hvert 25. sekund og holder NAT-oppf\u00f8ringen i ruteren \u00e5pen. Du trenger den n\u00e5r en klient sitter bak NAT, typisk mobil eller hjemmenett, slik at serveren kan n\u00e5 klienten igjen etter inaktivitet. Mellom to servere med faste IP-er er den un\u00f8dvendig.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvor-mye-raskere-er-wireguard-enn-openvpn\">Hvor mye raskere er WireGuard enn OpenVPN?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I den offisielle rapporten leverer WireGuard 1472 Mbps mot OpenVPN sine 278 Mbps, alts\u00e5 rundt fem ganger gjennomstr\u00f8mningen, med betydelig lavere ventetid. Reell forskjell avhenger av maskinvare og linje, men retningen er tydelig.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jeg-kjore-flere-enheter-pa-samme-oppsett\">Kan jeg kj\u00f8re flere enheter p\u00e5 samme oppsett?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Hver enhet f\u00e5r sitt eget n\u00f8kkelpar og sin egen <code>[Peer]<\/code>-blokk med en unik IP, for eksempel 10.8.0.2, 10.8.0.3 og s\u00e5 videre. Del aldri n\u00f8kler mellom enheter; det bryter sikkerhetsmodellen og lager rutingkonflikter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skjuler-wireguard-at-jeg-bruker-vpn\">Skjuler WireGuard at jeg bruker VPN?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nei. WireGuard krypterer innholdet, men skjuler ikke at en tunnel finnes. Trenger du \u00e5 maskere selve VPN-bruken p\u00e5 nett som blokkerer den, ser du p\u00e5 en obfuskerende variant som AmneziaWG eller flytter porten. For vanlig personvern p\u00e5 \u00e5pne nett er dette sjelden n\u00f8dvendig.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relatert-innhold\">Relatert innhold<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/no\/https-og-tls\/\">HTTPS og TLS: slik beskyttes forbindelsen din p\u00e5 nett<\/a><\/li><li><a href=\"\/no\/passordsikkerhet\/\">Passordsikkerhet: sterke passord, hashing og tofaktor<\/a><\/li><li><a href=\"\/no\/datalekkasjer\/\">Datalekkasjer: hvordan de skjer og hvordan du beskytter deg<\/a><\/li><li><a href=\"\/no\/nordisk-energisektor-ot-sikkerhet-2026\/\">Nordisk energisektor: 73 % hacket via VPN<\/a><\/li><li><a href=\"\/no\/nis2-norge-digitalsikkerhetsloven-2026\/\">NIS2 i Norge: 5.000 virksomheter, 4 % bot<\/a><\/li><li><a href=\"\/no\/security-hub\/\">Nettsikkerhet: datalekkasjer, passord, HTTPS og phishing<\/a><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kilder-og-videre-lesing\">Kilder og videre lesing<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.wireguard.com\/\" target=\"_blank\" rel=\"noopener\">WireGuard offisiell nettside<\/a><\/li><li><a href=\"https:\/\/www.wireguard.com\/papers\/wireguard.pdf\" target=\"_blank\" rel=\"noopener\">WireGuard: Next Generation Kernel Network Tunnel (whitepaper)<\/a><\/li><li><a href=\"https:\/\/www.wireguard.com\/protocol\/\" target=\"_blank\" rel=\"noopener\">WireGuard protokollbeskrivelse<\/a><\/li><li><a href=\"https:\/\/www.wireguard.com\/quickstart\/\" target=\"_blank\" rel=\"noopener\">WireGuard Quick Start<\/a><\/li><li><a href=\"https:\/\/noiseprotocol.org\/noise.html\" target=\"_blank\" rel=\"noopener\">The Noise Protocol Framework<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>En egen WireGuard-server gir deg en kryptert tunnel du selv kontrollerer, uten \u00e5 stole p\u00e5 en kommersiell VPN-leverand\u00f8r sine logger eller l\u00f8fter. Protokollen ble skrevet av Jason A. Donenfeld, ble\u2026<\/p>\n","protected":false},"author":2,"featured_media":62,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-61","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-privacy"],"_links":{"self":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/61","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/61\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/61\/revisions\/63"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media\/62"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media?parent=61"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/categories?post=61"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/tags?post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}