Kako instalirati WireGuard VPN + Web UI na Ubuntu


Otkriće: Ovaj članak sadrži partnerske poveznice. Mogu zaraditi proviziju kada kupujete putem ovih poveznica, a da vam to ne povećava trošak.

Kada se povežete na WiFi u kafiću ili pristupate internetu s bilo koje javne mreže, vaši podaci putuju kroz infrastrukturu koju ne kontrolirate. Bilo tko tko se nalazi između vas i web stranica koje posjećujete mogao bi potencijalno presresti vaš promet, čak i na vašoj kućnoj mreži, vaš pružatelj internetskih usluga može vidjeti svaku stranicu koju pregledavate.

VPN ovo rješava stvaranjem šifriranog tunela između vašeg uređaja i servera kojem vjerujete. Umjesto da vaš promet ide izravno na internet, on prvo putuje kroz ovaj siguran tunel do vašeg VPN servera, koji ga zatim prosljeđuje na odredište, tako da svatko tko promatra mrežu vidi samo šifrirane podatke koji idu prema vašem VPN serveru, ništa više.

WireGuard je moderan VPN protokol koji ovaj posao obavlja izvanredno. Za razliku od starijih VPN tehnologija koje zahtijevaju stotine tisuća linija koda, WireGuard istu zadaću izvršava s otprilike 4.000 linija, što znači manje bugova, bolju izvedbu i lakše sigurnosne provjere.

Ali evo u čemu je stvar: iako je WireGuard sam po sebi jednostavan, upravljanje s više VPN klijenata, generiranje konfiguracijskih datoteka i praćenje tko ima pristup može postati zamorno samo kroz naredbeni redak, zato je korisno imati web sučelje.

U ovom vodiču postavit ćemo kompletan WireGuard VPN server s prijateljskim web sučeljem koje vam omogućuje upravljanje svime putem preglednika, kao što je dodavanje novih uređaja, generiranje QR kodova za mobilne klijente i praćenje veza bez potrebe za ručnim uređivanjem ijedne konfiguracijske datoteke.

Što će vam trebati

Prije nego što počnemo, provjerite imate li:

  • Linux poslužitelj s javnom IP adresom (VPS od pružatelja poput DigitalOcean, Linode ili AWS savršeno funkcionira).
  • Root pristup ili sudo privilegije na ovom serveru.
  • Osnovno razumijevanje SSH-a (trebali biste znati kako se povezati na svoj poslužitelj).

Ovaj vodič pretpostavlja da koristite Ubuntu 22.04 ili Ubuntu 24.04, ali koraci su slični i na Debianu i drugim distribucijama uz manje prilagodbe.

Razumijevanje arhitekture

Uzmimo trenutak da shvatimo što gradimo prije nego što počnemo unositi naredbe.

Postavljanje WireGuard-a sastoji se od peer uređaja – uređaja koji mogu međusobno komunicirati putem šifriranih tunela.

U našem slučaju, imat ćemo:

  • Poslužitelj: Vaše Linux računalo s javnom IP adresom, koje djeluje kao središnji čvor na koji se povezuju svi vaši uređaji.
  • Klijenti: Vaše prijenosno računalo, telefon, tablet ili bilo koji drugi uređaj koji želite zaštititi, svaki klijent dobiva vlastiti kriptografski par ključeva i konfiguraciju.
  • Web sučelje: Lagana web aplikacija (koristit ćemo WireGuard-UI) koja radi na vašem serveru i pruža vam nadzornu ploču za upravljanje svime.

Kada se klijent želi povezati, uspostavlja izravni šifrirani tunel do poslužitelja, a zatim poslužitelj usmjerava internetski promet klijenta ili jednostavno dopušta pristup resursima na lokalnoj mreži poslužitelja, ovisno o tome kako ga konfigurirate.

Korak 1: Instalacija WireGuarda na Ubuntu server

Prvo, provjerimo je li vaš sustav ažuran i ima li instalirane potrebne alate pomoću sljedeće naredbe, koja će ažurirati popise paketa i nadograditi sav zastario softver.

sudo apt update && sudo apt upgrade -y

Zatim instalirajte WireGuard:

sudo apt install wireguard -y

Budući da je WireGuard ugrađen u Linux kernel (za kernels 5.6 i novije), ova naredba prvenstveno instalira korisničke alate potrebne za konfiguriranje i upravljanje WireGuard sučeljima.

Instalirajte WireGuard na Ubuntu

Korak 2: Omogućavanje IP prosljeđivanja na Ubuntuu

Po defaultu, Ubuntu ne prosljeđuje pakete između mrežnih sučelja, što je sigurnosna značajka koja sprječava vaš poslužitelj da djeluje kao usmjerivač osim ako mu to izričito ne kažete, ali za VPN poslužitelj, potrebna nam je ta funkcionalnost.

Kada se vaš telefon poveže na VPN i pokuša posjetiti web stranicu, poslužitelj mora proslijediti taj zahtjev s WireGuard sučelja na svoje javno mrežno sučelje, a zatim proslijediti odgovor natrag.

Da bismo trajno omogućili prosljeđivanje IP-a, moramo urediti konfiguracijsku datoteku sustava:

sudo nano /etc/sysctl.conf

Potražite ovaj redak (možda je komentiran s # na početku):

#net.ipv4.ip_forward=1

Uklonite # da ga odkomentirate, ili dodajte liniju ako ne postoji:

net.ipv4.ip_forward=1

Spremite datoteku i zatim primijenite promjenu bez ponovnog pokretanja:

sudo sysctl -p

Omogući prosljeđivanje IP-a na Ubuntu

Korak 3: Konfigurirajte vatrozid i usmjeravanje za WireGuard

Vaš VPN poslužitelj treba prihvaćati dolazne veze na portu koji WireGuard koristi (po zadanim postavkama, UDP port 51820). Također, treba ispravno usmjeravati promet između VPN sučelja i vašeg javnog mrežnog sučelja.

Prvo, identificirajmo vaše javno mrežno sučelje:

ip route | grep default

Vidjet ćete izlaz poput:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100

Naziv sučelja ovdje je `eth0`, ali na vašem sustavu može biti drugačiji, može biti `ens3`, `enp0s3` ili nešto slično.

Sada konfigurirajmo ufw vatrozid (Ubuntuov zadani vatrozid):

# 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

Sljedeće, trebamo dodati NAT (Prevođenje mrežnih adresa) pravilo koje govori vašem poslužitelju da maskira VPN promet kao da dolazi sam od poslužitelja prilikom prosljeđivanja prema internetu.

sudo nano /etc/ufw/before.rules

Dodajte ove retke na vrh datoteke, odmah nakon komentara zaglavlja, ali prije linije *filter i zamijenite eth0 s imenom vašeg stvarnog sučelja:

# NAT table rules for WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT

Ovo znači sljedeće:

  • *nat: Radimo s NAT tablicom.
  • -s 10.0.0.0/24: Za pakete koji dolaze iz naše VPN mreže (10.0.0.0/24 je podmreža koju ćemo dodijeliti VPN klijentima).
  • -o eth0: Izlazak putem sučelja eth0.
  • -j MASQUERADE: Prepiši izvornu IP adresu tako da bude javna IP adresa poslužitelja.

Spremi i izađi, zatim omogući i ponovno učitaj UFW:

sudo ufw enable
sudo ufw reload

Korak 4: Instalacija WireGuard-UI na Ubuntu poslužitelju

Sada dolazi zanimljiv dio, postavljanje web sučelja koristeći WireGuard-UI, što je čista i jednostavna web aplikacija napisana u Go-u.

Prvo, kreirajte direktorij za WireGuard-UI:

sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui

Zatim preuzmite najnoviju verziju WireGuard-UI s GitHub stranice za izdanja, ali u vrijeme pisanja, wget naredba dohvaća nedavnu stabilnu verziju:

sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz

Nakon preuzimanja, izdvojite ga i učinite izvršnim:

sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui

Prije nego što pokrenemo sučelje, napravimo systemd servis kako bi se automatski pokretao pri pokretanju sustava.

sudo nano /etc/systemd/system/wireguard-ui.service

Zalijepite ovu konfiguraciju:

[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

Spremi i izađi, zatim omogući i pokreni servis:

sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui

Provjerite radi li:

sudo systemctl status wireguard-ui

Provjeri status Wireguard-UI

Korak 5: Pristupanje Wireguard-UI

Otvorite svoj web preglednik i idite na sljedeću URL adresu, pazite da YOUR_SERVER_IP zamijenite stvarnom javnom IP adresom vašeg poslužitelja.

http://YOUR_SERVER_IP:5000

Vidjet ćete stranicu za prijavu, gdje možete koristiti sljedeće zadane vjerodajnice:

Username: admin
Password: admin

Wireguard-UI Nadzorna ploča

Važno: Promijenite ih odmah nakon prijave. Kliknite na svoje korisničko ime u gornjem desnom kutu, zatim na “Postavke” i ažurirajte svoju lozinku.

Korak 6: Konfiguriranje vašeg WireGuard servera

Kada se prijavite, bit ćete preusmjereni na nadzornu ploču WireGuard-UI. Za početak konfiguracije vašeg poslužitelja, kliknite na „WireGuard Server” u lijevom izborniku i postavite Naziv sučelja na 10.0.0.1/24 (zadano WireGuard sučelje), te Port za slušanje na 51820.

U polje Post Up Script unesite:

iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

i u polje Post Down Script unesite:

iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Pobrinite se da zamijenite eth0 s nazivom vaše stvarne mrežne sučelja ako je drugačije i postavite Address to 10.0.0.1/24, što će biti interna VPN IP adresa poslužitelja.

Kada kliknete Primijeni konfiguraciju, WireGuard će stvoriti wg0 sučelje, slušati VPN veze na portu 51820, dodijeliti vašem poslužitelju njegovu VPN IP adresu i konfigurirati pravila vatrozida kako bi ispravno prosljeđivao VPN promet.

Korisničko sučelje će također automatski generirati privatne i javne ključeve vašeg poslužitelja. Nakon primjene postavki, sučelje bi trebalo prikazivati Aktivno, što znači da je vaš WireGuard poslužitelj pokrenut i radi.

Konfiguriraj WireGuard poslužitelj

Korak 7: Dodajte svog prvog WireGuard klijenta

Sada dodajmo uređaj na vaš VPN, što može biti vaš laptop, telefon ili bilo koji drugi klijentski uređaj. S lijevog bočnog izbornika kliknite na „Klijenti”, zatim kliknite „Dodaj novog klijenta”.

Dajte klijentu opisno ime poput „Moj Laptop” ili „iPhone”, a opcionalno unesite i e-mail kako biste kasnije lakše identificirali uređaj. Kliknite „Auto” kako biste automatski dodijelili sljedeću dostupnu IP adresu (vjerojatno 10.0.0.2).

Za dopuštene IP-ove unesite 0.0.0.0/0, ::/0, što osigurava da sav promet klijenta prolazi kroz VPN; ako želite pristup samo unutarnjoj mreži poslužitelja, umjesto toga možete navesti tu podmrežu (na primjer, 10.0.0.0/24).

Kada je sve postavljeno, kliknite “Pošalji” i web sučelje će automatski generirati kompletnu WireGuard konfiguraciju za ovog klijenta, uključujući njegov vlastiti par kriptografskih ključeva.

Dodaj WireGuard klijenta

Korak 8: Povezivanje vašeg klijentskog uređaja

Sada trebate postaviti konfiguraciju na svoj uređaj, a WireGuard-UI to olakšava pomoću QR kodova za mobilne uređaje i datoteka s konfiguracijom koje se mogu preuzeti za računala.

Za mobilne uređaje (telefon/tablet):

  • Instalirajte aplikaciju WireGuard iz svoje trgovine aplikacijama (dostupna je za iOS i Android).
  • U web sučelju WireGuard-UI pronađite svog novokreiranog klijenta i kliknite ikonu QR koda.
  • Otvorite WireGuard aplikaciju na svom telefonu, dodirnite gumb "+" i odaberite „Create from QR code“.
  • Skenirajte QR kod prikazan u vašem pregledniku.
  • Dajte svojoj vezi ime i dodirnite „Stvori tunel“.

To je to! Prebaci prekidač kako bi se povezao, i tvoj mobilni uređaj sada preusmjerava sav promet kroz tvoj VPN server.

Za stolna računala/laptop

  • Instalirajte WireGuard s wireguard.com/install.
  • U sučelju WireGuard-UI, kliknite ikonu za preuzimanje pored vašeg klijenta kako biste preuzeli .conf datoteku.
  • Otvorite aplikaciju WireGuard na svom računalu, kliknite „Uvezi tunel(e) iz datoteke“ i odaberite preuzetu konfiguracijsku datoteku.
  • Kliknite „Aktiviraj” da biste se spojili.

Korak 9: Testiranje vašeg VPN-a

Pobrinimo se da sve radi ispravno. Prvo, dok je vaš VPN isključen, posjetite whatismyipaddress.com i zabilježite prikazanu IP adresu.

Zatim se povežite na svoj WireGuard VPN i osvježite stranicu, vaša IP adresa sada bi trebala prikazivati javnu IP adresu vašeg poslužitelja umjesto vaše originalne, čime se potvrđuje da se promet usmjerava preko VPN-a.

Za dodatnu provjeru ispravnog funkcioniranja DNS-a, možete pokrenuti sljedeću naredbu na vašem povezanom uređaju:

ping google.com

Ako vidite odgovore, vaš VPN pravilno usmjerava promet.

Da biste vidjeli aktivne veze na svom serveru, prijavite se putem SSH-a i pokrenite:

sudo wg show

Vidjet ćete izlaz poput:

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

Ovo pokazuje da je vaš klijent povezan, kada je posljednji put komunicirao s poslužiteljem i koliko je podataka preneseno.

Korak 10: Koristite HTTPS za WireGuard-UI

Trenutno, kada pristupite svojem WireGuard web sučelju na http://YOUR_SERVER_IP:5000, vaše korisničke vjerodajnice i svi konfiguracijski podaci putuju internetom u običnom tekstu, i svatko tko presretne promet između vašeg preglednika i poslužitelja mogao bi vidjeti vašu administratorsku lozinku i potencijalno preuzeti vašu sesiju.

Rješenje je postaviti vaše web sučelje iza reverznog proxyja s omogućenim HTTPS-om. Reverzni proxy se nalazi ispred vaše aplikacije, obrađuje sve šifrirane HTTPS veze od klijenata, a zatim prosljeđuje zahtjeve vašoj aplikaciji preko lokalne mreže gdje prisluškivanje nije problem.

Koristit ćemo Nginx (visokoučinkovit web poslužitelj) kao naš reverzni proxy i Let’s Encrypt kako bismo dobili besplatni SSL certifikat, tako da ćete moći pristupiti svom WireGuard sučelju na https://vpn.yourdomain.com umjesto putem IP adrese s HTTP-om.

Instaliraj Nginx web poslužitelj

Prvo, trebate stvoriti DNS zapis za svoju domenu (https://vpn.yourdomain.com) koji pokazuje na IP adresu vašeg poslužitelja, a zatim instalirati Nginx web poslužitelj.

sudo apt update
sudo apt install nginx -y

Nakon instalacije, možete posjetiti http://vpn.yourdomain.com u svom pregledniku i vidjet ćete zadanu Nginx početnu stranicu, što znači da Nginx radi i dostupan je s interneta.

Provjeri Nginx stranicu

Instalirajte Certbot za Let’s Encrypt

Dalje, instalirajte Let’s Encrypt, što je besplatna certifikacijska vlast koja pruža SSL certifikate, a certbot je alat koji automatizira proces dobivanja i obnavljanja tih certifikata.

sudo apt install certbot python3-certbot-nginx -y

Paket python3-certbot-nginx uključuje dodatak koji može automatski konfigurirati Nginx za vas, čineći proces mnogo jednostavnijim.

Konfigurirajte Nginx kao reverzni proxy

Sada ćemo napraviti Nginx konfiguraciju koja prosljeđuje zahtjeve s https://vpn.yourdomain.com na vašu WireGuard-UI aplikaciju koja radi na localhost:5000.

Stvorite novu konfiguracijsku datoteku.

sudo nano /etc/nginx/sites-available/wireguard-ui

Zalijepite ovu konfiguraciju (zamijenite vpn.yourdomain.com stvarnom domenom):

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;
    }
}

Sada omogućite ovu konfiguraciju stvaranjem simboličke veze:

sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/

Testirajte svoju Nginx konfiguraciju na sintaksne pogreške:

sudo nginx -t

Trebao bi vidjeti:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ako primijetite bilo kakve pogreške, vratite se i provjerite svoj konfiguracijski datoteku zbog tipfelera.

Nabavite SSL certifikat

Kada je sve ispravno konfigurirano, sada je vrijeme za pokretanje certbot naredbe koja će automatski dobiti SSL certifikat od Let’s Encrypt i konfigurirati Nginx da ga koristi.

sudo certbot --nginx -d vpn.yourdomain.com

Cijeli proces traje oko 30 sekundi, a kada završi, vidjet ćete poruku o uspjehu:

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

Sada ponovno učitajte Nginx da biste primijenili sve:

sudo systemctl reload nginx

Automatsko obnavljanje certifikata

Let's Encrypt certifikati važe samo 90 dana, što je namjerno kako bi se potaknulo redovito obnavljanje i smanjila moguća šteta ako ikada dođe do kompromitiranja privatnog ključa.

Srećom, Certbot automatski postavlja tajmer za obnavljanje prilikom instalacije, a možete provjeriti je li usluga obnavljanja aktivna pokretanjem:

sudo systemctl status certbot.timer

i trebali biste ga vidjeti navedeno kao aktivno (pokrenuto), ovaj tajmer provjerava dvaput dnevno i automatski će obnoviti svaki certifikat koji istječe unutar 30 dana.

Da biste provjerili da sve funkcionira bez stvarnog obnavljanja, pokrenite:
sudo certbot renew –dry-run

Ako se test uspješno dovrši, automatsko obnavljanje vaših certifikata je potpuno konfigurirano i nećete se morati brinuti o isteku certifikata.

Ažurirajte svoj vatrozid

Budući da sada pristupamo WireGuard-UI putem Nginx na standardnom HTTPS portu (443), moramo to omogućiti u našem vatrozidu i opcionalno možemo zatvoriti izravan pristup na port 5000.

sudo ufw allow 443/tcp

Opcionalno, ako želite spriječiti izravan pristup WireGuard-UI na portu 5000 (prisiljavajući sve da koriste HTTPS sučelje), možete ukloniti to pravilo:

sudo ufw delete allow 5000/tcp

Ponovo učitaj vatrozid:

sudo ufw reload

Korak 11: Konfigurirajte WireGuard-UI da sluša samo na localhostu

Budući da Nginx sada rukuje svim vanjskim vezama, trebali bismo konfigurirati WireGuard-UI da prihvaća veze samo s lokalnog računala, što sprječava bilo koga da mu pristupi izravno na portu 5000, čak i ako otkrije da je port otvoren.

Zaustavite WireGuard-UI servis:

sudo systemctl stop wireguard-ui

Uredi datoteku servisa:

sudo nano /etc/systemd/system/wireguard-ui.service

Izmijenite liniju ExecStart tako da se veže samo na 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

Spremi i izađi, zatim ponovno učitaj systemd i ponovno pokreni servis:

sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui

Napokon, otvorite svoj preglednik i idite na:

https://vpn.yourdomain.com

Trebali biste vidjeti ikonu lokota u adresnoj traci vašeg preglednika, možete kliknuti na ikonu lokota kako biste pregledali detalje certifikata. Vidjet ćete da ga je izdao Let’s Encrypt i da je važeći 90 dana.

Sažetak

Do sada ste uspješno postavili potpuno funkcionalan WireGuard VPN server s sigurnim web-sučeljem za upravljanje. Umjesto ručnog rukovanja ključevima, konfiguracijskim datotekama i pravilima usmjeravanja, WireGuard-UI vam pruža jednostavnu nadzornu ploču za dodavanje novih uređaja, generiranje QR kodova i praćenje aktivnih veza.