Hur man installerar WireGuard VPN + Web UI på Ubuntu
Upplysning: Denna artikel innehåller affiliatelänkar. Jag kan få en provision när du köper via dessa länkar utan extra kostnad för dig.
När du ansluter till ett kafés WiFi eller använder internet från ett offentligt nätverk, färdas dina data genom infrastruktur som du inte kontrollerar. Alla som befinner sig mellan dig och de webbplatser du besöker skulle potentiellt kunna avlyssna din trafik, även i ditt hemnätverk kan din internetleverantör se varje sida du besöker.
En VPN löser detta genom att skapa en krypterad tunnel mellan din enhet och en server som du litar på. Istället för att din trafik går direkt till internet, reser den först genom denna säkra tunnel till din VPN-server, som sedan vidarebefordrar den till sin destination, så alla som bevakar nätverket ser endast krypterad data som går till din VPN-server, inget mer.
WireGuard är ett modernt VPN-protokoll som utför detta jobb på ett enastående sätt. Till skillnad från äldre VPN-teknologier som kräver hundratusentals rader kod, klarar WireGuard samma uppgift med bara ungefär 4 000 rader, vilket innebär färre buggar, bättre prestanda och lättare säkerhetsrevisioner.
Men här är saken: medan WireGuard i sig är enkelt, kan det bli tidskrävande att hantera flera VPN-klienter, generera konfigurationsfiler och hålla reda på vem som har tillgång enbart via kommandoraden, därför är det praktiskt att ha ett webbgränssnitt.
I den här guiden kommer vi att sätta upp en komplett WireGuard VPN-server med ett användarvänligt webbgränssnitt som låter dig hantera allt genom din webbläsare, såsom att lägga till nya enheter, generera QR-koder för mobila klienter och övervaka anslutningar utan att behöva röra en enda konfigurationsfil manuellt.
Vad du kommer att behöva
Innan vi börjar, se till att du har:
- En Linux-server med en publik IP-adress (en VPS från leverantörer som DigitalOcean, Linode eller AWS fungerar perfekt).
- Rootåtkomst eller sudo-behörigheter på denna server.
- En grundläggande förståelse av SSH (du bör veta hur man ansluter till din server).
Denna guide antar att du kör Ubuntu 22.04 eller Ubuntu 24.04, men stegen fungerar på liknande sätt på Debian och andra distributioner med små justeringar.
Förstå arkitekturen
Låt oss ta ett ögonblick för att förstå vad vi bygger innan vi börjar skriva kommandon.
En WireGuard-installationen består av noder – enheter som kan kommunicera med varandra genom krypterade tunnlar.
I vårt fall kommer vi att ha:
- Servern: Din Linux-dator med en publik IP-adress, som fungerar som den centrala navet som alla dina enheter ansluter till.
- Kunderna: Din laptop, telefon, surfplatta eller vilken annan enhet du vill skydda, varje klient får sitt eget kryptografiska nyckelpar och konfiguration.
- Webbgränssnittet: En lättviktig webbapplikation (vi kommer att använda WireGuard-UI) som körs på din server och ger dig en instrumentpanel för att hantera allt.
När en klient vill ansluta, etablerar den en direkt krypterad tunnel till servern och sedan vidarebefordrar servern klientens internettrafik eller tillåter helt enkelt åtkomst till resurser på serverns lokala nätverk, beroende på hur du konfigurerar det.
Steg 1: Installera WireGuard på Ubuntu-server
Först, låt oss se till att ditt system är uppdaterat och har de nödvändiga verktygen installerade genom att använda följande kommando, som uppdaterar dina paketlistor och uppgraderar eventuell föråldrad mjukvara.
sudo apt update && sudo apt upgrade -y
Nästa steg är att installera WireGuard:
sudo apt install wireguard -y
Eftersom WireGuard är inbyggt i Linux-kärnan (för kärnor 5.6 och högre), installerar detta kommando främst användarrymtsverktygen som behövs för att konfigurera och hantera WireGuard-gränssnitt.
Steg 2: Aktivera IP-vidarebefordran på Ubuntu
Som standard skickar Ubuntu inte vidare paket mellan nätverksgränssnitt, vilket är en säkerhetsfunktion som gör att din server inte fungerar som en router om du inte uttryckligen säger åt den att göra det, men för en VPN-server behöver vi denna funktionalitet.
När din telefon ansluter till VPN och försöker besöka en webbplats, behöver servern vidarebefordra den begäran från WireGuard-gränssnittet till sitt offentliga nätverksgränssnitt och sedan skicka tillbaka svaret.
För att möjliggöra IP-vidarebefordran permanent behöver vi redigera en systemkonfigurationsfil:
sudo nano /etc/sysctl.conf
Sök efter den här raden (den kan vara utkommenterad med en # i början):
#net.ipv4.ip_forward=1
Ta bort # för att avkommentera det, eller lägg till raden om den inte finns:
net.ipv4.ip_forward=1
Spara filen och tillämpa sedan ändringen utan att starta om:
sudo sysctl -p
Steg 3: Konfigurera brandvägg och routing för WireGuard
Din VPN-server behöver acceptera inkommande anslutningar på den port som WireGuard använder (som standard UDP-port 51820). Den behöver också korrekt vidarebefordra trafik mellan VPN-gränssnittet och ditt offentliga nätverksgränssnitt.
Först, låt oss identifiera ditt publika nätverksgränssnitt:
ip route | grep default
Du kommer att se resultat som:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
Gränssnittsnamnet här är `eth0`, men det kan vara annorlunda på ditt system, det kan vara `ens3`, `enp0s3`, eller något liknande.
Nu ska vi konfigurera ufw-brandväggen (Ubuntus standardbrandvägg):
# Allow SSH (if you haven't already)
sudo ufw allow 22/tcp
# Allow WireGuard
sudo ufw allow 51820/udp
# Allow the web interface (we'll use port 5000)
sudo ufw allow 5000/tcp
Nästa steg är att lägga till en NAT (Network Address Translation)-regel som talar om för din server att dölja VPN-trafiken så att det ser ut som om den kommer från servern själv när den vidarebefordras till internet.
sudo nano /etc/ufw/before.rules
Lägg till dessa rader högst upp i filen, direkt efter rubrikkommentarerna, men före *filter-raden och ersätt eth0 med ditt faktiska gränssnittsnamn:
# NAT table rules for WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Det här betyder det:
*nat: Vi arbetar med NAT-tabellen.-s 10.0.0.0/24: För paket som kommer från vårt VPN-nätverk (10.0.0.0/24 är det subnet vi kommer att tilldela VPN-klienter).-o eth0: Går ut via eth0-gränssnittet.-j MASQUERADE: Skriv om käll-IP-adressen till serverns offentliga IP.
Spara och avsluta, aktivera sedan och läs om UFW:
sudo ufw enable
sudo ufw reload
Steg 4: Installera WireGuard-UI på Ubuntu-server
Nu kommer den intressanta delen, att sätta upp webbgränssnittet med WireGuard-UI, som är en ren och enkel webbapplikation skriven i Go.
Först, skapa en katalog för WireGuard-UI:
sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui
Ladda sedan ner den senaste versionen av WireGuard-UI från GitHub-sidan för utgåvor, men vid skrivandets stund får wget-kommandot en senaste stabila version:
sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
När det har laddats ner, extrahera det och gör det körbart:
sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui
Innan vi startar gränssnittet, låt oss skapa en systemd-tjänst så att den startar automatiskt vid uppstart.
sudo nano /etc/systemd/system/wireguard-ui.service
Klistra in denna konfiguration:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Spara och avsluta, aktivera sedan tjänsten och starta den:
sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui
Kontrollera att det körs:
sudo systemctl status wireguard-ui
Steg 5: Åtkomst till Wireguard-UI
Öppna din webbläsare och gå till följande URL, se till att ersätta YOUR_SERVER_IP med din servers faktiska publika IP-adress.
http://YOUR_SERVER_IP:5000
Du kommer att se en inloggningssida, där du kan använda följande standarduppgifter:
Username: admin
Password: admin
Viktigt: Byt dessa omedelbart efter att du loggat in. Klicka på ditt användarnamn uppe till höger, sedan på “Inställningar” och uppdatera ditt lösenord.
Steg 6: Konfigurera din WireGuard-server
När du har loggat in kommer du att tas till WireGuard-UI-instrumentpanelen. För att börja konfigurera din server, klicka på „WireGuard Server“ i den vänstra sidomenyn och ställ in Interfacenamn till 10.0.0.1/24 (standard WireGuard-interface) och Listen Port till 51820.
I fältet Post Up Script, ange:
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
och i fältet Post Down Script skriver du:
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Se till att ersätta eth0 med ditt faktiska nätverksgränssnitt om det är annorlunda och ställ in Address to 10.0.0.1/24, vilket kommer att vara serverns interna VPN-IP-adress.
När du klickar på Apply Config kommer WireGuard att skapa wg0-gränssnittet, lyssna efter VPN-anslutningar på port 51820, tilldela din server dess VPN-IP och konfigurera brandväggsregler för att korrekt vidarebefordra VPN-trafik.
Gränssnittet kommer också automatiskt att generera din servers privata och publika nycklar. Efter att inställningarna har tillämpats bör gränssnittet visa Aktiv, vilket indikerar att din WireGuard-server är igång och fungerar.
Steg 7: Lägg till din första WireGuard-klient
Nu låt oss lägga till en enhet till ditt VPN, vilket kan vara din laptop, telefon eller någon annan klientenhet. Från vänstra sidofältet, klicka på "Klienter", och klicka sedan på "Lägg till ny klient".
Ge klienten ett beskrivande namn som „Min bärbara dator“ eller „iPhone“, och ange eventuellt en e-postadress för att lättare kunna identifiera enheten senare. Klicka på „Auto“ för att automatiskt tilldela nästa tillgängliga IP-adress (troligen 10.0.0.2).
För Tillåtna IP-adresser, ange 0.0.0.0/0, ::/0, vilket säkerställer att all trafik från klienten går genom VPN; om du bara vill ha åtkomst till serverns interna nätverk kan du istället ange det subnetet (till exempel 10.0.0.0/24).
När allt är inställt, klicka på “Skicka” så kommer webbgränssnittet automatiskt att generera en komplett WireGuard-konfiguration för denna klient, inklusive dess egna kryptografiska nyckelpar.
Steg 8: Ansluta din klientenhet
Nu behöver du få konfigurationen på din enhet och WireGuard-UI gör detta enkelt med QR-koder för mobila enheter och nedladdningsbara konfigurationsfiler för datorer.
För mobila enheter (telefon/surfplatta):
- Installera WireGuard-appen från din appbutik (den finns för både iOS och Android).
- I webbgränssnittet WireGuard-UI, hitta din nyss skapade klient och klicka på QR-kodikonen.
- Öppna WireGuard-appen på din telefon, tryck på
"+"-knappen och välj “Skapa från QR-kod“. - Skanna QR-koden som visas i din webbläsare.
- Ge din anslutning ett namn och tryck på «Skapa Tunnel».
Det är allt! Växla på strömbrytaren för att ansluta, och din mobila enhet skickar nu all sin trafik genom din VPN-server.
För stationär dator/bärbar dator:
- Installera WireGuard från wireguard.com/install.
- I WireGuard-UI-gränssnittet, klicka på nedladdningsikonen bredvid din klient för att ladda ner
.conf-filen. - Öppna WireGuard-applikationen på din dator, klicka på “Importera tunnel(s) från fil” och välj den nedladdade konfigurationsfilen.
- Klicka på «Aktivera» för att ansluta.
Steg 9: Testa din VPN
Låt oss se till att allt fungerar som det ska. Först, medan din VPN är frånkopplad, besök whatismyipaddress.com och notera den IP-adress som visas.
Anslut sedan till din WireGuard VPN och uppdatera sidan. Din IP-adress bör nu visa serverns offentliga IP istället för din ursprungliga, vilket bekräftar att trafiken routas genom VPN:et.
För att ytterligare verifiera att DNS fungerar korrekt kan du köra följande kommando på din anslutna enhet:
ping google.com
Om du ser svar betyder det att din VPN dirigerar trafiken korrekt.
För att se aktiva anslutningar på din server, logga in via SSH och kör:
sudo wg show
Du kommer att se resultat som:
interface: wg0
public key: [your server's public key]
private key: (hidden)
listening port: 51820
peer: [client's public key]
endpoint: [client's IP]:random_port
allowed ips: 10.0.0.2/32
latest handshake: 45 seconds ago
transfer: 2.50 MiB received, 15.23 MiB sent
Detta visar att din klient är ansluten, när den senast kommunicerade med servern och hur mycket data som har överförts.
Steg 10: Använd HTTPS för WireGuard-UI
Just nu, när du går in på ditt WireGuard-webbgränssnitt på http://YOUR_SERVER_IP:5000, skickas dina inloggningsuppgifter och all konfigurationsdata över internet i klartext, och vem som helst som avlyssnar trafiken mellan din webbläsare och servern kan se ditt administratörslösenord och potentiellt kapa din session.
Lösningen är att placera ditt webbgränssnitt bakom en omvänd proxy med HTTPS aktiverat. En omvänd proxy står framför din applikation, hanterar alla krypterade HTTPS-anslutningar från klienter och vidarebefordrar sedan förfrågningarna till din applikation över det lokala nätverket där avlyssning inte är ett problem.
Vi kommer att använda Nginx (högpresterande webbserver) som vår omvända proxy och Let’s Encrypt för att få ett gratis SSL-certifikat så att du kan få åtkomst till ditt WireGuard-gränssnitt på https://vpn.dindomän.com istället för en IP-adress med HTTP.
Installera Nginx webbserver
Först behöver du skapa en DNS-post för din domän (https://vpn.yourdomain.com) som pekar på din servers IP-adress och sedan installera Nginx-webbserver.
sudo apt update
sudo apt install nginx -y
Efter installationen kan du besöka http://vpn.yourdomain.com i din webbläsare och du kommer att se Nginx standardsida, vilket betyder att Nginx fungerar och är åtkomlig från internet.
Installera Certbot för Let’s Encrypt
Nästa steg är att installera Let’s Encrypt, som är en gratis certifikatutfärdare som tillhandahåller SSL-certifikat, och certbot är ett verktyg som automatiserar processen att skaffa och förnya dessa certifikat.
sudo apt install certbot python3-certbot-nginx -y
Paketet python3-certbot-nginx inkluderar en plugin som automatiskt kan konfigurera Nginx åt dig, vilket gör processen mycket enklare.
Konfigurera Nginx som en omvänd proxy
Nu ska vi skapa en Nginx-konfiguration som vidarebefordrar förfrågningar från https://vpn.yourdomain.com till din WireGuard-UI-applikation som körs på localhost:5000.
Skapa en ny konfigurationsfil.
sudo nano /etc/nginx/sites-available/wireguard-ui
Klistra in denna konfiguration (byt ut vpn.yourdomain.com mot din faktiska domän):
server {
listen 80;
listen [::]:80;
server_name vpn.yourdomain.com;
# This will be used by Certbot for the SSL certificate challenge
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# Redirect all other HTTP traffic to HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vpn.yourdomain.com;
# SSL certificate paths (Certbot will fill these in)
ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;
# Modern SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
# Proxy settings
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
# WebSocket support (if WireGuard-UI uses it)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Forward real client information
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Aktivera nu denna konfiguration genom att skapa en symbolisk länk:
sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/
Testa din Nginx-konfiguration för syntaxfel:
sudo nginx -t
Du borde se:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Om du ser några fel, gå tillbaka och kontrollera din konfigurationsfil för stavfel.
Skaffa ett SSL-certifikat
När allt är korrekt konfigurerat är det nu dags att köra certbot-kommandot som automatiskt kommer att hämta ett SSL-certifikat från Let’s Encrypt och konfigurera Nginx för att använda det.
sudo certbot --nginx -d vpn.yourdomain.com
Hela processen tar ungefär 30 sekunder, och när den är klar kommer du att se ett meddelande om att det lyckades:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem
Ladda nu om Nginx för att tillämpa allt:
sudo systemctl reload nginx
Certifikat Automatisk Förnyelse
Let’s Encrypt-certifikat är endast giltiga i 90 dagar, vilket är avsiktligt för att uppmuntra regelbunden förnyelse och begränsa potentiella skador om en privat nyckel någonsin skulle komprometteras.
Lyckligtvis ställer Certbot automatiskt in en förnyelsetimer när det installeras, och du kan bekräfta att förnyelsetjänsten är aktiv genom att köra:
sudo systemctl status certbot.timer
och du bör se det listat som aktivt (körs), denna timer kontrollerar två gånger om dagen och förnyar automatiskt alla certifikat som har mindre än 30 dagar kvar till utgång.
För att verifiera att allt fungerar utan att utföra en faktisk förnyelse, kör:
sudo certbot renew –dry-run
Om testet slutförs framgångsrikt är din automatiska certifikatförnyelse helt konfigurerad, och du behöver inte oroa dig för att dina certifikat ska gå ut.
Uppdatera din brandvägg
Eftersom vi nu får åtkomst till WireGuard-UI via Nginx på standard-HTTPS-porten (443), behöver vi tillåta detta i vår brandvägg och kan valfritt stänga direktåtkomst till port 5000.
sudo ufw allow 443/tcp
Valfritt, om du vill förhindra direktåtkomst till WireGuard-UI på port 5000 (och tvinga alla att använda HTTPS-gränssnittet), kan du ta bort den regeln:
sudo ufw delete allow 5000/tcp
Ladda om brandväggen:
sudo ufw reload
Steg 11: Konfigurera WireGuard-UI för att endast lyssna på localhost
Eftersom Nginx nu hanterar alla externa anslutningar, bör vi konfigurera WireGuard-UI för att endast acceptera anslutningar från den lokala datorn, vilket förhindrar att någon kan komma åt den direkt på port 5000, även om de upptäcker att porten är öppen.
Stoppa WireGuard-UI-tjänsten:
sudo systemctl stop wireguard-ui
Redigera tjänstefilen:
sudo nano /etc/systemd/system/wireguard-ui.service
Ändra ExecStart-raden så att den bara binder till localhost:
[Unit]
Description=WireGuard UI
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
Environment="BIND_ADDRESS=127.0.0.1:5000"
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Spara och avsluta, sedan ladda om systemd och starta om tjänsten:
sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui
Slutligen, öppna din webbläsare och gå till:
https://vpn.yourdomain.com
Du bör se en hänglåsikon i din webbläsares adressfält, du kan klicka på hänglåsikonen för att se certifikatets detaljer. Du kommer att se att det utfärdats av Let’s Encrypt och är giltigt i 90 dagar.
Sammanfattning
Vid det här laget har du framgångsrikt driftsatt en fullt fungerande WireGuard VPN-server med ett säkert webbaserat administrationsgränssnitt. Istället för att hantera nycklar, konfigurationsfiler och routningsregler manuellt, ger WireGuard-UI dig en enkel instrumentpanel för att lägga till nya enheter, generera QR-koder och övervaka aktiva anslutningar.






