Det korta svaret
Välj vanlig WireGuard om du har en handfull enheter som framför allt ska nå en server, och inte har något emot att ändra i en konfigurationsfil för varje enhet du lägger till eller tar bort. Välj Headscale om du vill ha det Tailscale gör, enheter som hittar varandra direkt, namn, åtkomstregler och exit nodes, med listan över enheter på din egen server och inget att betala. Välj Tailscales värdtjänst om du hellre slipper köra styrservern, accepterar att Tailscale känner till dina enheter, och betalar för den när du använder den i jobbet: gratispaketet är bara för icke-kommersiellt bruk.
Det här testade vi
Vi använde en Melonslab VC-P Alloy (2 vCPU, 8 GB) med Debian 13 och grunden från Podman-guiden. På samma server skapade vi tre klienter, var och en i ett eget nätverksnamnområde (network namespace): en med publik adress, som en server hos en annan leverantör, en bakom NAT som en router hemma, som stoppar inkommande anslutningar, och en tredje att lägga till och ta bort. Själva servern var också med i nätverket.
- WireGuard: vi följde vår WireGuard-guide med servern som nav och två klienter som "telefonen" och "datorn", och lade sedan till åtkomstregler med ufw.
- Headscale: vi följde vår Headscale-guide, anslöt servern och två klienter, en via inloggningslänken och en med en nyckel, och lade till en policyfil för åtkomstregler.
- Tailscales värdtjänst testades inte. För att registrera dig behöver du ett konto hos Google, Microsoft, GitHub, Apple eller en annan identitetsleverantör, och Tailscale har ingen registrering med e-postadress, så vi kunde inte skapa ett konto utan en människa. Allt vi skriver om tjänsten kommer från Tailscales egen dokumentation och prissida, som vi läste den 14 oktober 2026. Den använder samma Tailscale-appar som Headscale, så det vi såg på enheterna gäller den också.
Med båda gjorde vi samma sak: kopplade ihop enheterna, mätte hastigheten med iperf3 och fördröjningen med ping, jämfört med utan tunnel, lade till och tog bort en enhet, begränsade en klient till en port på servern, skickade trafik genom en exit node och stoppade styrservern för att se vad som fortsatte att fungera.
Alla klienter kördes på samma server med 2 vCPU som navet, så krypteringen i båda ändar av varje tunnel delade på samma två kärnor. Hastigheterna nedan jämför de tre sätten med varandra på lika villkor. Mellan två riktiga datorer över internet är det oftast din uppkoppling som sätter gränsen.
Siffrorna
| Utan tunnel | WireGuard | Headscale och Tailscales app | |
|---|---|---|---|
| Klient till server, hastighet | 18,3 Gbit/s | 1,15 Gbit/s | 1,34 Gbit/s |
| Klient till server, fördröjning | 0,12 ms | 0,55 ms | 1,2 ms |
| Klient till klient, hastighet | 14,8 Gbit/s | 683 Mbit/s, via servern | 1,20 Gbit/s direkt, genom NAT |
| Klient till klient, fördröjning | 0,17 ms | 0,83 ms, via servern | 1,2 ms direkt |
| Klient till klient, via relä | 52 Mbit/s, 3,3 ms | ||
| Tid för guidens kommandon | omkring 20 sekunder | omkring 45 sekunder, och några sekunder per enhet | |
| Minne på servern | i stort sett inget: den är en del av Linux-kärnan | Headscale 16 till 20 MB, och omkring 50 MB för Tailscale-appen på varje enhet | |
| Disk | under 1 MB paket | Headscales avbild 78 MB, dess data under 1 MB, och 75 MB för Tailscale-paketet på varje Linux-enhet | |
| Containrar | inga | 1 |
Tiderna är hur länge kommandona tog att köra, inte tiden du behöver för att läsa guiden och skriva in dem. Headscale behöver också ett namn med certifikat innan enheter kan ansluta; Caddy fick det inom en minut.
Installation
WireGuard är några paket, ett nyckelpar per enhet och en konfigurationsfil på servern med ett [Peer]-block per enhet. Varje enhet får en egen fil, eller en QR-kod för en telefon. Den är snabbast att få igång, och det finns inget att hålla uppdaterat utöver Debians paket. Vår guide sätter upp servern som en VPN ut mot internet. För att enheterna också ska nå varandra via servern behövde vi ufw route allow in on wg0 out on wg0, som inte finns i guiden.
Headscale är en container bakom Caddy, med en A- och AAAA-post och STUN-porten öppen. Varje enhet kör Tailscale-appen, pekad mot din server. Telefoner och datorer loggar in via en länk, och du godkänner dem med ett kommando på servern; servrar ansluter med en nyckel som fungerar en gång. Varje steg i vår guide fungerade som det står med Headscale 0.29.5, som precis hade ersatt 0.29.4.
Tailscales värdtjänst behöver enligt dokumentationen ingen server: du loggar in via en identitetsleverantör, installerar appen på varje enhet och loggar in. Det är klart minst jobb av de tre.
Lägga till och ta bort enheter
WireGuard: en ny enhet är ett nytt nyckelpar, ett nytt [Peer]-block och, i vår guide, en rad för dess IPv6-adress, och sedan en omstart av WireGuard. Omstarten kopplade bort alla anslutna enheter i omkring 15 sekunder innan deras tunnlar kom tillbaka. wg set kan lägga till en enhet utan omstart, men då kan filen och det som körs glida isär. Att ta bort en enhet är samma sak baklänges. Tar du bort dess rader i wg0.conf före omstarten blir dess IPv6-proxy kvar, eftersom WireGuard läser den nya filen när den stoppar; ta bort den med ip -6 neigh del proxy ADRESS dev eth0.
Headscale: en ny enhet med nyckel var ansluten 8,5 sekunder efter att vi skapade nyckeln. headscale nodes delete stängde ute en enhet direkt, och den försvann ur de andra enheternas listor. Inget startas om och ingen annan märker något.
Tailscale: samma sak, från administrationskonsolen, med godkännande av enheter och inbjudningar ovanpå.
Direkt, genom NAT eller via relä
WireGuard ansluter varje enhet till adressen i dess Endpoint, servern. En enhet bakom NAT når servern men inte en annan enhet bakom NAT, så i praktiken går allt via navet. Det passar ett team som ska nå servrar, men trafiken mellan två enheter tar dubbla vägen: vår hastighet från klient till klient via servern var ungefär hälften av vad Tailscales app klarade direkt.
Headscale med Tailscale-appen fick en direkt anslutning från klienten bakom NAT till de andra: tailscale ping svarade via den andra klientens adress och port, inte via DERP. När vi blockerade all UDP från den klienten gick den över till Headscales eget relä, via DERP(headscale), med 52 Mbit/s och 3,3 ms i stället för 1,2 Gbit/s och 1,2 ms. Trafik via reläet är fortfarande krypterad hela vägen, men reläet är en flaskhals: räkna med det om dina enheter sitter bakom brandväggar som stoppar UDP.
Tailscales värdtjänst använder samma appar och ansluter direkt på samma sätt, och går via Tailscales DERP-servrar runt om i världen när det inte går. Dokumentationen beskriver också peer relays, egna enheter som skickar vidare trafik åt andra.
Namn
WireGuard har inga namn. Du använder adresser, skriver in namn i varje enhets hosts-fil eller kör en egen DNS-server som Unbound.
Headscale gav varje enhet ett namn med MagicDNS, som c2.tail.example.com, och klienterna slog upp varandras namn. Tailscale-appen på Linux skriver om /etc/resolv.conf till 100.100.100.100 medan den är ansluten, också på servern, och återställer den med tailscale down.
Tailscale gör samma sak, med namn under en ts.net-domän som Tailscale väljer.
Åtkomstregler
Vi begränsade en klient till TCP-port 8080 på servern och inget annat.
WireGuard: brandväggen på servern är åtkomstkontrollen. ufw allow in on wg0 from 10.8.0.2 to any port 8080 proto tcp lät klienten nå port 8080 och ingen annan; trafik mellan enheter styr du med ufw route-regler. Det fungerar, men reglerna skrivs per adress, och inget kopplar en adress till en person.
Headscale: vår guide sätter inte upp någon policy, och utan en når varje enhet alla andra enheter och alla portar. Vi lade till en policyfil, monterade den i containern och angav den i config.yaml under policy.path, med två grants: anna@ når allt, och bob@ når tcp:8080 på servern. Bobs klient nådde port 8080 och inget annat, och kunde inte pinga Annas enheter, medan Annas kunde pinga hans. Reglerna följer användare och taggar, inte adresser.
En sak att känna till: Tailscale-appen lägger in en egen brandväggskedja före ufw och släpper igenom allt på tailscale0. Dina ufw-regler gäller alltså inte för trafik över ditt tailnet, så det är policyn som skyddar servern.
Tailscale använder samma policyspråk, som du redigerar i administrationskonsolen, med tester och en historik över ändringar. Gratispaketet Personal tillåter tre grupper, Standard 10 och Premium 300.
Exit nodes och subnät
WireGuard: vår guide är redan en exit node: enheter med AllowedIPs = 0.0.0.0/0, ::/0 surfar via servern, och varje enhet får en egen publik IPv6-adress. För att nå ett nätverk bakom en enhet lägger du till det i AllowedIPs på båda sidor och routar det.
Headscale: vi gjorde servern till exit node med tailscale set --advertise-exit-node, och en klient till router för ett nätverk bakom den med --advertise-routes. Båda behövde godkännas med headscale nodes approve-routes, och sedan surfade klienten med serverns IPv4- och IPv6-adress, och servern nådde nätverket bakom klienten. Inget av det finns i vår guide. Till skillnad från vår WireGuard-guide delar enheterna serverns IPv6-adress i stället för att få en var.
Tailscale: samma sak, godkänt i administrationskonsolen.
Nycklar och utgångstid
WireGuard-nycklar går aldrig ut. Att byta en betyder ett nytt nyckelpar och ändringar i både enhetens fil och serverns, och en enhet du glömmer att ta bort fortsätter att fungera.
Headscale-nycklar går inte heller ut som standard (node.expiry: 0). Du kan ställa in en standardtid, eller låta en enhet gå ut med headscale nodes expire, som loggade ut vår klient direkt. När den loggade in igen med tailscale up --force-reauth fick den en ny nyckel och behöll sitt namn och sin adress.
Tailscale låter enheternas nycklar gå ut efter 180 dagar som standard, går att ändra mellan 1 och 180 dagar, och kan stänga av utgångstiden per enhet, enligt dokumentationen.
Det här vet styrservern
WireGuard har ingen styrserver. Din server känner till varje enhets publika nyckel, tunneladress och den adress den senast anslöt från.
Headscale sparar för varje enhet: användare, namn, nycklar, tunneladresser, de publika och lokala adresser den kan nås på, när den senast sågs, och det den rapporterar om sig själv: operativsystem och kärnversion, appversion, distribution, om UDP fungerar och vilket relä som är närmast. Den loggade också den riktiga adress varje enhet anslöt från. Allt ligger på din server, i en SQLite-fil.
Tailscale-appen skickar själv loggar till log.tailscale.com som standard. Headscale säger åt apparna att sluta, men våra klienter hade redan skickat omkring 7,5 kB loggar från starten innan de anslöt till den. Vill du att inget skickas, starta appen med --no-logs-no-support, eller på Linux, skriv TS_NO_LOGS_NO_SUPPORT=true i /etc/default/tailscaled.
Tailscales värdtjänst ser samma information om enheterna, och vem som loggade in via vilken identitetsleverantör. Apparna skickar också loggar om vad de gör till Tailscale, bland annat när anslutningar öppnas och stängs, om du inte stänger av det per enhet; Tailscale skriver att de då kanske inte kan ge support. Network flow logs, som visar vilka enheter som pratar med vilka, är frivilliga och ingår i Premium.
När styrservern ligger nere
WireGuard: navet är nätverket. Ligger servern nere gör allt som går genom den det också.
Headscale: vi stoppade den. Direkta anslutningar fortsatte att fungera så länge vi tittade, och namnen fortsatte att slås upp. Anslutningen via relä slutade direkt, eftersom Headscales relä körs i samma container. En klient som vi startade om medan Headscale låg nere kom tillbaka utloggad och nådde ingen, och nya enheter kunde inte ansluta. När Headscale startade igen var den omstartade klienten tillbaka inom 4 sekunder och den via relä inom 6.
Tailscales värdtjänst är byggd på samma sätt: enligt dokumentationen och Tailscales tekniska blogg fortsätter befintliga anslutningar att fungera, medan nya enheter och ändrade regler får vänta. Dess reläer är separata servrar på många platser, så de går inte ner med styrservern.
Appar
WireGuard har officiella appar för Android, iOS, macOS, Windows och Linux, och finns inbyggt i många routrar. Den har bredast stöd av de tre.
Headscale fungerar med Tailscales officiella appar för Linux, Windows, macOS, Android, iOS och iPadOS; du pekar varje app mot din server med några tryck i en debug- eller kontomeny. Headscales dokumentation listar exit nodes, subnet routers, MagicDNS, Taildrop, Taildrive och Tailscale SSH som stödda, och Funnel, Serve och network flow logs som inte klara. Den har inget eget webbgränssnitt: du sköter den med kommandon på servern.
Tailscale har samma appar, och en administrationskonsol på webben för enheter, användare och regler.
Uppdateringar och säkerhetskopior
WireGuard är en del av Linux-kärnan, och verktygen kommer från Debian, så unattended-upgrades håller den uppdaterad. Säkerhetskopiera /etc/wireguard, där alla nycklar ligger.
Headscale följer taggen 0.29, som Podman uppdaterar varje dag. Till 0.30 och senare uppgraderar du för hand, en version i taget, efter att ha läst versionsinformationen. Säkerhetskopian är en volym och konfigurationsfilen. Tailscale-apparna uppdateras för sig; Headscale 0.29 avvisar appar äldre än 1.80.
Tailscales värdtjänst uppdateras av Tailscale; du uppdaterar bara apparna.
Licens och kostnad
Vi kontrollerade projektens licenser och Tailscales prissida den 14 oktober 2026.
- WireGuard är GPLv2 i Linux-kärnan och i
wireguard-tools. Apparna är MIT, och Apache 2.0 på Android. Den kostar ingenting. - Headscale är BSD 3-clause. Det är ett fristående projekt, skilt från Tailscale Inc. Den kostar ingenting.
- Tailscales klient,
tailscaledoch kommandottailscale, är BSD 3-clause. Styrservern och de grafiska apparna för macOS, Windows och iOS är inte öppen källkod. Paketen:- Personal, gratis, för upp till 6 användare och bara icke-kommersiellt bruk.
- Standard, 8 dollar per användare och månad.
- Premium, 18 dollar per användare och månad, med network flow logs, loggströmning och fler grupper.
- Enterprise, pris på förfrågan.
Företag får prova i 14 dagar. Ett team som använder Tailscale i jobbet behöver Standard eller högre, så ett team på tio personer betalar 80 dollar i månaden.
Vilken ska du välja?
- Några personer som ska nå en eller två servrar? Vanlig WireGuard. Den är snabbast per anslutning, har inget att köra utöver kärnan, inget att logga in på och inget som går ut. Svagheterna: varje ändring är en ändring i en fil och, i vår guide, en omstart som kopplar bort alla i några sekunder; enheter når bara varandra via servern; det finns inga namn; och åtkomstregler är brandväggsregler per adress.
- Ett team med datorer, telefoner och servrar på många ställen, och du vill äga styrservern? Headscale. Du får direkta anslutningar genom NAT, namn, åtkomstregler per användare, exit nodes och inget att betala, med din lista över enheter på din egen server. Svagheterna: du kör och uppdaterar en tjänst till, det finns inget webbgränssnitt, åtkomstregler kräver en policyfil som vår guide inte sätter upp, reläet går ner med den, Tailscale-appen går förbi ufw, och apparna skickar loggar från starten till Tailscale om du inte stänger av det.
- Samma sak, men du vill inte köra något själv? Tailscales värdtjänst. Den är minst jobb och mest färdig, med en administrationskonsol, reläer runt om i världen och support. Svagheterna: Tailscale ser alla dina enheter, gratispaketet är inte för jobbet, och ett team betalar 8 dollar per användare och månad eller mer.
WireGuard och Headscale går båda bra att köra på paketet Alloy och använder nästan inget minne, så samma server kan köra dina andra appar. Headscale behöver grunden från Podman-guiden med Caddy; WireGuard behöver bara Debian.