Ako nainštalovať WireGuard VPN + Webové rozhranie na Ubuntu


Upozornenie: Tento článok obsahuje partnerské odkazy. Môžem získať províziu, keď si niečo kúpíte cez tieto odkazy, bez ďalších nákladov pre vás.

Keď sa pripojíte k WiFi v kaviarni alebo pristupujete na internet cez akúkoľvek verejnú sieť, vaše údaje cestujú cez infraštruktúru, ktorú nekontrolujete. Každý, kto sa nachádza medzi vami a webovými stránkami, ktoré navštevujete, by mohol potenciálne zachytiť váš prenos, a dokonca aj vo vašej domácej sieti môže váš poskytovateľ internetu vidieť každú stránku, ktorú navštívite.

VPN toto rieši vytvorením šifrovaného tunela medzi vaším zariadením a serverom, ktorému dôverujete. Namiesto toho, aby váš prenos šiel priamo na internet, najprv prechádza týmto bezpečným tunelom na váš VPN server, ktorý ho potom posiela do cieľa, takže každý, kto sleduje sieť, vidí len šifrované údaje idúce na váš VPN server, nič viac.

WireGuard je moderný VPN protokol, ktorý túto úlohu vykonáva mimoriadne dobre. Na rozdiel od starších VPN technológií, ktoré vyžadujú stovky tisíc riadkov kódu, WireGuard rovnakú úlohu zvládne s iba približne 4 000 riadkami, čo znamená menej chýb, lepší výkon a jednoduchšie bezpečnostné audity.

Ale tu je vec: zatiaľ čo WireGuard samotný je jednoduchý, spravovanie viacerých VPN klientov, generovanie konfiguračných súborov a sledovanie, kto má prístup, sa môže stať únavným iba cez príkazový riadok, preto je užitočné mať webové rozhranie.

V tomto návode nastavíme kompletný WireGuard VPN server s priateľským webovým rozhraním, ktoré vám umožní spravovať všetko cez váš prehliadač, ako pridávanie nových zariadení, generovanie QR kódov pre mobilné klienty a monitorovanie pripojení bez toho, aby ste manuálne upravovali jediný konfiguračný súbor.

Čo budete potrebovať

Predtým, než začneme, uistite sa, že máte:

  • Linuxový server s verejnou IP adresou (VPS od poskytovateľov ako DigitalOcean, Linode alebo AWS funguje dokonale).
  • Prístup root alebo práva sudo na tomto serveri.
  • Základné porozumenie SSH (mali by ste vedieť, ako sa pripojiť k svojmu serveru).

Tento sprievodca predpokladá, že používate Ubuntu 22.04 alebo Ubuntu 24.04, ale kroky fungujú podobne aj na Debiane a iných distribúciách s menšími úpravami.

Pochopenie architektúry

Poďme si na chvíľu uvedomiť, čo vlastne budujeme, skôr než začneme písať príkazy.

Nastavenie WireGuard pozostáva z peerov – zariadení, ktoré môžu medzi sebou komunikovať cez šifrované tunely.

V našom prípade budeme mať:

  • Server: Váš Linuxový počítač s verejnou IP adresou, ktorý funguje ako centrálny uzol, ku ktorému sa pripájajú všetky vaše zariadenia.
  • Klienti: Váš notebook, telefón, tablet alebo akékoľvek iné zariadenie, ktoré chcete ochrániť, každý klient dostane vlastný kryptografický pár kľúčov a konfiguráciu.
  • Webové rozhranie: Ľahká webová aplikácia (použijeme WireGuard-UI), ktorá beží na vašom serveri a poskytuje vám ovládací panel na správu všetkého.

Keď sa klient chce pripojiť, nadviaže priamy šifrovaný tunel na server a potom server smeruje internetovú prevádzku klienta alebo jednoducho umožní prístup k zdrojom na lokálnej sieti servera, v závislosti od toho, ako to nakonfigurujete.

Krok 1: Inštalácia WireGuarda na Ubuntu server

Najprv si overme, či je váš systém aktuálny a má nainštalované potrebné nástroje, pomocou nasledujúceho príkazu, ktorý aktualizuje zoznamy balíčkov a upgradne zastaraný softvér.

sudo apt update && sudo apt upgrade -y

Ďalej nainštalujte samotný WireGuard:

sudo apt install wireguard -y

Keďže je WireGuard súčasťou jadra Linuxu (pre jadra 5.6 a vyššie), tento príkaz primárne inštaluje používateľské nástroje potrebné na konfiguráciu a správu WireGuard rozhraní.

Nainštalujte WireGuard v Ubuntu

Krok 2: Povolenie presmerovania IP na Ubuntu

Štandardne Ubuntu neodosiela pakety medzi sieťovými rozhraniami, čo je bezpečnostná funkcia, ktorá zabezpečuje, že váš server nebude fungovať ako smerovač, pokiaľ mu to výslovne nepoviete, ale pre VPN server túto funkciu potrebujeme.

Keď sa váš telefón pripojí k VPN a pokúsi sa navštíviť webovú stránku, server musí túto požiadavku preposlať z rozhrania WireGuard na jeho verejné sieťové rozhranie a potom vrátiť odpoveď späť.

Aby sme trvalo povolili preposielanie IP, musíme upraviť konfiguračný súbor systému:

sudo nano /etc/sysctl.conf

Hľadajte tento riadok (môže byť na začiatku zakomentovaný znakom #):

#net.ipv4.ip_forward=1

Odstráňte #, aby ste zrušili zakomentovanie, alebo pridajte tento riadok, ak neexistuje:

net.ipv4.ip_forward=1

Uložte súbor a potom použite zmeny bez reštartovania:

sudo sysctl -p

Povoliť presmerovanie IP na Ubuntu

Krok 3: Konfigurácia firewallu a smerovania pre WireGuard

Váš VPN server musí akceptovať prichádzajúce pripojenia na porte, ktorý používa WireGuard (štandardne UDP port 51820). Musí tiež správne smerovať prevádzku medzi VPN rozhraním a vaším verejným sieťovým rozhraním.

Najprv identifikujme vaše verejné sieťové rozhranie:

ip route | grep default

Uvidíte výstup ako:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100

Názov rozhrania tu je `eth0`, ale na vašom systéme môže byť odlišný, môže to byť `ens3`, `enp0s3` alebo niečo podobné.

Teraz nakonfigurujme firewall ufw (predvolený firewall v Ubuntu):

# 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

Ďalej musíme pridať pravidlo NAT (Preklad sieťových adries), ktoré povie vášmu serveru, aby maskoval VPN prevádzku tak, akoby prichádzala priamo zo samotného servera pri jej odosielaní na internet.

sudo nano /etc/ufw/before.rules

Tieto riadky pridajte na začiatok súboru, hneď po hlavičkových komentároch, ale pred riadok *filter a nahraďte eth0 názvom vášho skutočného rozhrania:

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

Tu je, čo to znamená:

  • *nat: Pracujeme s tabuľkou NAT.
  • -s 10.0.0.0/24: Pre pakety prichádzajúce z našej VPN siete (10.0.0.0/24 je podsieť, ktorú priradíme klientom VPN).
  • -o eth0: Odchádza cez rozhranie eth0.
  • -j MASQUERADE: Prepisuje zdrojovú IP adresu na verejnú IP adresu servera.

Uložte a ukončite, potom povolte a znovu načítajte UFW:

sudo ufw enable
sudo ufw reload

Krok 4: Inštalácia WireGuard-UI na Ubuntu server

Teraz prichádza zaujímavá časť, nastavenie webového rozhrania pomocou WireGuard-UI, čo je čistá a jednoduchá webová aplikácia napísaná v Go.

Najprv vytvorte adresár pre WireGuard-UI:

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

Ďalej si stiahnite najnovšiu verziu WireGuard-UI zo stránky vydaní na GitHub, ale v čase písania tohto textu príkaz wget získa nedávnu stabilnú verziu:

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

Po stiahnutí ho rozbaľte a nastavte ako spustiteľný súbor:

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

Predtým, než spustíme rozhranie, vytvorme službu systemd, aby sa spúšťala automaticky pri štarte systému.

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

Vložte túto konfiguráciu:

[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

Uložte a ukončite, potom povolte a spustite službu:

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

Skontrolujte, či beží:

sudo systemctl status wireguard-ui

Skontrolovať stav Wireguard-UI

Krok 5: Prístup k Wireguard-UI

Otvorte svoj webový prehliadač a prejdite na nasledujúcu adresu URL, nezabudnite nahradiť YOUR_SERVER_IP skutočnou verejnou IP adresou vášho servera.

http://YOUR_SERVER_IP:5000

Uvidíte prihlasovaciu stránku, kde môžete použiť nasledujúce predvolené prihlasovacie údaje:

Username: admin
Password: admin

Nástenka Wireguard-UI

Dôležité: Zmeňte ich ihneď po prihlásení. Kliknite na svoje používateľské meno v pravom hornom rohu, potom na „Nastavenia“ a aktualizujte svoje heslo.

Krok 6: Konfigurácia vášho servera WireGuard

Keď sa prihlásite, budete presmerovaní na ovládací panel WireGuard-UI. Ak chcete začať s konfiguráciou svojho servera, kliknite na „WireGuard Server“ v ľavom bočnom paneli a nastavte Názov rozhrania na 10.0.0.1/24 (predvolené rozhranie WireGuard) a Počúvaj port na 51820.

Do poľa Post Up Script zadajte:

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

a do poľa Post Down Script zadajte:

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

Uistite sa, že ste nahradili eth0 názvom vašej skutočnej sieťovej karty, ak je iný, a nastavte Address to 10.0.0.1/24, čo bude interná VPN IP adresa servera.

Keď kliknete na Apply Config, WireGuard vytvorí rozhranie wg0, bude počúvať VPN pripojenia na porte 51820, priradí serveru jeho VPN IP a nakonfiguruje pravidlá firewallu tak, aby správne presmeroval VPN traffic.

Rozhranie tiež automaticky vygeneruje súkromné a verejné kľúče vášho servera. Po aplikovaní nastavení by sa v rozhraní malo zobraziť Aktívne, čo naznačuje, že váš server WireGuard je spustený a funguje.

Konfigurovať server WireGuard

Krok 7: Pridajte svojho prvého klienta WireGuard

Teraz pridajme zariadenie do vašej VPN, ktorým môže byť váš notebook, telefón alebo akékoľvek iné klientské zariadenie. V ľavom bočnom paneli kliknite na „Klienti“ a potom kliknite na „Pridať nového klienta“.

Dajte klientovi popisný názov, napríklad „Môj Laptop“ alebo „iPhone“, a prípadne zadajte e-mail, ktorý pomôže zariadenie neskôr identifikovať. Kliknite na „Auto“, aby sa automaticky priradila ďalšia dostupná IP adresa (pravdepodobne 10.0.0.2).

Pre povolené IP adresy zadajte 0.0.0.0/0, ::/0, čo zabezpečí, že celá prevádzka klienta bude smerovaná cez VPN; ak chcete prístup iba k vnútornému sieťovému rozhraniu servera, môžete namiesto toho zadať danú podsieť (napríklad 10.0.0.0/24).

Keď je všetko nastavené, kliknite na „Odoslať“ a webové rozhranie automaticky vygeneruje kompletnú konfiguráciu WireGuard pre tohto klienta, vrátane jeho vlastného kryptografického páru kľúčov.

Pridať klienta WireGuard

Krok 8: Pripojenie vášho klientského zariadenia

Teraz musíte dostať konfiguráciu do svojho zariadenia a WireGuard-UI to uľahčuje pomocou QR kódov pre mobilné zariadenia a na stiahnutie dostupných konfiguračných súborov pre počítače.

Pre mobilné zariadenia (telefon/tablet):

  • Nainštalujte aplikáciu WireGuard z vášho obchodu s aplikáciami (je dostupná pre iOS aj Android).
  • Vo webovom rozhraní WireGuard-UI nájdite svojho novo vytvoreného klienta a kliknite na ikonu QR kódu.
  • Otvorte na svojom telefóne aplikáciu WireGuard, klepnite na tlačidlo "+" a vyberte možnosť „Vytvoriť z QR kódu“.
  • Naskenujte QR kód zobrazený vo vašom prehliadači.
  • Dajte svojmu pripojeniu názov a klepnite na „Vytvoriť tunel“.

Hotovo! Prepnite spínač, aby ste sa pripojili, a vaše mobilné zariadenie teraz smeruje všetku svoju prevádzku cez váš VPN server.

Pre stolný/ prenosný počítač:

  • Nainštalujte WireGuard z wireguard.com/install.
  • V rozhraní WireGuard-UI kliknite na ikonu sťahovania vedľa svojho klienta, aby ste stiahli súbor .conf.
  • Otvorte aplikáciu WireGuard na svojom počítači, kliknite na „Importovať tunel(y) zo súboru“ a vyberte stiahnutý konfiguračný súbor.
  • Kliknite na „Aktivovať“, aby ste sa pripojili.

Krok 9: Testovanie vášho VPN

Poďme sa uistiť, že všetko funguje správne. Najprv, keď je vaša VPN odpojená, navštívte stránku whatismyipaddress.com a zapíšte si zobrazenú IP adresu.

Potom sa pripojte k vášmu WireGuard VPN a obnovte stránku, vaša IP adresa by mala teraz zobrazovať verejnú IP adresu vášho servera namiesto pôvodnej, čo potvrdzuje, že prevádzka je smerovaná cez VPN.

Aby ste ďalej overili, že DNS funguje správne, môžete na pripojenom zariadení spustiť nasledujúci príkaz:

ping google.com

Ak vidíte odpovede, váš VPN správne smeruje prevádzku.

Ak chcete vidieť aktívne pripojenia na vašom serveri, prihláste sa cez SSH a spustite:

sudo wg show

Uvidíte výstup ako:

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

Toto ukazuje, že je váš klient pripojený, kedy naposledy komunikoval so serverom a koľko dát bolo prenesených.

Krok 10: Použite HTTPS pre WireGuard-UI

V súčasnosti, keď pristupujete k vašemu webovému rozhraniu WireGuard na http://YOUR_SERVER_IP:5000, vaše prihlasovacie údaje a všetky konfiguračné údaje cestujú internetom v nešifrovanej podobe a každý, kto odpočúva prenos medzi vaším prehliadačom a serverom, môže vidieť vaše administrátorské heslo a potenciálne prevziať vašu reláciu.

Riešením je umiestniť vaše webové rozhranie za reverzný proxy server s povoleným HTTPS. Reverzný proxy server stojí pred vašou aplikáciou, spracováva všetky šifrované HTTPS pripojenia od klientov a potom posiela požiadavky na vašu aplikáciu cez miestnu sieť, kde zachytenie nie je problém.

Použijeme Nginx (vysokovýkonný webový server) ako náš reverzný proxy server a Let’s Encrypt na získanie bezplatného SSL certifikátu, aby ste mohli pristupovať k svojmu WireGuard rozhraniu na https://vpn.yourdomain.com namiesto IP adresy cez HTTP.

Nainštalovať webový server Nginx

Najprv je potrebné vytvoriť DNS záznam pre vašu doménu (https://vpn.yourdomain.com), ktorý bude smerovať na IP adresu vášho servera, a potom nainštalovať webový server Nginx.

sudo apt update
sudo apt install nginx -y

Po inštalácii môžete navštíviť http://vpn.yourdomain.com vo vašom prehliadači a uvidíte predvolenú uvítaciu stránku Nginxu, čo znamená, že Nginx funguje a je prístupný z internetu.

Skontrolovať stránku Nginx

Nainštalujte Certbot pre Let’s Encrypt

Ďalej nainštalujte Let’s Encrypt, čo je bezplatná certifikačná autorita, ktorá poskytuje SSL certifikáty, a certbot je nástroj, ktorý automatizuje proces získavania a obnovovania týchto certifikátov.

sudo apt install certbot python3-certbot-nginx -y

Balík python3-certbot-nginx obsahuje plugin, ktorý môže automaticky nakonfigurovať Nginx za vás, čím celý proces značne zjednoduší.

Konfigurácia Nginx ako reverzného proxy

Teraz vytvorme konfiguráciu Nginx, ktorá presmeruje požiadavky z https://vpn.yourdomain.com na vašu aplikáciu WireGuard-UI bežiacu na localhost:5000.

Vytvorte nový konfiguračný súbor.

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

Vložte túto konfiguráciu (nahradiť vpn.yourdomain.com vašou skutočnou doménou):

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

Teraz povoľte túto konfiguráciu vytvorením symbolického odkazu:

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

Otestujte konfiguráciu Nginx, či nemá chyby v syntaxe:

sudo nginx -t

Mal by si vidieť:

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

Ak uvidíte nejaké chyby, vráťte sa späť a skontrolujte svoj konfiguračný súbor kvôli preklepom.

Získať SSL certifikát

Keď je všetko správne nastavené, je teraz čas spustiť príkaz certbot, ktorý automaticky získa SSL certifikát od Let’s Encrypt a nakonfiguruje Nginx na jeho použitie.

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

Celý proces trvá približne 30 sekúnd a keď bude hotový, uvidíte hlásenie o úspechu:

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

Teraz znovu načítajte Nginx, aby sa všetko aplikovalo:

sudo systemctl reload nginx

Automatické obnovenie certifikátu

Certifikáty Let’s Encrypt sú platné iba 90 dní, čo je úmyselné, aby sa podporovala ich pravidelná obnova a obmedzilo sa možné poškodenie v prípade, že by súkromný kľúč bol niekedy ohrozený.

Našťastie Certbot automaticky nastaví časovač obnovenia po inštalácii a môžete si overiť, či je služba obnovenia aktívna, spustením:

sudo systemctl status certbot.timer

a mali by ste ho vidieť uvedený ako aktívny (bežiaci), tento časovač kontroluje dvakrát denne a automaticky obnoví každý certifikát, ktorý má menej ako 30 dní do vypršania.

Ak chcete overiť, či všetko funguje bez skutočného obnovenia, spustite:
sudo certbot renew –dry-run

Ak test prebehne úspešne, automatické obnovovanie certifikátov je plne nastavené a nebudete sa musieť obávať, že vám certifikáty vypršia.

Aktualizujte svoj firewall

Keďže teraz pristupujeme k WireGuard-UI cez Nginx na štandardnom HTTPS porte (443), musíme to povoliť vo našom firewalle a voliteľne môžeme zatvoriť priamy prístup k portu 5000.

sudo ufw allow 443/tcp

Voliteľne, ak chcete zabrániť priamemu prístupu k WireGuard-UI na porte 5000 (nútia všetkých používať rozhranie HTTPS), môžete túto pravidlo odstrániť:

sudo ufw delete allow 5000/tcp

Obnoviť firewall:

sudo ufw reload

Krok 11: Nakonfigurujte WireGuard-UI tak, aby počúval iba na localhost

Keďže Nginx teraz spravuje všetky externé pripojenia, mali by sme nakonfigurovať WireGuard-UI tak, aby prijímala pripojenia iba z lokálneho počítača, čo zabráni komukoľvek pristupovať k nemu priamo cez port 5000, aj keby zistili, že je port otvorený.

Zastavte službu WireGuard-UI:

sudo systemctl stop wireguard-ui

Upravte súbor služby:

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

Upravte riadok ExecStart, aby sa viazal iba 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

Uložte a ukončite, potom znovu načítajte systemd a reštartujte službu:

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

Nakoniec otvorte svoj prehliadač a prejdite na:

https://vpn.yourdomain.com

Vo vašom prehliadači by ste mali vidieť ikonu zámku v adresnom riadku, na ktorú môžete kliknúť, aby ste si zobrazili podrobnosti o certifikáte. Uvidíte, že bol vydaný spoločnosťou Let’s Encrypt a je platný 90 dní.

Zhrnutie

Doteraz ste úspešne nasadili plne funkčný WireGuard VPN server s bezpečným webovým rozhraním na správu. Namiesto manuálneho riešenia kľúčov, konfiguračných súborov a smerovacích pravidiel vám WireGuard-UI poskytuje jednoduchý panel na pridávanie nových zariadení, generovanie QR kódov a sledovanie aktívnych pripojení.