Acasă
» LINUX
»
Cum se configurează un server VPN punct-la-site WireGuard pe Debian 12
Cum se configurează un server VPN punct-la-site WireGuard pe Debian 12
Un VPN punct-la-site WireGuard pe Debian 12 (Bookworm) este o modalitate practică de a permite laptopurilor, telefoanelor sau stațiilor de lucru la distanță să ajungă la un server sau să direcționeze traficul prin acesta. O clarificare importantă este prima: WireGuard nu are un „mod server” special. Fiecare participant este un peer. Într-un design punct-la-site, o gazdă Debian acționează pur și simplu ca hub stabil, accesibil publicului, iar fiecare dispozitiv la distanță primește propria pereche de chei și adresă de tunel.
Acest ghid folosește instrumentele WireGuard incluse în pachetul Debian, wg-quickredirecționarea IPv4 și nftables. Presupune că serverul Debian are acces root sau sudo și că portul UDP 51820îl poate accesa. Dacă serverul se află în spatele unui router de acasă sau de la birou, trebuie să redirecționați acel port UDP către gazda Debian. Dacă ISP-ul utilizează NAT de nivel operator (CGNAT), redirecționarea obișnuită a porturilor routerului poate să nu fie suficientă; confirmați că aveți de fapt o adresă publică accesibilă înainte de a depana WireGuard.
Ce va face această configurație?
VPN-ul exemplu folosește 10.8.0.0/24. Serverul este 10.8.0.1, iar primul client este 10.8.0.2. Clientul poate fi configurat fie ca un VPN full-tunnel, unde traficul de internet IPv4 iese prin serverul Debian, fie ca un tunel divizat, unde doar rețelele private selectate utilizează WireGuard.
Documentația proprie WireGuard a Debian confirmă faptul că WireGuard este disponibil prin pachetele de distribuție, în timp ce ghidul oficial de pornire rapidă WireGuard documentează generarea de chei wg-quickși comportamentul opțional persistent keepalive. Consultați documentația Debian WireGuard , ghidul oficial de pornire rapidă WireGuard și pagina de manual wg-quick a Debian .
Pasul 1: Instalați WireGuard și nftables
Actualizați metadatele pachetului, apoi instalați WireGuard și nftables:
O concepție greșită des întâlnită este că Debian 12 are nevoie de un modul de kernel WireGuard în afara arborelui. Nu are. WireGuard este prezent în kernelul Linux de ani de zile; pachetele Debian oferă instrumentele de gestionare a spațiului utilizator de care aveți nevoie. Acțiune: utilizați pachete Debian în loc să descărcați un script de instalare neverificat.
Instalați WireGuard și nftables din depozitele de pachete Debian înainte de a crea configurația tunelului.
Pasul 2: Generați perechea de chei a serverului
Creați fișierele cheie cu permisiuni restrictive:
sudo -i
install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key
Cheia privată trebuie să rămână privată. Cheia publică este ceea ce copiați în configurațiile clientului. În mod ideal, generați cheia privată a fiecărui client pe acel client, mai degrabă decât pe server. În acest fel, serverul nu va trebui niciodată să dețină chei private ale clientului.
Generați cheia privată WireGuard a serverului Debian și derivați cheia publică a acesteia utilizând permisiuni restrictive pentru fișiere.
Pasul 3: Activați redirecționarea IPv4
Un tunel VPN poate funcționa cu succes chiar dacă traficul rutat eșuează. Motivul este că redirecționarea IP-ului în Linux este o setare separată a kernelului față de WireGuard. Creați un fișier sysctl persistent:
Comanda finală ar trebui să raporteze net.ipv4.ip_forward = 1. Documentația kernelului Debian descrie ip_forwardca fiind comutatorul care permite redirecționarea pachetelor IPv4. Acțiune: verificați explicit această valoare, în loc să presupuneți că interfața tunelului activează automat rutarea. Consultați manualul Debian ip(7) și documentația sysctl.conf .
Activați redirecționarea IPv4 astfel încât Debian să poată ruta pachete între interfața WireGuard și alte rețele.
Pasul 4: Creați configurația serverului
Citiți cheia privată a serverului, apoi creați /etc/wireguard/wg0.conf:
AllowedIPseste adesea înțeleasă greșit doar ca o listă de permisiuni de tip firewall. De asemenea, controlează rutarea. Pe server, atribuirea către acest peer îi spune lui WireGuard că pachetele pentru adresa exactă a tunelului aparțin acestui client. Acordați fiecărui client o adresă unică și un bloc 10.8.0.2/32separat .[Peer]
O altă opțiune utilă este să omiteți SaveConfig = truefișierul atunci când intenționați să îl gestionați manual. Cu SaveConfig, wg-quickputeți scrie starea live înapoi în configurație la oprire, ceea ce poate suprascrie modificările manuale. Acțiune: păstrați fișierul declarativ, cu excepția cazului în care doriți în mod specific ca starea live să fie salvată.
Creați fișierul wg0.conf pe partea de server cu o adresă de tunel, un port de ascultare UDP, o cheie privată a serverului și un client peer.
Pasul 5: Configurați mascarea nftables
Dacă clienții full-tunnel ar trebui să acceseze Internetul prin serverul Debian, cea mai simplă soluție este masquerading-ul IPv4. Mai întâi identificați interfața de ieșire a serverului:
ip route get 1.1.1.1
Căutați interfața după dev, cum ar fi eth0, ens3, sau enp1s0. Nu presupuneți că este întotdeauna eth0.
Dacă deja întrețineți /etc/nftables.conf, îmbinați următorul tabel NAT în setul de reguli existent în loc să înlocuiți fișierul:
table ip wireguard-nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "eth0" ip saddr 10.8.0.0/24 masquerade
}
}
Înlocuiți eth0cu interfața de ieșire reală. Validați înainte de încărcare:
NAT nu este inerent necesar de WireGuard. Dacă rețeaua locală de destinație are deja o rută înapoi către 10.8.0.0/24, accesul rutat poate funcționa fără mascare. NAT este convenabil în principal atunci când doriți ca clienții la distanță să utilizeze ruta de internet existentă a serverului și nu controlați rutele de retur în altă parte. Acțiune: utilizați mascarea pentru cazul simplu de ieșire din internet; preferați rutarea explicită atunci când controlați rețeaua și doriți ca adresele sursă să fie păstrate.
Adăugați o regulă NAT nftables dedicată pentru 10.8.0.0/24 și validați setul de reguli înainte de a-l activa.
Ai nevoie și de reguli pentru firewall?
Asta depinde de firewall-ul deja instalat. Dacă politica de intrare nftables este restrictivă, permiteți UDP-ul de intrare 51820. Dacă lanțul dvs. de transmitere are o politică implicită de abandonare a traficului, adăugați acolo reguli pentru a permite traficul de wg0la destinația dorită și pentru a permite traficul de întoarcere stabilit. Furnizorii de Cloud VPS pot avea, de asemenea, un grup de securitate separat sau un firewall de furnizor care trebuie să permită UDP 51820.
Nu lipiți orbește un set complet nou de reguli de firewall implicite într-un server SSH la distanță. Acest lucru vă poate bloca accesul. Acțiune: inspectați sudo nft list rulesetși integrați WireGuard în firewall-ul pe care îl aveți deja.
Pasul 6: Creați profilul clientului
Pe client, generați propria pereche de chei folosind aplicația WireGuard sau wg genkey. Un profil IPv4 pentru întregul tunel arată astfel:
Înlocuiți vpn.example.comcu numele DNS public sau adresa IP publică a serverului. DNSLinia este opțională, iar suportul pentru implementarea clientului variază. Pentru un tunel divizat, modificați AllowedIPsla doar rețelele care ar trebui să traverseze VPN-ul, de exemplu, 10.8.0.0/24plus o rețea locală privată, cum ar fi 192.168.50.0/24.
PersistentKeepalive = 25este, de asemenea, opțional. Documentația oficială WireGuard recomandă 25 de secunde ca o valoare rezonabilă atunci când un peer din spatele NAT sau al unui firewall cu stare trebuie să își păstreze maparea în timpul perioadelor de inactivitate. Nu este o setare de performanță și nu este obligatorie pentru fiecare client. Acțiune: utilizați-o în principal pentru clienții roaming sau NAT care altfel devin inaccesibili după timpul de inactivitate.
Configurați clientul cu propria cheie privată, cheia publică a serverului, endpoint-ul, politica de rutare și keepalive opțional.
Pasul 7: Porniți WireGuard la pornire
Deschideți mai întâi nftables, apoi activați interfața WireGuard:
wg-quick@wg0citește /etc/wireguard/wg0.conf. wg-quickManualul confirmă că această convenție de denumire este comanda rapidă normală pentru configurațiile stocate sub /etc/wireguard. Acțiune: utilizați serviciul în locul unui script de boot personalizat, cu excepția cazului în care aveți un design de manager de rețea mai complex.
Activează nftables și serviciul systemd wg-quick@wg0 astfel încât VPN-ul să revină automat după repornire.
Pasul 8: Verificați handshake-ul și traficul
Conectați clientul, apoi inspectați serverul:
sudo wg show
ip address show wg0
ping -c 3 10.8.0.2
Un peer sănătos afișează în mod normal o confirmare de handshake recentă și contoare de transfer diferite de zero după ce traficul traversează tunelul. Dacă ați configurat un tunel complet, verificați adresa IPv4 publică a clientului cu un serviciu de verificare IP de încredere; aceasta ar trebui să corespundă cu adresa de ieșire a serverului Debian.
Verificați dacă peer-ul are o confirmare recentă de handshake WireGuard, contoarele de transfer cresc și adresa tunelului clientului răspunde.
Probleme comune și ce înseamnă ele de fapt
Simptom
Cauză probabilă
Acțiunea următoare utilă
Fără strângere de mână
Chei greșite, punct final, port UDP, firewall upstream, redirecționare port router sau CGNAT
Confirmați că UDP 51820 ajunge la gazda Debian și verificați din nou ambele chei publice.
Strângerea de mână funcționează, dar nu există internet
Lipsește redirecționarea IPv4, regulile de redirecționare a firewall-ului sau NAT-ul
Verificați sysctl net.ipv4.ip_forward, nft list ruleset, și numele interfeței de ieșire.
Poate ajunge la 10.8.0.1, dar nu la o rețea LAN privată
Clientul nu are ruta LAN sau rețeaua LAN nu are o rută de retur
Adăugați subrețeaua LAN la client AllowedIPsși configurați rutarea sau NAT-ul în mod corespunzător.
Unele site-uri se opresc
Posibilă problemă cu calea MTU
Testează cu pachete mai mici înainte de a forța un MTU. wg-quickSe poate alege automat un MTU, așa că nu seta 1420 doar pentru că un alt ghid o face.
IPv4 folosește VPN, dar IPv6 nu
Rutele doar pentru profil0.0.0.0/0
Configurați IPv6 și prin WireGuard sau dezactivați/blocați în mod deliberat IPv6 al clientului dacă este necesară evitarea scurgerilor de IPv6.
Tunel complet sau tunel divizat: pe care ar trebui să îl alegeți?
Folosește un tunel complet atunci când scopul este de a proteja traficul pe Wi-Fi nesigur sau de a face ca traficul de internet să iasă de pe serverul Debian. Folosește un tunel divizat atunci când ai nevoie doar de acces de la distanță la un server, o rețea de domiciliu, un laborator sau o aplicație internă și dorești ca traficul normal de internet să rămână local. Alegerea este controlată în principal de AllowedIPs.
Pentru o implementare punct-la-site mică, configurația de mai sus este suficientă pentru a stabili o bază ușor de întreținut: un bloc peer per client, adrese unice de tunel, servicii gestionate de Debian și nftables pentru comportamentul de rutare de care aveți nevoie. Pentru implementări mai mari, distribuția cheilor, ciclul de viață al peer-ilor, DNS, înregistrarea în jurnal și gestionarea configurației devin preocupări operaționale, chiar dacă protocolul WireGuard în sine rămâne simplu.
Listă de verificare finală pentru verificare
wg-quick@wg0este activă și wg0are 10.8.0.1/24.
Serverul ascultă pe UDP 51820, iar portul respectiv este accesibil prin orice firewall sau router din amonte.
Fiecare client are propria pereche de chei și /32o intrare unică pe server.
net.ipv4.ip_forwardeste egal 1cu atunci când este necesar acces rutat.
Mascarea nftables este prezentă pentru accesul la internet prin tunel complet, cu excepția cazului în care utilizați în mod intenționat căi de retur rutate.
wg showafișează o strângere de mână recentă după ce clientul trimite trafic.
Clientul AllowedIPsse potrivește cu designul dorit, fie cu tunel complet, fie cu tunel divizat.
Acești pași vizează Debian 12 și instrumentele standard WireGuard disponibile prin Debian. Topologia rețelei, NAT-ul în amonte, firewall-urile în cloud, rutarea LAN privată și politica IPv6 sunt specifice mediului, deci aceste componente nu pot fi deduse doar din configurația WireGuard. Validați fiecare element separat, în loc să tratați fiecare problemă de conectivitate ca o eroare WireGuard.