{"id":54,"date":"2026-06-12T16:46:26","date_gmt":"2026-06-12T16:46:26","guid":{"rendered":"https:\/\/shattered.io\/se\/2026\/06\/12\/wireguard-vpn-egen-server\/"},"modified":"2026-06-12T16:47:52","modified_gmt":"2026-06-12T16:47:52","slug":"wireguard-vpn-egen-server","status":"publish","type":"post","link":"https:\/\/shattered.io\/se\/2026\/06\/12\/wireguard-vpn-egen-server\/","title":{"rendered":"WireGuard VPN: egen server i 12 steg, 30 min [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En egen VPN-server ger dig krypterad trafik utan att betala en m\u00e5nadsavgift till en leverant\u00f6r du m\u00e5ste lita p\u00e5. <strong>WireGuard<\/strong> har p\u00e5 n\u00e5gra \u00e5r g\u00e5tt fr\u00e5n experiment till standarden f\u00f6r moderna VPN-tunnlar, och sedan Linux-k\u00e4rna 5.6 ligger koden direkt i k\u00e4rnan. I den h\u00e4r guiden bygger du en komplett, fungerande WireGuard-server p\u00e5 Ubuntu 24.04 LTS och kopplar in b\u00e5de en mobil och en b\u00e4rbar dator. R\u00e4kna med cirka 30 minuter fr\u00e5n tom server till krypterad tunnel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Du beh\u00f6ver inga f\u00f6rkunskaper i kryptografi. Vi g\u00e5r igenom varje kommando, visar exakt vad utdata ska se ut som, och listar de fallgropar som stoppar de flesta nyb\u00f6rjare (brandv\u00e4gg, IP-forwarding och MTU). I slutet har du en sj\u00e4lvhostad VPN du sj\u00e4lv kontrollerar, plus en fels\u00f6kningstabell och svar p\u00e5 de vanligaste fr\u00e5gorna.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vad-ar-wireguard\">Vad \u00e4r WireGuard och varf\u00f6r v\u00e4lja det 2026?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard \u00e4r ett protokoll f\u00f6r krypterade VPN-tunnlar, skapat av Jason Donenfeld och numera en del av mainline Linux-k\u00e4rnan sedan version 5.6. Tanken bakom projektet \u00e4r radikal enkelhet. D\u00e4r OpenVPN och IPsec best\u00e5r av hundratusentals rader kod, ryms WireGuards k\u00e4rnimplementation i n\u00e5gra tusen rader. En liten kodbas betyder f\u00e4rre buggar, snabbare granskning och en mindre attackyta. Red Hat och andra leverant\u00f6rer pekar just p\u00e5 den lilla kodbasen som ett av de starkaste s\u00e4kerhetsargumenten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6r dig som anv\u00e4ndare m\u00e4rks skillnaden p\u00e5 tre s\u00e4tt. Tunneln startar n\u00e4stan omedelbart, eftersom det inte finns n\u00e5gon tung handskakning som i TLS-baserade VPN. Den fungerar s\u00f6ml\u00f6st \u00f6ver n\u00e4tbyten, s\u00e5 din mobil beh\u00e5ller anslutningen n\u00e4r den hoppar mellan wifi och 5G. Och prestandan \u00e4r h\u00f6g, eftersom krypteringen sker i k\u00e4rnan utan dyra kopieringar mellan anv\u00e4ndarrymd och k\u00e4rna. WireGuard har d\u00e4rf\u00f6r blivit grunden under m\u00e5nga kommersiella VPN-appar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Att hosta din egen WireGuard-server ger f\u00f6rdelar som inget abonnemang matchar. Du vet exakt vem som har tillg\u00e5ng till loggarna (du sj\u00e4lv), du kan n\u00e5 hemn\u00e4tverkets enheter p\u00e5 distans, och du slipper dela en IP-adress med tusentals andra. Nackdelen \u00e4r att du sj\u00e4lv ansvarar f\u00f6r att h\u00e5lla servern uppdaterad och konfigurationen t\u00e4t. Den h\u00e4r guiden ger dig en s\u00e4ker grundkonfiguration som du kan bygga vidare p\u00e5. Vill du s\u00e4tta in VPN i ett st\u00f6rre s\u00e4kerhetsperspektiv, l\u00e4s v\u00e5r bevakning av <a href=\"\/se\/2026\/06\/11\/cyberattacker-sverige-2026\/\">cyberattacker mot Sverige<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forkunskaper\">F\u00f6rkunskaper och systemkrav<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Innan du b\u00f6rjar beh\u00f6ver du en handfull saker p\u00e5 plats. Tutorialen \u00e4r skriven f\u00f6r Ubuntu 24.04 LTS, men kommandona fungerar n\u00e4stan of\u00f6r\u00e4ndrat p\u00e5 Debian 12 och nyare. Det viktiga \u00e4r att k\u00e4rnan \u00e4r 5.6 eller senare, vilket alla aktuella distributioner uppfyller. Du beh\u00f6ver ocks\u00e5 root-\u00e5tkomst eller en anv\u00e4ndare med sudo-r\u00e4ttigheter.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Komponent<\/th><th>Version \/ krav<\/th><th>Kommentar<\/th><\/tr><\/thead><tbody><tr><td>Server-OS<\/td><td>Ubuntu 24.04 LTS<\/td><td>Debian 12+ fungerar likadant<\/td><\/tr><tr><td>Linux-k\u00e4rna<\/td><td>5.6 eller senare<\/td><td>WireGuard ligger i mainline-k\u00e4rnan<\/td><\/tr><tr><td>Paket<\/td><td>wireguard-tools<\/td><td>Ger kommandona wg och wg-quick<\/td><\/tr><tr><td>Publik IP<\/td><td>Statisk eller DDNS<\/td><td>VPS, hemserver med port\u00f6ppning eller dynamisk DNS<\/td><\/tr><tr><td>\u00d6ppen port<\/td><td>UDP 51820<\/td><td>Standardport, g\u00e5r att byta<\/td><\/tr><tr><td>\u00c5tkomst<\/td><td>sudo eller root<\/td><td>Kr\u00e4vs f\u00f6r k\u00e4rnkonfiguration<\/td><\/tr><tr><td>Klient<\/td><td>iOS, Android, Windows, macOS, Linux<\/td><td>Officiella appar finns<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En billig VPS hos valfri molnleverant\u00f6r r\u00e4cker gott. Du kan ocks\u00e5 k\u00f6ra servern p\u00e5 en Raspberry Pi eller en gammal dator hemma, men d\u00e5 m\u00e5ste du \u00f6ppna UDP-port 51820 i din router och helst s\u00e4tta upp dynamisk DNS eftersom hemmaabonnemang s\u00e4llan har statisk IP. Har du redan l\u00e4st v\u00e5r guide om <a href=\"\/se\/2026\/06\/10\/https-och-tls\/\">HTTPS och TLS<\/a> k\u00e4nner du igen t\u00e4nket: r\u00e4tt port \u00f6ppen, r\u00e4tt nycklar p\u00e5 plats, och resten sk\u00f6ter protokollet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Notera adresserna du ska anv\u00e4nda. I exemplen nedan har servern den publika IP-adressen <code>203.0.113.10<\/code> och tunneln\u00e4tet <code>10.8.0.0\/24<\/code>. Servern f\u00e5r tunneladressen <code>10.8.0.1<\/code> och den f\u00f6rsta klienten <code>10.8.0.2<\/code>. Byt ut den publika adressen mot din egen, men du kan beh\u00e5lla tunneln\u00e4tet som det \u00e4r s\u00e5 l\u00e4nge det inte krockar med ditt lokala n\u00e4t.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kryptografin\">S\u00e5 fungerar WireGuard-kryptografin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Du beh\u00f6ver inte f\u00f6rst\u00e5 matematiken f\u00f6r att s\u00e4tta upp WireGuard, men en kort \u00f6verblick g\u00f6r fels\u00f6kning l\u00e4ttare. WireGuard anv\u00e4nder en fast upps\u00e4ttning moderna primitiver i st\u00e4llet f\u00f6r att l\u00e5ta dig v\u00e4lja bland dussintals chiffer som OpenVPN g\u00f6r. Det tar bort en hel klass av felkonfigurationer: det finns helt enkelt ingen svag inst\u00e4llning att r\u00e5ka v\u00e4lja.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>ChaCha20-Poly1305<\/strong> f\u00f6r autentiserad kryptering av all trafik. Snabbt \u00e4ven p\u00e5 enheter utan h\u00e5rdvaruacceleration f\u00f6r AES, vilket \u00e4r vanligt p\u00e5 mobiler.<\/li><li><strong>Curve25519<\/strong> f\u00f6r nyckelutbyte. Varje peer har ett nyckelpar, och den publika nyckeln fungerar som identitet.<\/li><li><strong>BLAKE2s<\/strong> f\u00f6r hashning och nyckelh\u00e4rledning. Snabb och utan k\u00e4nda svagheter.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Identiteten i WireGuard \u00e4r publika nyckeln, inte ett anv\u00e4ndarnamn eller l\u00f6senord. Servern accepterar bara trafik fr\u00e5n peers vars publika nyckel den k\u00e4nner till, och varje paket \u00e4r kryptografiskt knutet till r\u00e4tt avs\u00e4ndare. Det h\u00e4r liknar logiken bakom <a href=\"\/se\/2026\/06\/10\/digitala-signaturer\/\">digitala signaturer<\/a>, d\u00e4r en publik nyckel verifierar att data kommer fr\u00e5n r\u00e4tt k\u00e4lla. Vill du f\u00f6rdjupa dig i hashfunktionerna som WireGuard bygger p\u00e5, har vi en grundlig genomg\u00e5ng i v\u00e5rt <a href=\"\/se\/2026\/06\/10\/cryptography-hub\/\">nav om kryptografi<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En viktig konsekvens av designen: WireGuard \u00e4r tyst som standard. Servern svarar inte alls p\u00e5 paket som inte \u00e4r korrekt autentiserade, vilket g\u00f6r den sv\u00e5r att ens uppt\u00e4cka f\u00f6r en portskanner. Det h\u00e4r \u00e4r en medveten egenskap som minskar risken f\u00f6r att din server hamnar p\u00e5 listor \u00f6ver s\u00e5rbara tj\u00e4nster.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-for-steg\">Steg-f\u00f6r-steg: bygg din WireGuard-server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu till sj\u00e4lva bygget. F\u00f6lj stegen i ordning. Varje steg inneh\u00e5ller exakt kommando, f\u00f6rv\u00e4ntad utdata och en kort f\u00f6rklaring. K\u00f6r allt som root eller med <code>sudo<\/code> framf\u00f6r kommandona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-1\">Steg 1: Uppdatera servern och installera wireguard-tools<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">B\u00f6rja med en uppdaterad server och installera verktygspaketet. Det ger dig kommandona <code>wg<\/code> och <code>wg-quick<\/code>. Sj\u00e4lva protokollet finns redan i k\u00e4rnan, s\u00e5 ingen extra modul beh\u00f6vs p\u00e5 ett aktuellt system.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y\nsudo apt install -y wireguard-tools\n\n# Verifiera att verktygen finns\nwg --version\nwg-quick --help | head -n 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6rv\u00e4ntad utdata fr\u00e5n <code>wg --version<\/code> \u00e4r en rad som b\u00f6rjar med <code>wireguard-tools v1.x<\/code>. F\u00e5r du &#8220;command not found&#8221; installerades paketet inte korrekt, kontrollera att <code>apt install<\/code> avslutades utan fel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-2\">Steg 2: Generera serverns nyckelpar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard identifierar varje peer med ett nyckelpar. Vi genererar serverns privata och publika nyckel och l\u00e5ser ner r\u00e4ttigheterna s\u00e5 att bara root kan l\u00e4sa den privata nyckeln. G\u00f6r detta i katalogen <code>\/etc\/wireguard<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/wireguard\numask 077\n\n# Generera privat nyckel och h\u00e4rled publik nyckel\nwg genkey | tee server_private.key | wg pubkey > server_public.key\n\n# Titta p\u00e5 nycklarna\ncat server_private.key\ncat server_public.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Varje nyckel \u00e4r en rad med base64-tecken, ungef\u00e4r <code>iJ8z...c=<\/code>. Den privata nyckeln \u00e4r hemlig och ska aldrig l\u00e4mna servern. Den publika nyckeln delar du senare med dina klienter. Kommandot <code>umask 077<\/code> ser till att de nyskapade filerna bara g\u00e5r att l\u00e4sa av \u00e4garen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-3\">Steg 3: Aktivera IP-forwarding i k\u00e4rnan<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6r att servern ska kunna skicka vidare klienternas trafik ut p\u00e5 internet m\u00e5ste IP-forwarding vara p\u00e5slaget. Detta \u00e4r den vanligaste orsaken till att en tunnel ansluter men inte ger internet. Vi s\u00e4tter det permanent via sysctl.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Aktivera direkt\nsudo sysctl -w net.ipv4.ip_forward=1\nsudo sysctl -w net.ipv6.conf.all.forwarding=1\n\n# G\u00f6r det permanent\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\nsudo sysctl -p \/etc\/sysctl.d\/99-wireguard.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Utdata bekr\u00e4ftar de satta v\u00e4rdena: <code>net.ipv4.ip_forward = 1<\/code>. Gl\u00f6mmer du det h\u00e4r steget kommer klienten att f\u00e5 en tunnel som ser ut att fungera, men ingen webbsida laddar. Kom ih\u00e5g raden, vi \u00e5terkommer till den i fels\u00f6kningsdelen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-4\">Steg 4: Skapa serverkonfigurationen wg0.conf<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nu skapar vi sj\u00e4lva konfigurationsfilen. WireGuard anv\u00e4nder ett enkelt INI-liknande format med en <code>[Interface]<\/code>-sektion f\u00f6r servern och en <code>[Peer]<\/code>-sektion per klient. Skapa filen <code>\/etc\/wireguard\/wg0.conf<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Interface]\n# Serverns tunneladress\nAddress = 10.8.0.1\/24\n# UDP-porten WireGuard lyssnar p\u00e5\nListenPort = 51820\n# Klistra in inneh\u00e5llet fran server_private.key\nPrivateKey = SERVERNS_PRIVATA_NYCKEL\n\n# Peers (klienter) laggs till nedan i steg 9<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Byt ut <code>SERVERNS_PRIVATA_NYCKEL<\/code> mot raden fr\u00e5n <code>server_private.key<\/code>. Spara filen. L\u00e4gg m\u00e4rke till att vi \u00e4nnu inte har lagt till n\u00e5gon klient, det g\u00f6r vi n\u00e4r vi har genererat klientnycklarna. Adressen <code>10.8.0.1\/24<\/code> ger servern den f\u00f6rsta adressen i tunneln\u00e4tet och definierar n\u00e4tets storlek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-5\">Steg 5: Konfigurera NAT med masquerade<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6r att klienternas privata tunneladresser ska kunna n\u00e5 internet via serverns publika IP beh\u00f6ver vi NAT-masquerading. Det enklaste och mest robusta s\u00e4ttet \u00e4r att l\u00e4gga in regler som k\u00f6rs automatiskt n\u00e4r tunneln startar. L\u00e4gg till raderna <code>PostUp<\/code> och <code>PostDown<\/code> i <code>[Interface]<\/code>-sektionen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Interface]\nAddress = 10.8.0.1\/24\nListenPort = 51820\nPrivateKey = SERVERNS_PRIVATA_NYCKEL\n\n# Sla pa NAT nar tunneln startar, ta bort nar den stoppas\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<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Viktigt: byt ut <code>eth0<\/code> mot namnet p\u00e5 serverns publika n\u00e4tverkskort. K\u00f6r <code>ip route show default<\/code> och titta efter ordet <code>dev<\/code>, namnet som f\u00f6ljer (ofta <code>eth0<\/code>, <code>ens3<\/code> eller <code>enp1s0<\/code>) \u00e4r ditt interface. Anv\u00e4nder du <code>nftables<\/code> i st\u00e4llet f\u00f6r iptables fungerar samma logik, men de flesta Ubuntu-installationer har iptables-kompatibilitet p\u00e5 plats som standard.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-6\">Steg 6: \u00d6ppna UDP-porten i brandv\u00e4ggen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard lyssnar p\u00e5 UDP-port 51820. \u00c4r brandv\u00e4ggen aktiv m\u00e5ste du sl\u00e4ppa in den porten, annars n\u00e5r inga klientpaket fram. P\u00e5 Ubuntu med UFW g\u00f6r du s\u00e5 h\u00e4r.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tillat WireGuard-porten (UDP)\nsudo ufw allow 51820\/udp\n\n# Tillat aven SSH sa du inte laser ute dig sjalv\nsudo ufw allow 22\/tcp\n\n# Aktivera och kontrollera\nsudo ufw enable\nsudo ufw status verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I statusutdata ska du se en rad <code>51820\/udp ALLOW Anywhere<\/code>. K\u00f6r du servern hemma bakom en router m\u00e5ste du dessutom vidarebefordra UDP-port 51820 till serverns lokala IP i routerns inst\u00e4llningar. Det h\u00e4r steget och IP-forwarding \u00e4r de tv\u00e5 vanligaste snubbeltr\u00e5darna, s\u00e5 dubbelkolla b\u00e5da.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-7\">Steg 7: Starta tunneln och aktivera vid omstart<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Med konfigurationen p\u00e5 plats startar vi gr\u00e4nssnittet. Verktyget <code>wg-quick<\/code> l\u00e4ser <code>wg0.conf<\/code>, s\u00e4tter upp interfacet och k\u00f6r dina PostUp-regler i ett enda kommando.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Starta tunneln manuellt\nsudo wg-quick up wg0\n\n# Starta automatiskt vid varje omstart (systemd)\nsudo systemctl enable wg-quick@wg0\n\n# Kontrollera status\nsudo systemctl status wg-quick@wg0 --no-pager<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6rv\u00e4ntad utdata fr\u00e5n <code>wg-quick up wg0<\/code> \u00e4r n\u00e5gra rader som b\u00f6rjar med <code>[#]<\/code> och visar att interfacet, adressen och iptables-reglerna sattes upp. F\u00e5r du ett felmeddelande om att nyckeln \u00e4r ogiltig, kontrollera att du klistrade in hela raden fr\u00e5n <code>server_private.key<\/code> utan extra blanksteg. F\u00f6r att st\u00e4nga tunneln igen anv\u00e4nder du <code>sudo wg-quick down wg0<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-8\">Steg 8: Generera klientnycklar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Varje klient (mobil, laptop) beh\u00f6ver ett eget nyckelpar. Generera dem p\u00e5 servern f\u00f6r enkelhetens skull, eller direkt p\u00e5 klienten om du f\u00f6redrar att den privata nyckeln aldrig l\u00e4mnar enheten. Vi g\u00f6r en f\u00f6rsta klient som vi kallar <code>telefon<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/wireguard\numask 077\n\n# Klientens nyckelpar\nwg genkey | tee telefon_private.key | wg pubkey > telefon_public.key\n\n# Valfritt men rekommenderat: en delad pre-shared key for extra skydd\nwg genpsk > telefon_preshared.key\n\ncat telefon_public.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den valfria pre-shared key (PSK) l\u00e4ggs ovanp\u00e5 den vanliga krypteringen och ger ett extra symmetriskt lager. Det \u00e4r ett billigt s\u00e4tt att h\u00f6ja ribban mot framtida kvantdatorer. Vill du l\u00e4sa mer om hur lager av skydd h\u00e4nger ihop, har vi t\u00e4ckt \u00e4mnet i v\u00e5r genomg\u00e5ng av <a href=\"\/se\/2026\/06\/10\/security-hub\/\">s\u00e4kerhet online<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-9\">Steg 9: L\u00e4gg till klienten som peer p\u00e5 servern<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nu kopplar vi ihop klienten med servern. \u00d6ppna <code>\/etc\/wireguard\/wg0.conf<\/code> igen och l\u00e4gg till en <code>[Peer]<\/code>-sektion l\u00e4ngst ner. Klientens publika nyckel identifierar den, och <code>AllowedIPs<\/code> best\u00e4mmer vilken tunneladress den f\u00e5r.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Peer]\n# Telefonens publika nyckel (fran telefon_public.key)\nPublicKey = TELEFONENS_PUBLIKA_NYCKEL\n# Det extra PSK-lagret (fran telefon_preshared.key)\nPresharedKey = TELEFONENS_PRESHARED_NYCKEL\n# Vilken tunneladress denna klient tilldelas\nAllowedIPs = 10.8.0.2\/32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 serversidan \u00e4r <code>AllowedIPs = 10.8.0.2\/32<\/code> en routningsregel: bara den exakta adressen <code>10.8.0.2<\/code> h\u00f6r till den h\u00e4r klienten. L\u00e4gger du till fler klienter ger du dem <code>10.8.0.3\/32<\/code>, <code>10.8.0.4\/32<\/code> och s\u00e5 vidare. Ladda om konfigurationen utan att bryta befintliga anslutningar med kommandot nedan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ladda om konfigurationen utan avbrott\nsudo wg syncconf wg0 &lt;(wg-quick strip wg0)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-10\">Steg 10: Skapa klientkonfigurationen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klienten beh\u00f6ver en egen konfigurationsfil. Den speglar serverns, men med klientens privata nyckel och serverns publika nyckel. H\u00e4r best\u00e4mmer <code>AllowedIPs<\/code> i st\u00e4llet vad som ska skickas genom tunneln. V\u00e4rdet <code>0.0.0.0\/0<\/code> betyder all trafik, allts\u00e5 en full VPN.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[Interface]\n# Telefonens privata nyckel\nPrivateKey = TELEFONENS_PRIVATA_NYCKEL\n# Klientens tunneladress\nAddress = 10.8.0.2\/24\n# DNS som klienten ska anvanda i tunneln\nDNS = 1.1.1.1\n\n[Peer]\n# Serverns publika nyckel (fran server_public.key)\nPublicKey = SERVERNS_PUBLIKA_NYCKEL\nPresharedKey = TELEFONENS_PRESHARED_NYCKEL\n# Serverns publika adress och port\nEndpoint = 203.0.113.10:51820\n# Skicka all trafik genom tunneln\nAllowedIPs = 0.0.0.0\/0\n# Hall NAT-mappningen vid liv bakom router\nPersistentKeepalive = 25<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Raden <code>PersistentKeepalive = 25<\/code> \u00e4r viktig f\u00f6r mobiler bakom NAT. Den skickar ett litet paket var 25:e sekund s\u00e5 att routern h\u00e5ller porten \u00f6ppen och tunneln inte d\u00f6r i tysthet. S\u00e4tter du klienten bakom en strikt NAT och hoppar \u00f6ver den h\u00e4r raden f\u00e5r du sporadiska avbrott som \u00e4r sv\u00e5ra att fels\u00f6ka.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-11\">Steg 11: Anslut mobilen med QR-kod<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6r mobila klienter \u00e4r det smidigast att generera en QR-kod av konfigurationen och skanna den i den officiella WireGuard-appen f\u00f6r iOS eller Android. Installera ett litet verktyg och l\u00e5t det rita upp koden i terminalen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Installera QR-generatorn\nsudo apt install -y qrencode\n\n# Rita upp klientkonfigurationen som QR-kod\nqrencode -t ansiutf8 &lt; telefon.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ppna WireGuard-appen p\u00e5 telefonen, v\u00e4lj &#8220;L\u00e4gg till tunnel&#8221;, sedan &#8220;Skanna QR-kod&#8221;, och rikta kameran mot terminalen. Tunneln dyker upp direkt. F\u00f6r en b\u00e4rbar dator kopierar du i st\u00e4llet <code>telefon.conf<\/code> (d\u00f6p g\u00e4rna om den till <code>laptop.conf<\/code> med ett eget nyckelpar) till klienten och importerar den i skrivbordsappen. De officiella apparna finns f\u00f6r iOS, Android, Windows, macOS och Linux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"steg-12\">Steg 12: Verifiera tunneln<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sista steget: bekr\u00e4fta att allt fungerar. Sl\u00e5 p\u00e5 tunneln i klientappen och k\u00f6r statuskommandot p\u00e5 servern. Du ska se klienten med en f\u00e4rsk handskakning och r\u00e4knare som tickar upp\u00e5t.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Visa tunnelstatus pa servern\nsudo wg show\n\n# Exempelutdata:\n# interface: wg0\n#   public key: aBcD...=\n#   listening port: 51820\n# peer: TELEFONENS_PUBLIKA_NYCKEL\n#   preshared key: (hidden)\n#   endpoint: 198.51.100.42:49321\n#   allowed ips: 10.8.0.2\/32\n#   latest handshake: 8 seconds ago\n#   transfer: 1.21 MiB received, 3.48 MiB sent<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ser du raden <code>latest handshake<\/code> med ett f\u00e4rskt v\u00e4rde \u00e4r tunneln uppe. Testa sedan fr\u00e5n klienten: bes\u00f6k en sida som visar din IP-adress, till exempel <code>ifconfig.me<\/code>, och bekr\u00e4fta att den visar serverns publika IP och inte ditt vanliga internet. Saknas handskakningen helt, g\u00e5 direkt till fels\u00f6kningstabellen l\u00e4ngre ner.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplett-projekt\">Komplett fungerande projekt: server och klient<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e4r \u00e4r hela projektet samlat, s\u00e5 att du ser hur delarna h\u00e4nger ihop. F\u00f6rst den f\u00e4rdiga serverfilen <code>\/etc\/wireguard\/wg0.conf<\/code> med en klient inlagd, sedan klientfilen. Klistra in dina egna nycklar och din publika IP p\u00e5 de markerade platserna.<\/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 = SERVERNS_PRIVATA_NYCKEL\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# Klient: telefon\nPublicKey = TELEFONENS_PUBLIKA_NYCKEL\nPresharedKey = TELEFONENS_PRESHARED_NYCKEL\nAllowedIPs = 10.8.0.2\/32<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># telefon.conf  (KLIENT)\n[Interface]\nPrivateKey = TELEFONENS_PRIVATA_NYCKEL\nAddress = 10.8.0.2\/24\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = SERVERNS_PUBLIKA_NYCKEL\nPresharedKey = TELEFONENS_PRESHARED_NYCKEL\nEndpoint = 203.0.113.10:51820\nAllowedIPs = 0.0.0.0\/0\nPersistentKeepalive = 25<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4gg m\u00e4rke till symmetrin. Serverns <code>PublicKey<\/code> i klientfilen matchar serverns privata nyckel, och klientens <code>PublicKey<\/code> i serverfilen matchar klientens privata nyckel. PSK-raden \u00e4r identisk i b\u00e5da. Den enda regeln att minnas \u00e4r att privata nycklar stannar lokalt och publika nycklar utbyts. F\u00e5r du detta r\u00e4tt fungerar tunneln, punkt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fallgropar\">7 vanliga fallgropar och hur du undviker dem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">De flesta misslyckade WireGuard-installationer beror p\u00e5 en liten handfull misstag. G\u00e5 igenom listan innan du b\u00f6rjar fels\u00f6ka p\u00e5 djupet, sannolikt sitter ditt problem h\u00e4r.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>IP-forwarding gl\u00f6mt.<\/strong> Tunneln ansluter men ingen sida laddar. K\u00f6r <code>sysctl net.ipv4.ip_forward<\/code> och kontrollera att svaret \u00e4r <code>1<\/code>. Detta \u00e4r det allra vanligaste felet.<\/li><li><strong>Fel n\u00e4tverkskort i NAT-regeln.<\/strong> St\u00e5r det <code>eth0<\/code> i PostUp men ditt kort heter <code>ens3<\/code> f\u00e5r klienten tunnel utan internet. Kontrollera med <code>ip route show default<\/code>.<\/li><li><strong>UDP-porten blockerad.<\/strong> WireGuard anv\u00e4nder UDP, inte TCP. En brandv\u00e4ggsregel f\u00f6r TCP 51820 hj\u00e4lper inte. \u00d6ppna <code>51820\/udp<\/code> b\u00e5de i UFW och i routern om servern st\u00e5r hemma.<\/li><li><strong>PersistentKeepalive saknas p\u00e5 mobil.<\/strong> Tunneln fungerar n\u00e5gra sekunder och d\u00f6r sedan. L\u00e4gg till <code>PersistentKeepalive = 25<\/code> i klientens peer-sektion.<\/li><li><strong>AllowedIPs f\u00f6rv\u00e4xlat.<\/strong> P\u00e5 servern listar du klientens adress (<code>\/32<\/code>), p\u00e5 klienten listar du vad som ska skickas genom tunneln (<code>0.0.0.0\/0<\/code>). F\u00f6rv\u00e4xlar du dem routas trafiken fel.<\/li><li><strong>DNS-l\u00e4ckor.<\/strong> Utan <code>DNS<\/code>-raden i klienten kan uppslag g\u00e5 utanf\u00f6r tunneln och avsl\u00f6ja vilka sidor du bes\u00f6ker. S\u00e4tt en DNS du litar p\u00e5.<\/li><li><strong>MTU-problem.<\/strong> Vissa n\u00e4t kr\u00e4ver l\u00e4gre MTU. Laddar sm\u00e5 sidor men inte stora, l\u00e4gg till <code>MTU = 1420<\/code> under <code>[Interface]<\/code> i klienten.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">En felkonfigurerad VPN kan ge en falsk k\u00e4nsla av s\u00e4kerhet, precis som ett svagt l\u00f6senord. Vill du f\u00f6rst\u00e5 hur l\u00e4ckande metadata kan utnyttjas, l\u00e4s v\u00e5r genomg\u00e5ng av <a href=\"\/se\/2026\/06\/10\/dataintrang\/\">hur dataintr\u00e5ng sker<\/a>. En t\u00e4t tunnel \u00e4r bara en del av ett bredare f\u00f6rsvar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"felsokning\">Fels\u00f6kning: 8 vanliga problem och l\u00f6sningar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r tunneln inte beter sig som v\u00e4ntat ger den h\u00e4r tabellen en snabb diagnos. B\u00f6rja uppifr\u00e5n, problemen \u00e4r sorterade efter hur vanliga de \u00e4r.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Trolig orsak<\/th><th>L\u00f6sning<\/th><\/tr><\/thead><tbody><tr><td>Ansluter men ingen internet\u00e5tkomst<\/td><td>IP-forwarding avst\u00e4ngt<\/td><td>S\u00e4tt <code>net.ipv4.ip_forward=1<\/code> via sysctl<\/td><\/tr><tr><td>Ingen handskakning alls i <code>wg show<\/code><\/td><td>UDP-port blockerad<\/td><td>\u00d6ppna <code>51820\/udp<\/code> i UFW och router<\/td><\/tr><tr><td>Tunnel d\u00f6r efter n\u00e5gra sekunder<\/td><td>NAT-timeout<\/td><td>L\u00e4gg till <code>PersistentKeepalive = 25<\/code><\/td><\/tr><tr><td>Internet via tunnel men inte hemn\u00e4tets enheter<\/td><td>Fel <code>AllowedIPs<\/code><\/td><td>L\u00e4gg till hemn\u00e4tet i klientens AllowedIPs<\/td><\/tr><tr><td>Stora sidor laddar inte, sm\u00e5 fungerar<\/td><td>MTU f\u00f6r h\u00f6g<\/td><td>S\u00e4tt <code>MTU = 1420<\/code> i klienten<\/td><\/tr><tr><td>&#8220;Key is not the correct length&#8221;<\/td><td>Trasig eller halv nyckel<\/td><td>Generera om nyckeln, klistra in hela raden<\/td><\/tr><tr><td>DNS fungerar inte i tunneln<\/td><td>DNS-rad saknas<\/td><td>L\u00e4gg till <code>DNS = 1.1.1.1<\/code> i klienten<\/td><\/tr><tr><td>Tunnel f\u00f6rsvinner efter omstart<\/td><td>Tj\u00e4nsten ej aktiverad<\/td><td><code>systemctl enable wg-quick@wg0<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ett kraftfullt fels\u00f6kningsknep \u00e4r att l\u00e4sa loggarna i realtid. K\u00f6r <code>sudo journalctl -u wg-quick@wg0 -f<\/code> medan du startar tunneln, s\u00e5 ser du exakt vilket kommando som fallerar. Vill du se trafiken p\u00e5 l\u00e5g niv\u00e5 hj\u00e4lper <code>sudo tcpdump -ni eth0 udp port 51820<\/code> dig att avg\u00f6ra om paketen ens n\u00e5r servern. Ser du inkommande paket men ingen handskakning \u00e4r det n\u00e4stan alltid en nyckel- eller PSK-felmatchning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avancerade-tips\">Avancerade tips: split tunneling, kill switch och fler klienter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r grunden fungerar finns det flera s\u00e4tt att skr\u00e4ddarsy din WireGuard-server. H\u00e4r \u00e4r de mest anv\u00e4ndbara justeringarna.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"split-tunneling\">Split tunneling<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vill du bara skicka viss trafik genom tunneln, till exempel \u00e5tkomst till ett f\u00f6retagsn\u00e4t medan resten g\u00e5r direkt, byter du klientens <code>AllowedIPs<\/code> fr\u00e5n <code>0.0.0.0\/0<\/code> till de specifika n\u00e4ten. S\u00e4tt exempelvis <code>AllowedIPs = 10.8.0.0\/24, 192.168.1.0\/24<\/code> f\u00f6r att bara n\u00e5 tunneln\u00e4tet och ett hemn\u00e4t. All annan trafik g\u00e5r d\u00e5 utanf\u00f6r VPN, vilket sparar bandbredd och latens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kill-switch\">Kill switch p\u00e5 klienten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En kill switch hindrar trafik fr\u00e5n att l\u00e4cka utanf\u00f6r tunneln om VPN-anslutningen faller. P\u00e5 Linux-klienter l\u00e4gger du till brandv\u00e4ggsregler i klientens egna PostUp och PostDown. Skrivbordsappen f\u00f6r Windows och macOS har en inbyggd inst\u00e4llning som heter &#8220;Block untunneled traffic&#8221; (kill switch) som du bara bockar i. Det h\u00e4r \u00e4r ett enkelt men effektivt skydd mot ov\u00e4ntade l\u00e4ckor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fler-klienter\">Skala till m\u00e5nga klienter<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Att l\u00e4gga till en tionde eller hundrade klient skalar utm\u00e4rkt eftersom WireGuard \u00e4r s\u00e5 l\u00e4tt. Ge varje peer ett unikt nyckelpar och en egen <code>\/32<\/code>-adress i tunneln\u00e4tet. F\u00f6r st\u00f6rre upps\u00e4ttningar \u00e4r det v\u00e4rt att skripta nyckelgenereringen och konfigurationsutskriften. Ett litet bash-skript som tar emot ett klientnamn, genererar nycklar, l\u00e4gger till en peer p\u00e5 servern och skriver ut en QR-kod sparar mycket tid. Eftersom <code>wg syncconf<\/code> laddar om utan avbrott kan du l\u00e4gga till klienter mitt i drift.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jamforelse\">WireGuard vs OpenVPN vs IPsec<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard \u00e4r inte det enda VPN-protokollet, men det vinner p\u00e5 de flesta punkter som spelar roll f\u00f6r en sj\u00e4lvhostad l\u00f6sning. Tabellen sammanfattar skillnaderna mot de tv\u00e5 etablerade alternativen.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Egenskap<\/th><th>WireGuard<\/th><th>OpenVPN<\/th><th>IPsec\/IKEv2<\/th><\/tr><\/thead><tbody><tr><td>Kodbas<\/td><td>N\u00e5gra tusen rader<\/td><td>Mycket stor<\/td><td>Mycket stor<\/td><\/tr><tr><td>Plats<\/td><td>I Linux-k\u00e4rnan<\/td><td>Anv\u00e4ndarrymd<\/td><td>K\u00e4rna + anv\u00e4ndarrymd<\/td><\/tr><tr><td>Chiffer<\/td><td>Fast: ChaCha20-Poly1305<\/td><td>Konfigurerbart<\/td><td>Konfigurerbart<\/td><\/tr><tr><td>Konfiguration<\/td><td>Mycket enkel<\/td><td>Komplex<\/td><td>Komplex<\/td><\/tr><tr><td>Anslutningstid<\/td><td>N\u00e4stan omedelbar<\/td><td>L\u00e5ngsammare<\/td><td>Medel<\/td><\/tr><tr><td>N\u00e4tbyten (mobil)<\/td><td>S\u00f6ml\u00f6sa<\/td><td>Bryts ofta<\/td><td>Bra med MOBIKE<\/td><\/tr><tr><td>Transportprotokoll<\/td><td>UDP<\/td><td>UDP eller TCP<\/td><td>UDP<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Den fasta chifferupps\u00e4ttningen \u00e4r b\u00e5de en styrka och en begr\u00e4nsning. Du kan inte byta algoritm, men du kan heller inte r\u00e5ka v\u00e4lja en svag. F\u00f6r n\u00e4stan alla anv\u00e4ndningsfall \u00e4r det r\u00e4tt avv\u00e4gning. OpenVPN har fortfarande en f\u00f6rdel d\u00e4r du m\u00e5ste passera brandv\u00e4ggar som bara sl\u00e4pper igenom TCP 443, eftersom WireGuard alltid k\u00f6r UDP. Beh\u00f6ver du den flexibiliteten kan WireGuard k\u00f6ras genom en TCP-omslagsteknik, men det ligger utanf\u00f6r den h\u00e4r guiden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sakerhet-prestanda\">S\u00e4kerhet och prestanda i praktiken<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuards s\u00e4kerhetsrykte vilar p\u00e5 tv\u00e5 ben: den lilla kodbasen och de moderna primitiverna. En liten kodbas g\u00e5r att granska i sin helhet, vilket \u00e4r praktiskt om\u00f6jligt med de stora alternativen. Det inneb\u00e4r inte att WireGuard \u00e4r os\u00e5rbart, men attackytan \u00e4r dramatiskt mindre. Som med all programvara g\u00e4ller att h\u00e5lla servern uppdaterad, begr\u00e4nsa SSH-\u00e5tkomsten och inte exponera fler tj\u00e4nster \u00e4n n\u00f6dv\u00e4ndigt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5gra konkreta s\u00e4kerhetsr\u00e5d f\u00f6r din nya server. Inaktivera l\u00f6senordsinloggning \u00f6ver SSH och anv\u00e4nd enbart nycklar, precis som WireGuard sj\u00e4lvt bygger p\u00e5 nyckelpar. Den principen behandlar vi i v\u00e5r guide om <a href=\"\/se\/2026\/06\/10\/losenordssakerhet\/\">l\u00f6senordss\u00e4kerhet<\/a>. L\u00e4gg till pre-shared keys f\u00f6r varje peer som ett extra lager. Och rotera nycklar om du misst\u00e4nker att en klientenhet tappats bort, det r\u00e4cker att ta bort dess peer-sektion och ladda om med <code>wg syncconf<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prestandam\u00e4ssigt \u00e4r WireGuard sv\u00e5rslaget f\u00f6r en hemmaserver. Eftersom krypteringen sker i k\u00e4rnan och chiffret ChaCha20 \u00e4r optimerat \u00e4ven utan AES-h\u00e5rdvara, blir overheaden l\u00e5g. P\u00e5 en enkel VPS m\u00e4ttar tunneln i praktiken din uppkoppling snarare \u00e4n processorn. Den st\u00f6rsta flaskhalsen blir n\u00e4stan alltid serverns publika bandbredd, inte WireGuard sj\u00e4lvt. F\u00f6r de flesta hemmaanv\u00e4ndare r\u00e4cker en billig VPS f\u00f6r att k\u00f6ra full hastighet till flera enheter samtidigt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">T\u00e4nk ocks\u00e5 p\u00e5 det juridiska. En egen VPN g\u00f6r dig inte anonym, din serverleverant\u00f6r ser fortfarande serverns trafik och din IP. Vill du b\u00e5de kryptera trafiken och d\u00f6lja vem du \u00e4r beh\u00f6vs en annan modell. Var ocks\u00e5 uppm\u00e4rksam p\u00e5 <a href=\"\/se\/2026\/06\/10\/natfiske\/\">n\u00e4tfiske<\/a>, eftersom en s\u00e4ker tunnel inte skyddar mot att du sj\u00e4lv luras att l\u00e4mna ut uppgifter. WireGuard l\u00f6ser konfidentialitet och \u00e5tkomst, inte anonymitet eller social manipulation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"automatisera\">Automatisera nya klienter med ett bash-skript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r du v\u00e4l lagt till tv\u00e5 eller tre klienter f\u00f6r hand inser du snabbt att stegen \u00e4r identiska varje g\u00e5ng: generera nyckelpar, generera PSK, l\u00e4gg till en peer p\u00e5 servern, skriv ut en klientkonfiguration och rita en QR-kod. Det \u00e4r precis s\u00e5dant som ett litet skript g\u00f6r b\u00e4ttre och utan slarvfel. H\u00e4r \u00e4r ett komplett, fungerande skript du kan spara som <code>\/etc\/wireguard\/add-client.sh<\/code> och k\u00f6ra med ett klientnamn som argument.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\n# add-client.sh  Lagger till en ny WireGuard-klient\n# Anvandning: sudo .\/add-client.sh telefon 10.8.0.2\nset -euo pipefail\n\nNAME=\"$1\"               # klientnamn, t.ex. telefon\nCLIENT_IP=\"$2\"          # tunneladress, t.ex. 10.8.0.2\nWG_DIR=\/etc\/wireguard\nSERVER_PUB=$(cat \"$WG_DIR\/server_public.key\")\nENDPOINT=\"203.0.113.10:51820\"   # byt till din publika IP\nDNS=\"1.1.1.1\"\n\ncd \"$WG_DIR\"\numask 077\n\n# 1. Nycklar\nwg genkey | tee \"${NAME}_private.key\" | wg pubkey > \"${NAME}_public.key\"\nwg genpsk > \"${NAME}_preshared.key\"\n\nCLIENT_PRIV=$(cat \"${NAME}_private.key\")\nCLIENT_PUB=$(cat \"${NAME}_public.key\")\nPSK=$(cat \"${NAME}_preshared.key\")\n\n# 2. Lagg till peer pa servern\ncat >> wg0.conf &lt;&lt;EOF\n\n[Peer]\n# Klient: ${NAME}\nPublicKey = ${CLIENT_PUB}\nPresharedKey = ${PSK}\nAllowedIPs = ${CLIENT_IP}\/32\nEOF\n\n# 3. Skapa klientkonfiguration\ncat > \"${NAME}.conf\" &lt;&lt;EOF\n[Interface]\nPrivateKey = ${CLIENT_PRIV}\nAddress = ${CLIENT_IP}\/24\nDNS = ${DNS}\n\n[Peer]\nPublicKey = ${SERVER_PUB}\nPresharedKey = ${PSK}\nEndpoint = ${ENDPOINT}\nAllowedIPs = 0.0.0.0\/0\nPersistentKeepalive = 25\nEOF\n\n# 4. Ladda om utan avbrott och rita QR-kod\nwg syncconf wg0 &lt;(wg-quick strip wg0)\necho \"Klient ${NAME} tillagd. Skanna QR-koden i appen:\"\nqrencode -t ansiutf8 &lt; \"${NAME}.conf\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00f6r skriptet k\u00f6rbart med <code>chmod +x \/etc\/wireguard\/add-client.sh<\/code> och k\u00f6r det sedan med <code>sudo \/etc\/wireguard\/add-client.sh laptop 10.8.0.3<\/code>. P\u00e5 n\u00e5gra sekunder har du en ny klient inlagd, en f\u00e4rdig konfigurationsfil och en QR-kod att skanna. Skriptet \u00e4r idempotent p\u00e5 nyckelniv\u00e5 s\u00e5 l\u00e4nge du ger varje klient ett unikt namn och en unik adress. Vill du \u00e5teranv\u00e4nda det f\u00f6r en hel familj eller ett litet team r\u00e4cker det att h\u00e5lla reda p\u00e5 vilka adresser som \u00e4r upptagna i tunneln\u00e4tet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En liten varning: skriptet skriver privata nycklar till disk i <code>\/etc\/wireguard<\/code>. Det \u00e4r acceptabelt p\u00e5 en server bara root kommer \u00e5t, men om du delar servern eller tar s\u00e4kerhetskopior b\u00f6r du kryptera den katalogen eller flytta nyckelgenereringen till klienten. Principen \u00e4r densamma som f\u00f6r all hemlighetshantering: minimera var den privata nyckeln finns och vem som kan l\u00e4sa den.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rotera-nycklar\">S\u00e4kerhetskopiera, rotera och \u00e5terkalla nycklar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En VPN \u00e4r inte klar n\u00e4r tunneln g\u00e5r upp. Den beh\u00f6ver underh\u00e5ll, precis som vilken s\u00e4kerhetskritisk tj\u00e4nst som helst. Tre rutiner \u00e4r v\u00e4rda att etablera direkt: s\u00e4kerhetskopiering, nyckelrotation och \u00e5terkallande av borttappade enheter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00e4kerhetskopiera hela <code>\/etc\/wireguard<\/code>-katalogen till en krypterad plats. Den inneh\u00e5ller serverns privata nyckel och alla peer-definitioner, s\u00e5 en kopia r\u00e4cker f\u00f6r att \u00e5terst\u00e4lla servern efter en krasch. Kryptera kopian, eftersom den i klartext \u00e4r lika k\u00e4nslig som sj\u00e4lva servern. Ett enkelt s\u00e4tt \u00e4r att paketera och kryptera med ett verktyg du litar p\u00e5 och spara resultatet utanf\u00f6r servern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Att \u00e5terkalla en klient \u00e4r enkelt och en av WireGuards styrkor. Tappar n\u00e5gon bort sin telefon tar du bara bort dess <code>[Peer]<\/code>-sektion ur <code>wg0.conf<\/code> och laddar om. Fr\u00e5n den sekunden accepterar servern inga paket fr\u00e5n den nyckeln l\u00e4ngre. Det finns ingen central sp\u00e4rrlista att v\u00e4nta p\u00e5, \u00e5tkomsten upph\u00f6r omedelbart.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ta bort en klients peer-sektion manuellt ur wg0.conf, sedan:\nsudo wg syncconf wg0 &lt;(wg-quick strip wg0)\n\n# Bekrafta att klienten ar borta\nsudo wg show wg0 peers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rotera serverns nyckelpar med j\u00e4mna mellanrum eller vid misst\u00e4nkt intr\u00e5ng. Det kr\u00e4ver mer arbete, eftersom alla klienter m\u00e5ste f\u00e5 serverns nya publika nyckel i sin <code>Endpoint<\/code>-peer. Planera d\u00e4rf\u00f6r rotationen och meddela dina anv\u00e4ndare, eller automatisera utskicket av nya konfigurationer. F\u00f6r de flesta hemmaservrar r\u00e4cker det att rotera vid byte av server eller om du misst\u00e4nker att en privat nyckel l\u00e4ckt. T\u00e4nk p\u00e5 nyckelhantering som f\u00e4rskvara: ju f\u00e4rre kopior och ju kortare livsl\u00e4ngd, desto mindre blir konsekvensen om n\u00e5got g\u00e5r fel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Vanliga fr\u00e5gor om WireGuard<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ar-wireguard-sakert-att-anvanda\">\u00c4r WireGuard s\u00e4kert att anv\u00e4nda?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. WireGuard anv\u00e4nder moderna, v\u00e4l granskade primitiver (ChaCha20-Poly1305, Curve25519, BLAKE2s) och har en liten kodbas som \u00e4r l\u00e4tt att granska. Det ligger i mainline Linux-k\u00e4rnan sedan version 5.6 och anv\u00e4nds som grund i m\u00e5nga kommersiella VPN-tj\u00e4nster. S\u00e4kerheten beror dock \u00e4ven p\u00e5 hur du konfigurerar och underh\u00e5ller servern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vilken-port-anvander-wireguard\">Vilken port anv\u00e4nder WireGuard?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Standardporten \u00e4r UDP 51820. Du kan byta till valfri UDP-port genom att \u00e4ndra <code>ListenPort<\/code> i serverns <code>wg0.conf<\/code> och <code>Endpoint<\/code> i klientens konfiguration. WireGuard anv\u00e4nder alltid UDP, aldrig TCP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"behover-jag-en-statisk-ip-adress\">Beh\u00f6ver jag en statisk IP-adress?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Det underl\u00e4ttar men \u00e4r inget krav. K\u00f6r du servern p\u00e5 en VPS f\u00e5r du oftast en statisk publik IP. Hemma kan du anv\u00e4nda dynamisk DNS (DDNS) och ange ett dom\u00e4nnamn i klientens <code>Endpoint<\/code> i st\u00e4llet f\u00f6r en IP-adress, s\u00e5 hittar klienten servern \u00e4ven n\u00e4r din IP byts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jag-anvanda-wireguard-pa-mobilen\">Kan jag anv\u00e4nda WireGuard p\u00e5 mobilen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Det finns officiella WireGuard-appar f\u00f6r b\u00e5de iOS och Android. Det enklaste s\u00e4ttet att l\u00e4gga till en tunnel \u00e4r att skanna en QR-kod av klientkonfigurationen, vilket vi visar i steg 11. Kom ih\u00e5g <code>PersistentKeepalive<\/code> f\u00f6r stabil anslutning bakom mobiln\u00e4t.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"varfor-ansluter-tunneln-men-ger-ingen-internetatkomst\">Varf\u00f6r ansluter tunneln men ger ingen internet\u00e5tkomst?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I n\u00e4stan alla fall beror det p\u00e5 att IP-forwarding \u00e4r avst\u00e4ngt eller att NAT-regeln pekar p\u00e5 fel n\u00e4tverkskort. Kontrollera att <code>net.ipv4.ip_forward<\/code> \u00e4r <code>1<\/code> och att <code>eth0<\/code> i din PostUp-regel matchar serverns riktiga interface (kolla med <code>ip route show default<\/code>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hur-manga-klienter-klarar-en-wireguard-server\">Hur m\u00e5nga klienter klarar en WireGuard-server?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00e5nga. Eftersom protokollet \u00e4r s\u00e5 l\u00e4tt begr\u00e4nsas du i praktiken av serverns bandbredd och inte av antalet peers. Ge varje klient ett eget nyckelpar och en unik <code>\/32<\/code>-adress i tunneln\u00e4tet. Du kan l\u00e4gga till klienter under drift med <code>wg syncconf<\/code> utan att bryta befintliga anslutningar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ar-wireguard-snabbare-an-openvpn\">\u00c4r WireGuard snabbare \u00e4n OpenVPN?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I de allra flesta fall, ja. WireGuard k\u00f6r i k\u00e4rnan och anv\u00e4nder ett chiffer som \u00e4r effektivt \u00e4ven utan AES-h\u00e5rdvara, vilket ger l\u00e4gre overhead och snabbare anslutningstid. Den exakta skillnaden beror p\u00e5 h\u00e5rdvara och n\u00e4t, men p\u00e5 en typisk hemmaserver blir bandbredden snarare flaskhalsen \u00e4n protokollet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vad-ar-en-pre-shared-key-och-behover-jag-den\">Vad \u00e4r en pre-shared key och beh\u00f6ver jag den?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En pre-shared key (PSK) \u00e4r en extra symmetrisk nyckel som l\u00e4ggs ovanp\u00e5 den vanliga krypteringen. Den \u00e4r valfri men rekommenderas, eftersom den h\u00f6jer ribban mot framtida kvantdatorattacker. Generera den med <code>wg genpsk<\/code> och l\u00e4gg in samma v\u00e4rde i b\u00e5de serverns peer-sektion och klientens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relaterad-lasning\">Relaterad l\u00e4sning<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/se\/2026\/06\/10\/https-och-tls\/\">HTTPS och TLS: h\u00e4ngl\u00e5set, certifikat och vad de skyddar<\/a><\/li><li><a href=\"\/se\/2026\/06\/10\/losenordssakerhet\/\">L\u00f6senordss\u00e4kerhet: l\u00e4ngd, hashning och l\u00f6senordshanterare<\/a><\/li><li><a href=\"\/se\/2026\/06\/10\/dataintrang\/\">Dataintr\u00e5ng: hur de sker och hur du skyddar dig<\/a><\/li><li><a href=\"\/se\/2026\/06\/11\/cyberattacker-sverige-2026\/\">Cyberattacker mot Sverige: 3 215 i veckan<\/a><\/li><li><a href=\"\/se\/2026\/06\/10\/natfiske\/\">N\u00e4tfiske: hur bedr\u00e4gerif\u00f6rs\u00f6k fungerar och hur du k\u00e4nner igen dem<\/a><\/li><li><a href=\"\/se\/2026\/06\/10\/security-hub\/\">S\u00e4kerhet online: dataintr\u00e5ng, l\u00f6senord, HTTPS och n\u00e4tfiske<\/a><\/li><li><a href=\"\/se\/2026\/06\/10\/cryptography-hub\/\">Kryptografi: hashfunktioner, SHA och digitalt f\u00f6rtroende<\/a><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"externa-kallor\">Externa k\u00e4llor<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.wireguard.com\/\" target=\"_blank\" rel=\"noopener\">WireGuard officiella webbplats<\/a><\/li><li><a href=\"https:\/\/www.wireguard.com\/quickstart\/\" target=\"_blank\" rel=\"noopener\">WireGuard Quick Start<\/a><\/li><li><a href=\"https:\/\/www.wireguard.com\/protocol\/\" target=\"_blank\" rel=\"noopener\">WireGuard Protocol och kryptografi<\/a><\/li><li><a href=\"https:\/\/git.zx2c4.com\/wireguard-tools\/about\/\" target=\"_blank\" rel=\"noopener\">wireguard-tools k\u00e4llkod<\/a><\/li><li><a href=\"https:\/\/ubuntu.com\/server\/docs\" target=\"_blank\" rel=\"noopener\">Ubuntu Server-dokumentation<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Publicerad 12 juni 2026. Kommandona \u00e4r testade mot Ubuntu 24.04 LTS. Byt ut exempeladresserna och nycklarna mot dina egna v\u00e4rden innan du drifts\u00e4tter.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En egen VPN-server ger dig krypterad trafik utan att betala en m\u00e5nadsavgift till en leverant\u00f6r du m\u00e5ste lita p\u00e5. WireGuard har p\u00e5 n\u00e5gra \u00e5r g\u00e5tt fr\u00e5n experiment till standarden f\u00f6r\u2026<\/p>\n","protected":false},"author":3,"featured_media":55,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,4],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-10","category-privacy"],"_links":{"self":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":56,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/54\/revisions\/56"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media\/55"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}