Sari la conținut
servervps.roPanou client

Ghid · 25 de minute · Debian · Ubuntu · AlmaLinux

VPN propriu cu WireGuard

WireGuard e în kernelul Linux de la versiunea 5.6, deci nu instalezi nimic exotic. Configurația încape în douăzeci de rânduri, iar performanța e apropiată de cea a rețelei brute. Partea care încurcă lumea nu e WireGuard, ci rutarea și NAT-ul din jurul lui.

Ai nevoie de

  • Un VPS securizat, cu acces root
  • Un port UDP liber, deschis în firewall (implicit 51820)
  • Un client: laptop, telefon sau amândouă
  1. 01

    Decide ce fel de tunel vrei

    Tunel complet: tot traficul clientului trece prin server. Îți ascunde adresa IP față de site-urile pe care le vizitezi și te protejează pe rețele publice, dar tot traficul tău trece prin serverul tău, deci se vede în logurile lui.

    Split tunnel: prin VPN merge doar traficul către rețeaua serverului. Restul iese direct. Asta folosești când vrei doar acces la servicii private, fără să-ți muți tot traficul.

    Diferența e o singură linie în configurația clientului, AllowedIPs. Ține minte care.

  2. 02

    Instalează și generează cheile

    Fiecare parte are o pereche de chei. Cheia privată nu părăsește niciodată mașina pe care a fost generată.

    umask 077 înainte de generare face fișierele citibile doar de root. Fără el, cheia privată rămâne lizibilă pentru orice utilizator de pe server.

    apt install wireguard        # AlmaLinux: dnf install wireguard-tools
    
    cd /etc/wireguard
    umask 077
    wg genkey | tee server.key | wg pubkey > server.pub
    wg genkey | tee client1.key | wg pubkey > client1.pub
    cat server.pub client1.pub
  3. 03

    Pornește rutarea pe server

    Fără redirecționarea pachetelor, serverul primește traficul clientului și îl aruncă. E cel mai frecvent motiv pentru „m-am conectat dar nu merge internetul".

    cat > /etc/sysctl.d/99-wireguard.conf <<'EOF'
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
    EOF
    sysctl --system
    sysctl net.ipv4.ip_forward   # trebuie să afișeze 1
  4. 04

    Scrie configurația serverului

    Interfața primește o adresă dintr-o rețea privată pe care o alegi tu. 10.8.0.0/24 e o alegere obișnuită, dar dacă rețeaua ta de acasă folosește deja 10.8.x, alege alta, altfel rutele se bat cap în cap.

    PostUp și PostDown adaugă și scot regula de NAT. Înlocuiește eth0 cu numele real al interfeței, pe care îl afli cu ip route.

    /etc/wireguard/wg0.conf
    [Interface]
    Address = 10.8.0.1/24
    ListenPort = 51820
    PrivateKey = <conținutul lui server.key>
    
    PostUp   = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT
    PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
    
    [Peer]
    # client1
    PublicKey = <conținutul lui client1.pub>
    AllowedIPs = 10.8.0.2/32

    AtențieÎn secțiunea [Peer] de pe server, AllowedIPs înseamnă „ce adrese am voie să primesc de la acest client". Pune /32, adresa exactă. Dacă pui 0.0.0.0/0 aici, orice client poate pretinde orice adresă.

  5. 05

    Deschide portul și pornește

    WireGuard folosește UDP. Un port TCP deschis nu ajută cu nimic.

    # Debian / Ubuntu
    ufw allow 51820/udp
    
    # AlmaLinux
    firewall-cmd --permanent --add-port=51820/udp && firewall-cmd --reload
    
    # afli numele interfeței externe, dacă nu e eth0
    ip route | grep default
    
    systemctl enable --now wg-quick@wg0
    wg show
  6. 06

    Scrie configurația clientului

    Aici alegi tipul de tunel. AllowedIPs = 0.0.0.0/0, ::/0 trimite tot prin VPN. AllowedIPs = 10.8.0.0/24 trimite doar traficul către rețeaua VPN.

    PersistentKeepalive ține conexiunea deschisă prin NAT-ul de la client. Fără el, un telefon în spatele unui NAT agresiv pierde legătura după câteva minute de inactivitate.

    client1.conf
    [Interface]
    Address = 10.8.0.2/32
    PrivateKey = <conținutul lui client1.key>
    DNS = 1.1.1.1
    
    [Peer]
    PublicKey = <conținutul lui server.pub>
    Endpoint = IP_SERVER:51820
    AllowedIPs = 0.0.0.0/0, ::/0      # tunel complet
    # AllowedIPs = 10.8.0.0/24        # split tunnel
    PersistentKeepalive = 25
  7. 07

    Conectează telefonul cu un cod QR

    Aplicația WireGuard de pe telefon citește configurația dintr-un QR, deci nu tastezi chei de mână.

    Codul conține cheia privată a clientului. Nu-l trimite pe chat și nu-l lăsa pe ecran mai mult decât trebuie.

    apt install qrencode
    qrencode -t ansiutf8 < client1.conf
  8. 08

    Verifică, apoi verifică și scurgerea de DNS

    wg show îți arată dacă handshake-ul s-a făcut. Dacă apare o dată recentă la latest handshake, tunelul e viu.

    Testul care contează pentru un tunel complet e altul: adresa IP publică văzută din exterior trebuie să fie a serverului, iar interogările DNS să nu mai plece pe lângă tunel.

    # pe server
    wg show
    
    # pe client, după conectare
    curl -s https://api.ipify.org && echo      # trebuie să fie IP-ul serverului
    resolvectl status | grep 'DNS Servers'     # Linux, verifică ce resolver se folosește
  9. 09

    Adaugă clienți fără să repornești

    Fiecare client nou primește propria pereche de chei și propria adresă /32. Nu refolosi chei între dispozitive: dacă pierzi un telefon, vrei să poți scoate exact acel client.

    cd /etc/wireguard && umask 077
    wg genkey | tee client2.key | wg pubkey > client2.pub
    
    # adaugă peer-ul la cald, fără să pice ceilalți
    wg set wg0 peer "$(cat client2.pub)" allowed-ips 10.8.0.3/32
    
    # salvează în fișier, ca să supraviețuiască repornirii
    wg-quick save wg0

Întrebări frecvente

+Ce VPS îmi trebuie pentru un VPN personal?

WireGuard consumă foarte puțin: planul de 2 GB acoperă confortabil câțiva utilizatori. Limita practică nu e memoria, ci lățimea de bandă a serverului, fiindcă tot traficul tunelat trece prin el.

+M-am conectat, dar nu merge internetul. De unde încep?

Trei cauze acoperă majoritatea cazurilor: ip_forward nu e pornit, regula de NAT indică o interfață care nu există (verifică numele cu ip route), sau AllowedIPs de pe client nu include traficul pe care îl aștepți. Verifică-le în ordinea asta.

+Handshake-ul nu se face deloc.

Aproape sigur e portul. WireGuard e UDP, iar o regulă de firewall pentru TCP nu ajută. Verifică și că Endpoint din configurația clientului are IP-ul public corect și portul corect.

+VPN-ul propriu îmi dă anonimat?

Nu. Îți mută traficul de la furnizorul tău de internet către serverul tău, ceea ce ajută pe rețele publice și îți dă acces la servicii private. Dar serverul e închiriat pe numele tău și tot traficul trece prin el, deci nu e anonimat, e control.