Kako postaviti WireGuard na Ubuntu


Uvod

WireGuard je lagana virtualna privatna mreža (VPN) koja podržava veze s IPv4 i IPv6. VPN vam omogućuje prelazak preko nepouzdanih mreža kao da ste na privatnoj mreži. Omogućuje vam sigurnije korištenje interneta s uređaja poput prijenosnih računala ili mobilnih telefona kada ste povezani na nepouzdane mreže, uključujući javni WiFi.

WireGuardovo šifriranje oslanja se na javne i privatne ključeve kako bi čvorovi mogli uspostaviti šifrirane tunelske veze između sebe. Svako izdanje WireGuarda koristi fiksni skup modernih kriptografskih metoda, što pomaže u održavanju protokola jednostavnim i predvidljivim. Ovaj dizajn izbjegava pregovaranje u stvarnom vremenu i smanjuje rizik od pogrešaka u konfiguraciji.

U usporedbi, drugi VPN softveri poput OpenVPN i IPsec oslanjaju se na Transport Layer Security i certifikate za autentifikaciju i uspostavu šifriranih tunela. Iako ovaj pristup pruža fleksibilnost i podržava širok raspon klijenata, također povećava složenost konfiguracije i otežava razumijevanje operativnog ponašanja.

U ovom vodiču postavit ćete WireGuard na Ubuntu server i konfigurirati drugi uređaj da se poveže na njega kao peer koristeći i IPv4 i IPv6, što se obično naziva dual-stack konfiguracija. Također ćete naučiti kako usmjeravati promet peer uređaja kroz WireGuard server u gateway postavci, kao i kako koristiti VPN za šifriranu peer-to-peer komunikaciju.

Osim osnovne postavke, ovaj vodič pokriva praktične teme koje su važne za stvarne implementacije. To uključuje razumijevanje WireGuardove peer-to-peer arhitekture, upravljanje i rotaciju ključeva, pravilno rukovanje IPv6 i dual-stack usmjeravanjem, poboljšanje pouzdanosti za peer uređaje iza NAT-a, optimizaciju performansi te razumijevanje kako se WireGuard uspoređuje s OpenVPN-om u pogledu transportnih protokola i ponašanja vatrozida.

Za potrebe ovog vodiča, drugi Ubuntu sustav se koristi kao WireGuard Peer. Kasniji vodiči u ovoj seriji pokrivaju instalaciju i korištenje WireGuarda na Windowsu, macOS-u, Androidu i iOS-u.

Postavite svoje frontend aplikacije s GitHub-a koristeći Linux-Console.net App Platform. Neka Linux-Console.net brine o skaliranju vaše aplikacije.

Napomena: Ako planirate postaviti WireGuard na Linux-Console.net Dropletu, imajte na umu da, kao i mnogi pružatelji hosting usluga, naplaćujemo prekoračenja propusnosti. Iz tog razloga, molimo vas da pazite koliko prometa vaš poslužitelj prima. Za više informacija pogledajte našu stranicu o naplati propusnosti.

Ključne informacije:

  • WireGuard je lagani VPN koji koristi suvremenu kriptografiju s jednostavnim dizajnom temeljenim na parovima javnog i privatnog ključa, što smanjuje složenost konfiguracije i pogreške.
  • WireGuard slijedi arhitekturu ravnopravnih čvorova u kojoj svi sustavi koriste isti softver, a pojmovi poslužitelj i čvor samo opisuju mrežnu topologiju, a ne različite uloge ili sposobnosti.
  • Sva enkripcija, autentifikacija i ponašanje rutiranja u WireGuardu definirani su izričito u konfiguracijskim datotekama, bez kontrolne ravnine, certifikacijske vlasti ili pregovaranja u stvarnom vremenu.
  • Postavka AllowedIPs ima dvije svrhe: kontrolira koji se promet prosljeđuje kroz tunel i djeluje kao strogi popis pristupa za dolazni promet od vršnjaka.
  • WireGuard podjednako podržava IPv4 i IPv6, a konfiguracije s dvostrukim stogom zahtijevaju pažljivo postavljanje rutiranja, pravila vatrozida i prosljeđivanja za svaki protokol.
  • Kada se koristi WireGuard kao VPN pristupnik, prosljeđivanje IP-a i maskiranje vatrozida moraju biti konfigurirani na poslužitelju kako bi promet između sudionika mogao dosegnuti vanjske mreže.
  • Pomoćni alat wg-quick automatizira stvaranje ruta, pravila vatrozida i postavljanje sučelja, dok se kernel modul WireGuard fokusira samo na enkripciju i dekripciju paketa.
  • IPv6 curenja mogu se pojaviti u dual-stack konfiguracijama ako IPv6 rute poput ::/0 nisu izričito uključene, što uzrokuje da IPv6 promet zaobilazi VPN čak i kada je IPv4 promet ispravno tuneliran.
  • WireGuard automatski ne mijenja sistemske rute, DNS postavke ili pravila vatrozida, pa su alati poput wg-quick ili ručna konfiguracija potrebni za upravljanje rutiranjem i mrežnim ponašanjem.
  • Implementacije WireGuarda s dvostrukim stogom zahtijevaju zasebno konfiguriranje prosljeđivanja IPv4 i IPv6, pravila vatrozida i podrške za ICMPv6, budući da operativni sustav svaki protokol obrađuje neovisno.

Preduvjeti

Za praćenje ovog vodiča trebat će vam:

  • Jedan Ubuntu poslužitelj s korisnikom koji ima sudo privilegije, ali nije root, i s omogućenom vatrozidom. Za postavljanje možete pratiti naš vodič Početno postavljanje poslužitelja s Ubuntuom. Tijekom ovog vodiča ćemo na ovo referirati kao WireGuard poslužitelj.

  • Trebat će vam klijentsko računalo koje ćete koristiti za povezivanje s vašim WireGuard poslužiteljem. U ovom vodiču ćemo ovo računalo nazivati WireGuard Peer. Za potrebe ovog vodiča preporuča se koristiti vaše lokalno računalo kao WireGuard Peer, ali možete koristiti i udaljene poslužitelje ili mobilne telefone kao klijente ako želite. Ako koristite udaljeni sustav, obavezno pratite sve opcionalne dijelove kasnije u ovom vodiču ili se možete zaključati iz sustava.

  • Da biste koristili WireGuard s IPv6, također ćete morati osigurati da je vaš poslužitelj konfiguriran tako da podržava tu vrstu prometa. Ako želite omogućiti podršku za IPv6 s WireGuardom i koristite Linux-Console.net Droplet, molimo vas da pogledate ovu stranicu dokumentacije Kako omogućiti IPv6 na Dropletu. Podršku za IPv6 možete dodati prilikom stvaranja Dropleta ili naknadno koristeći upute na toj stranici.

Pregled arhitekture WireGuarda

Prije nego što konfigurirate WireGuard, korisno je razumjeti kako sustavi, vršnjaci i mrežni promet međusobno djeluju. WireGuard koristi namjerno jednostavnu arhitekturu koja izbjegava kontrolne ravnine, certifikacijske vlasti i izvodenje pregovora o konfiguracijskim parametrima u stvarnom vremenu. Svo šifriranje, autentifikacija i ponašanje usmjeravanja definirani su izričito putem konfiguracijskih datoteka.

Pojmovnik dizajna i topologije posrednika

WireGuard je u osnovi peer-to-peer protokol. Isti WireGuard softver i kernel modul rade na svim sudjelujućim sustavima, i ne postoji zaseban server ili klijentska binarka.

U ovom vodiču, pojam WireGuard poslužitelj odnosi se na središnji čvor u topologiji hub-and-spoke. Ovaj sustav je javno dostupan i djeluje kao točka koordinacije za druge čvorove. Pojam WireGuard čvor odnosi se na uređaje koji se povezuju s ovim središtem. Ovi pojmovi opisuju mrežnu topologiju korištenu u ovom vodiču, a ne različite uloge ili mogućnosti softvera.

Razumijevanje ove razlike je važno jer WireGuard nema opcije konfiguracije samo za poslužitelj. Bilo koji sustav može djelovati kao središte, krajnja točka ili oboje, ovisno isključivo o tome kako su definirani ključevi, adrese i pravila usmjeravanja.

Osnovne komponente u WireGuard implementaciji

WireGuard implementacija sastoji se od malog broja jasno definiranih komponenti, svaka sa svojom specifičnom odgovornošću.

  • Centralni čvor (Hub): Centralni čvor je sustav dostupan javnosti koji sluša šifrirani UDP promet na jednom portu. Ima virtualno tunelsko sučelje, obično nazvano wg0, i pohranjuje javne ključeve drugih čvorova s kojima je dopuštena komunikacija. Hub ne otkriva dinamički čvorove niti implicitno prihvaća veze. Promet se prihvaća samo od čvorova čiji su javni ključevi i dopušteni IP rasponi eksplicitno konfigurirani.

  • Povezivanje čvorova (spoke): Povezivanje čvorova su uređaji koji uspostavljaju šifrirane tunelske veze s centralnim čvorom. Ti uređaji mogu biti prijenosna računala, poslužitelji, virtualna računala ili mobilni sustavi. Svaki čvor ima jedinstveni kriptografski par ključeva i jednu ili više privatnih IP adresa dodijeljenih njegovom tunelskom sučelju. Čvor šalje promet kroz tunel samo kada to njegove pravila usmjeravanja nalažu.

  • Tunelski sučelje (wg0): Tunelsko sučelje je virtualni mrežni uređaj kreiran na svakom sudjelujućem sustavu. Sav šifrirani promet ulazi i izlazi kroz ovo sučelje. Iz perspektive operativnog sustava, wg0 se ponaša kao standardno mrežno sučelje, što omogućuje primjenu uobičajenih tablica usmjeravanja, pravila vatrozida i ponašanja prosljeđivanja.

Enkripcija, autentifikacija i rukovanje rukovanjem

WireGuard koristi kriptografiju javnog ključa za autentifikaciju sudionika i šifriranje prometa. Svaki sudionik generira dugoročni privatni ključ koji ostaje na lokalnom sustavu i nikada se ne prenosi. Odgovarajući javni ključ dijeli se s drugim sudionicima i dodaje u njihove konfiguracije.

Kada komunikacija započne, WireGuard izvodi tihi, automatski kriptografski rukovanje temeljeno na Noise protokol okviru. Ovo rukovanje uspostavlja privremene ključeve sesije i pruža potpunu tajnost prema naprijed (Perfect Forward Secrecy). Ovi ključevi sesije se periodično mijenjaju bez intervencije korisnika.

WireGuard ne pregovara o skupovima šifri, metodama autentifikacije ili verzijama protokola. Svi kriptografski primitivni elementi su fiksni po dizajnu. To uklanja cijelu klasu konfiguracijskih pogrešaka, istovremeno pružajući moderne sigurnosne garancije.

Podržani obrasci protoka prometa

WireGuard podržava više obrazaca prometa ovisno o tome kako su konfigurirani usmjeravanje i prosljeđivanje. Ovaj vodič fokusira se na dva najčešća slučaja uporabe.

Pristup međusobnoj mreži ili internoj mreži

U peer-to-peer ili internom pristupu, promet je šifriran samo između sustava koji su dio VPN-a. Središnji peer djeluje kao sigurna krajnja točka ili relej, ali ne prosljeđuje promet prema vanjskim mrežama.

Ova konfiguracija se obično koristi za pristup privatnim uslugama, upravljanje infrastrukturom ili povezivanje izoliranih sustava. Promet se usmjerava u tunel samo kada odredišna adresa odgovara privatnim IP rasponima definiranim u konfiguraciji partnera.

VPN način rada gatewaya

U načinu rada gateway, središnji čvor prosljeđuje promet od drugih čvorova prema vanjskim mrežama, uključujući javni Internet. Čvorovi šalju dio ili sav svoj promet kroz tunel, a središnji čvor usmjerava taj promet dalje koristeći IP prosljeđivanje i prevođenje mrežnih adresa.

Ova konfiguracija zahtijeva dodatne sistemske postavke, uključujući prosljeđivanje kernela i pravila vatrozida. Kada je omogućen način rada gateway, odlazni promet od peerova pojavljuje se kao da potječe s javne IP adrese središnjeg peera.

Dvostruka uloga AllowedIPs

Direktiva AllowedIPs u WireGuardu služi dvjema različitim svrhema.

Prvo, definira se ponašanje usmjeravanja izlaznog prometa. Kad odredišna adresa paketa odgovara unosu u AllowedIPs, taj se paket usmjerava kroz WireGuard tunel.

Drugo, AllowedIPs djeluje kao strogi popis dopuštenih dolaznih pristupa. Kada paket stigne od sučelnika, WireGuard provjerava IP adresu izvora paketa. Ako adresa izvora nije navedena u AllowedIPs tog sučelnika, paket se odmah odbacuje.

Ova dvostruka uloga je namjerna i jedan je od najčešćih izvora pogrešaka u konfiguraciji. Samo ispravno usmjeravanje nije dovoljno. Izvorne IP adrese koje smije koristiti sučeljni računalni sustav također moraju biti izričito dopuštene.

Automatizacija rutiranja i pomoćni alati

Sam kernel modul WireGuard ne mijenja sistemske rute, DNS postavke ili pravila vatrozida. Samo šifrira i dešifrira pakete te ih povezuje s vršnjacima.

Automatizaciju usmjeravanja obavljaju pomoćni alati poput wg-quick. Ovaj alat čita konfiguracijsku datoteku WireGuard i primjenjuje potrebne unose u tablici usmjeravanja, DNS postavke i pravila vatrozida kada se tunel uključi ili isključi.

Ako je WireGuard konfiguriran korištenjem alternativnih alata kao što su sirove wg naredbe, systemd-networkd ili prilagođeni skripti, ove promjene ruta moraju se upravljati ručno.

Ova separacija održava osnovni protokol jednostavnim, dok omogućuje fleksibilnu integraciju s različitim mrežnim slojevima sustava.

Korak 1 — Instalacija WireGuard-a i generiranje para ključeva

Prvi korak u ovom vodiču je instalacija WireGuarda na vaš poslužitelj. Za početak, ažurirajte paketni indeks vašeg WireGuard poslužitelja i instalirajte WireGuard koristeći sljedeće naredbe. Možda ćete biti upitani da unesete lozinku svog sudo korisnika ako prvi put koristite sudo u ovoj sesiji:

sudo apt update

sudo apt install wireguard

Sada kada imate instaliran WireGuard, sljedeći korak je generiranje privatnog i javnog ključa za poslužitelj. Koristit ćete ugrađene naredbe wg genkey i wg pubkey za stvaranje ključeva, a zatim dodati privatni ključ u konfiguracijsku datoteku WireGuard-a.

Također ćete morati promijeniti dopuštenja za ključ koji ste upravo stvorili koristeći naredbu chmod, jer je prema zadanim postavkama datoteka čitljiva za svakog korisnika na vašem poslužitelju.

Kreirajte privatni ključ za WireGuard i promijenite njegove dozvole koristeći sljedeće naredbe:

wg genkey | sudo tee /etc/wireguard/private.key

sudo chmod go= /etc/wireguard/private.key

Naredba sudo chmod go=... uklanja sva dopuštenja za datoteku za korisnike i grupe osim root korisnika kako bi se osiguralo da samo on može pristupiti privatnom ključu.

Trebali biste dobiti jedan redak base64 kodiranog izlaza, što je privatni ključ. Kopija izlaza također se pohranjuje u datoteku /etc/wireguard/private.key za buduću referencu pomoću tee dijela naredbe. Pažljivo zabilježite privatni ključ koji se ispisuje jer ćete ga kasnije u ovom odjeljku trebati dodati u konfiguracijsku datoteku WireGuard-a.

Sljedeći korak je stvoriti odgovarajući javni ključ, koji se dobiva iz privatnog ključa. Upotrijebite sljedeću naredbu za stvaranje datoteke javnog ključa:

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Ova naredba sastoji se od tri pojedinačne naredbe koje su povezane zajedno pomoću operatora | (pipe):

  • sudo cat /etc/wireguard/private.key: ova naredba čita datoteku privatnog ključa i ispisuje je na standardni izlazni tok.
  • wg pubkey: druga naredba uzima izlaz iz prve naredbe kao svoj standardni ulaz i obrađuje ga kako bi generirala javni ključ.
  • sudo tee /etc/wireguard/public.key: konačna naredba preusmjerava izlaz naredbe za generiranje javnog ključa u datoteku pod nazivom /etc/wireguard/public.key.

Kada pokrenete naredbu, ponovno ćete dobiti jedan redak base64 enkodiranog izlaza, što je javni ključ za vaš WireGuard poslužitelj. Kopirajte ga negdje za referencu, jer ćete trebati distribuirati javni ključ svakom korisniku koji se poveže na poslužitelj.

Korak 2 — Odabir IPv4 i IPv6 adresa

U prethodnom odjeljku instalirali ste WireGuard i generirali par ključeva koji će se koristiti za šifriranje prometa prema i od poslužitelja. U ovom odjeljku stvorit ćete konfiguracijsku datoteku za poslužitelj i postaviti WireGuard da se automatski pokreće kada se poslužitelj ponovno pokrene. Također ćete definirati privatne IPv4 i IPv6 adrese koje ćete koristiti sa svojim WireGuard poslužiteljem i klijentima.

Ako planirate koristiti i IPv4 i IPv6 adrese, slijedite oba ova odjeljka. U suprotnom, slijedite upute iz odgovarajućeg odjeljka za potrebe mreže vašeg VPN-a.

Korak 2(a) — Odabir IPv4 raspona

Ako koristite svoj WireGuard poslužitelj s IPv4 korisnicima, poslužitelj treba raspon privatnih IPv4 adresa koje će koristiti za klijente i za svoje tunelsko sučelje. Možete odabrati bilo koji raspon IP adresa iz sljedećih rezerviranih blokova adresa (ako želite saznati više o tome kako su ti blokovi dodijeljeni, posjetite specifikaciju RFC 1918):

  • 10.0.0.0 do 10.255.255.255 (prefiks 10/8)
  • 172.16.0.0 do 172.31.255.255 (prefiks 172.16/12)
  • 192.168.0.0 do 192.168.255.255 (prefiks 192.168/16)

Za potrebe ovog vodiča koristit ćemo 10.8.0.0/24 kao blok IP adresa iz prvog raspona rezerviranih IP-ova. Ovaj raspon omogućit će do 255 različitih veza s vršnjacima i općenito ne bi trebao imati preklapajuće ili sukobljive adrese s drugim privatnim IP rasponima. Slobodno odaberite raspon adresa koji odgovara vašoj mrežnoj konfiguraciji ako ovaj primjer raspona nije kompatibilan s vašim mrežama.

WireGuard poslužitelj će koristiti jednu IP adresu iz raspona za svoju privatnu tunelsku IPv4 adresu. Ovdje ćemo koristiti 10.8.0.1/24, ali se može koristiti bilo koja adresa u rasponu od 10.8.0.1 do 10.8.0.255. Zabilježite IP adresu koju odaberete ako koristite nešto drugo osim 10.8.0.1/24. Tu IPv4 adresu ćete dodati u konfiguracijsku datoteku koju definirate u Izradi WireGuard konfiguracije poslužitelja.

Korak 2(b) — Odabir IPv6 raspona

Ako koristite WireGuard s IPv6, tada ćete morati generirati jedinstveni lokalni IPv6 unicast prefiks temeljen na algoritmu iz RFC 4193. Adrese koje koristite s WireGuardom bit će povezane s virtualnim tunelskim sučeljem. Trebat ćete dovršiti nekoliko koraka kako biste generirali nasumični, jedinstveni IPv6 prefiks unutar rezerviranog bloka privatnih IPv6 adresa fd00::/8.

Prema RFC-u, preporučeni način za dobivanje jedinstvenog IPv6 prefiksa je kombiniranje vremena u danu s jedinstvenom identificirajućom vrijednošću iz sustava poput serijskog broja ili ID-a uređaja. Te se vrijednosti zatim hashiraju i skraćuju, što rezultira skupom bitova koji se može koristiti kao jedinstvena adresa unutar rezerviranog privatnog bloka IP-ova fd00::/8.

Za početak generiranja IPv6 raspona za vaš WireGuard poslužitelj, prikupite 64-bitni vremenski zapis koristeći date alat s sljedećom naredbom:

date +%s%N

Dobit ćete broj poput sljedećeg, koji predstavlja broj sekundi (parametar %s u naredbi date) i nanosekundi (parametar %N) od 1970-01-01 00:00:00 UTC spojeno zajedno:

1628101352127592197

Zabilježite vrijednost negdje za kasniju upotrebu u ovom odjeljku. Zatim kopirajte vrijednost machine-id za vaš server iz datoteke /var/lib/dbus/machine-id. Ovaj identifikator je jedinstven za vaš sustav i ne bi se trebao mijenjati dok server postoji.

cat /var/lib/dbus/machine-id

Dobit ćete izlaz kao sljedeći:

/var/lib/dbus/machine-id
20086c25853947c7aeee2ca1ea849d7d

Sada trebate kombinirati vremensku oznaku s machine-id i heširati dobivenu vrijednost koristeći SHA-1 algoritam. Naredba će koristiti sljedeći format:

printf <timestamp><machine-id> | sha1sum

Pokrenite naredbu zamjenjujući vrijednosti vašeg vremenskog žiga i identiteta računala:

printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum

Dobit ćete vrijednost hash-a poput sljedeće:

4f267c51857d6dc93a0bca107bca2f0d86fac3bc  -

Imajte na umu da je izlaz naredbe sha1sum u heksadecimalnom obliku, pa izlaz koristi dva znaka za predstavljanje jednog bajta podataka. Na primjer, 4f i 26 u primjeru izlaza su prva dva bajta haširanih podataka.

Algoritam u RFC-u zahtijeva samo najmanje značajnih (zadnjih) 40 bita, odnosno 5 bajtova, hasiranog izlaza. Upotrijebite naredbu cut za ispis posljednjih 5 bajtova kodiranih u heksadecimalnom obliku iz hasha:

printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-

Argument -c govori naredbi cut da odabere samo određeni skup znakova. Argument 31- govori cut da ispiše sve znakove od pozicije 31 do kraja ulaznog retka.

Trebali biste dobiti izlaz poput sljedećeg:

0d86fac3bc

U ovom primjeru izlaza, skup bajtova je: 0d 86 fa c3 bc.

Sada možete konstruirati svoj jedinstveni IPv6 mrežni prefiks dodavanjem 5 bajtova koje ste generirali uz prefiks fd, pri čemu svaki 2 bajta odvajate s : za čitljivost. Budući da svaki podmrežni segment u vašem jedinstvenom prefiksu može sadržavati ukupno 18.446.744.073.709.551.616 mogućih IPv6 adresa, možete ograničiti podmrežu na standardnu veličinu /64 radi jednostavnosti.

Koristeći bajtove prethodno generirane s veličinom podmreže /64, rezultatni prefiks bit će sljedeći:

Unique Local IPv6 Address Prefix
fd0d:86fa:c3bc::/64

Ovaj raspon fd0d:86fa:c3bc::/64 je onaj koji ćete koristiti za dodjeljivanje pojedinačnih IP adresa vašim WireGuard tunel sučeljima na serveru i klijentima. Da biste dodijelili IP serveru, dodajte 1 nakon završnih :: znakova. Dobivena adresa će biti fd0d:86fa:c3bc::1/64. Klijenti mogu koristiti bilo koji IP u rasponu, ali obično povećavate vrijednost za jedan svaki put kada dodate novog klijenta, npr. fd0d:86fa:c3bc::2/64. Zabilježite IP i nastavite s konfiguracijom WireGuard servera u sljedećem odjeljku ovog vodiča.

Razmatranja konfiguracije IPv6 i dvostrukog stoga

Postojeći koraci u ovom vodiču objašnjavaju kako generirati IPv6 adrese i dodijeliti ih WireGuard sučeljima. Međutim, ponašanje IPv6 u WireGuardu razlikuje se u nekoliko važnih aspekata u odnosu na IPv4, posebno kada se WireGuard koristi kao VPN gateway. Razumijevanje tih razlika pomaže spriječiti pogreške u usmjeravanju, djelomično tuneliranje i uobičajene IPv6 propuštanja.

Podrška za IPv6 u WireGuardu

WireGuard podržava IPv6 kao primarni protokol. IPv6 promet se šifrira, autentificira i usmjerava koristeći iste mehanizme kao i IPv4 promet. Ne postoji poseban IPv6 način rada niti dodatna konfiguracijska opcija. Ako su IPv6 adrese dodijeljene tunelskom sučelju i pravila usmjeravanja to dopuštaju, IPv6 promet prolazi kroz tunel automatski.

Za razliku od IPv4, IPv6 je dizajniran da izbjegne NAT koristeći globalno rutabilne adrese, ali u praksi mnogi VPN i cloud sustavi i dalje koriste NAT radi operativne jednostavnosti. Međutim, to ponašanje ovisi o mrežnom okruženju. U mnogim postavkama VPN pristupnika, kao što su cloud VPS instance ili kućni usmjerivači, poslužitelj ne prima delegirani IPv6 prefiks koji se može usmjeravati prema VPN klijentima.

U ovim uobičajenim scenarijima, sudionicima se dodjeljuju privatne IPv6 adrese, obično iz raspona Unique Local Address (ULA). Kada se koriste privatne IPv6 adrese i server nema usmjereni prefiks za njih, i dalje je potrebno IPv6 maskiranje. To se obično provodi pomoću ip6tables -t nat pravila, slično IPv4 maskiranju, kako bi VPN sudionici mogli pristupiti javnom Internetu.

IPv6 može potpuno izbjeći NAT kada je dostupna odgovarajuća delegacija prefiksa. Međutim, većina jednostavnih implementacija VPN pristupnika i dalje se oslanja na IPv6 prikrivanje kako bi održala upravljivost usmjeravanja.

Objašnjenje ponašanja s dvostrukim stogom

Konfiguracija s dvostrukim slojem omogućuje korištenje i IPv4 i IPv6 na istom WireGuard sučelju. U ovoj postavci, sučelju wg0 dodjeljuje se jedna IPv4 adresa i jedna IPv6 adresa, a svaki protokol se usmjerava neovisno.

Operativni sustav zasebno procjenjuje IPv4 i IPv6 rute. Peer može uspješno usmjeravati IPv4 promet kroz tunel dok IPv6 promet zaobilazi tunel, ili obrnuto. Ovo ponašanje je očekivano i gotovo uvijek ukazuje na problem s konfiguracijom, a ne na problem s samim WireGuardom.

Da bi dual-stack usmjeravanje ispravno funkcioniralo, mora biti zadovoljeno nekoliko uvjeta. I poslužitelj i partner moraju imati dodijeljene IPv4 i IPv6 adrese na svojim WireGuard sučeljima. Direktiva AllowedIPs mora uključivati i IPv4 i IPv6 raspona. Prosljeđivanje IP-a mora biti omogućeno zasebno za IPv4 i IPv6. Pravila vatrozida moraju dopuštati prosljeđivanje i povratni promet za oba protokola.

Dodjela adresa i duljine prefiksa

Za IPv4, WireGuard implementacije obično koriste privatne raspon adresa poput 10.0.0.0/8 ili 192.168.0.0/16. Svakom čvoru se obično dodjeljuje jedna IPv4 adresa.

Za IPv6, uobičajeno je definirati VPN mrežu kao /64 prefiks, poput fd00::/64. Dok Ethernet mreže zahtijevaju /64 za otkrivanje susjeda i automatsku konfiguraciju adresa, WireGuard radi kao točkasti priključak sloja 3 i ne koristi te mehanizme.

Zbog toga je sigurno i često se preporučuje dodijeliti svakom čvoru /128 IPv6 adresu, poput fd00::2/128. Korištenje /128 adresa osigurava strogo usmjereno ponašanje i sprječava čvorove da pokušavaju izravno komunicirati s drugim adresama u podmreži bez odgovarajućih pravila usmjeravanja.

Definiranje mreže kao /64 dok se klijentima dodjeljuju /128 adrese pruža jasnoću i izbjegava dvosmislenu usmjeravanje.

Usmjeravanje sve prometa pomoću IPv6

Kada je WireGuard konfiguriran kao VPN prolaz, IPv6 promet mora biti usmjeren izričito na isti način kao i IPv4 promet.

Za IPv4, usmjeravanje sav promet koristi prefiks 0.0.0.0/0. Za IPv6, odgovarajući prefiks je ::/0. Oba prefiksa moraju biti uključena ako je cilj usmjeriti sav promet putem VPN-a.

Ako je konfiguriran samo 0.0.0.0/0, IPv4 promet se šalje preko VPN-a, dok IPv6 promet nastavlja koristiti lokalno mrežno sučelje. Ova situacija je poznata kao IPv6 curenje. To obično rezultira time da DNS upiti, web promet ili veze aplikacija zaobilaze VPN preko IPv6, dok je IPv4 promet zaštićen.

IPv6 curenja često stvaraju zabunu i uvijek ih treba testirati kada je omogućeno dvostruko mrežno povezivanje.

Vatrozid, prosljeđivanje i ICMPv6

Prosljeđivanje IPv6 mora biti omogućeno neovisno o prosljeđivanju IPv4. Omogućavanje jednog ne znači automatsko omogućavanje drugog. Obje postavke su potrebne pri usmjeravanju prometa između sučelja.

Pravila vatrozida također moraju biti izričito definirana za IPv6. Alati poput ufw, iptables i nftables tretiraju IPv4 i IPv6 kao odvojene skupove pravila. Nedostatak pravila za IPv6 može tiho blokirati promet čak i kada se čini da IPv4 povezanost funkcionira.

Posebno je važno omogućiti ICMPv6 promet. Za razliku od IPv4, IPv6 ovisi o ICMPv6 za osnovne funkcije poput otkrivanja maksimalne veličine prijenosnog paketa (Path MTU Discovery). Ako je ICMPv6 blokiran, veze se mogu zastajkivati ili ne uspjeti prilikom prijenosa većih paketa, iako se čini da manji paketi rade ispravno.

Uobičajene zamke dual-stack mreža

U implementacijama WireGuarda s dvostrukim stogom često se javljaju različiti problemi. IPv6 rute mogu nedostajati u direktivi AllowedIPs, što uzrokuje zaobilaženje tunela za IPv6 promet. Prosljeđivanje IPv6 možda nije omogućeno na poslužitelju, što sprječava promet da napusti tunelsko sučelje. Pravila vatrozida mogu dozvoljavati IPv4 promet, ali blokirati IPv6 ili ICMPv6 promet. DNS poslužitelji mogu vraćati IPv6 adrese iako IPv6 usmjeravanje nije ispravno konfigurirano.

Ovi problemi često se pojavljuju kao povremeni kvarovi i često se pogrešno dijagnosticiraju kao problemi s aplikacijom ili protokolom.

Odabir između IPv4-samo, IPv6-samo i dvostrukog sloja

U nekim okruženjima korištenje jednog protokola pojednostavljuje rad.

Implementacije samo s IPv4 lakše se integriraju s naslijeđenim sustavima i alatima. Implementacije samo s IPv6 uklanjaju potrebu za IPv4 NAT-om i izbjegavaju iscrpljivanje adresa, ali zahtijevaju dosljednu podršku za IPv6 od pružatelja usluga i klijentskih mreža.

Implementacije s dvostrukim stogom pružaju najveću fleksibilnost, ali također zahtijevaju najpažljivije planiranje, konfiguraciju i provjeru.

Korak 3 — Kreiranje WireGuard server konfiguracije

Prije nego što stvorite konfiguraciju svog WireGuard poslužitelja, trebat će vam sljedeće informacije:

  • Pobrinite se da imate privatni ključ dostupan iz Instalacija WireGuarda i generiranje para ključeva.
  • Ako koristite WireGuard s IPv4, trebat će vam IP adresa koju ste odabrali za poslužitelj u Odabir IPv4 raspona, koja je u ovom primjeru 10.8.0.1/24.
  • Ako koristite WireGuard s IPv6, trebat će vam IP adresa poslužitelja koju ste generirali u Odabir IPv6 raspona. U ovom primjeru IP je fd0d:86fa:c3bc::1/64.

Kada imate potrebni privatni ključ i IP adresu(e), kreirajte novu konfiguracijsku datoteku koristeći nano ili vaš omiljeni uređivač pokretanjem sljedeće naredbe:

sudo nano /etc/wireguard/wg0.conf

Dodajte sljedeće retke u datoteku, zamjenjujući vašu privatnu ključ u mjestu označene vrijednosti base64_encoded_private_key_goes_here i IP adresu(e) u retku Address. Također možete promijeniti redak ListenPort ako želite da WireGuard bude dostupan na drugom portu:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd0d:86fa:c3bc::1/64 ListenPort = 51820 SaveConfig = true

Redak SaveConfig osigurava da se prilikom isključivanja WireGuard sučelja sve promjene spremi u konfiguracijsku datoteku.

Spremite i zatvorite datoteku /etc/wireguard/wg0.conf. Ako koristite nano, to možete učiniti pomoću CTRL+X, zatim Y i ENTER za potvrdu. Sada imate početnu konfiguraciju servera na kojoj možete graditi, ovisno o tome kako planirate koristiti svoj WireGuard VPN server.

Korak 4 — Podešavanje mrežne konfiguracije WireGuard poslužitelja

Ako koristite WireGuard za povezivanje klijenta s WireGuard serverom kako biste pristupili uslugama samo na serveru, tada ne trebate dovršiti ovaj odjeljak. Ako želite proslijediti internetski promet svog WireGuard klijenta preko WireGuard servera, tada ćete trebati konfigurirati prosljeđivanje IP-a slijedeći ovaj odjeljak vodiča.

Za konfiguriranje prosljeđivanja otvorite datoteku /etc/sysctl.conf koristeći nano ili vaš omiljeni uređivač:

sudo nano /etc/sysctl.conf

Ako koristite IPv4 s WireGuardom, dodajte sljedeći redak na dno datoteke:

net.ipv4.ip_forward=1

Ako koristite IPv6 s WireGuardom, dodajte ovu liniju na dno datoteke:

net.ipv6.conf.all.forwarding=1

Ako koristite i IPv4 i IPv6, provjerite jeste li uključili obje linije. Spremite i zatvorite datoteku kada završite.

Da biste pročitali datoteku i učitali nove vrijednosti za vašu trenutnu terminalsku sesiju, pokrenite:

sudo sysctl -p
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

Sada će vaš WireGuard poslužitelj moći prosljeđivati dolazni promet s virtualnog VPN ethernet uređaja drugima na poslužitelju, a od tamo na javni Internet. Korištenje ove konfiguracije omogućit će vam usmjeravanje cijelog web prometa vašeg WireGuard klijenta preko IP adrese vašeg poslužitelja, čime će javna IP adresa vašeg klijenta biti učinkovito skrivena.

Međutim, prije nego što promet može biti ispravno usmjeren putem vašeg poslužitelja, trebate konfigurirati neka pravila vatrozida. Ta pravila će osigurati da promet prema i od vašeg WireGuard poslužitelja i sudionika teče ispravno.

Korak 5 — Konfiguriranje vatrozida WireGuard poslužitelja

U ovom odjeljku uređivat ćete konfiguraciju WireGuard servera kako biste dodali pravila vatrozida koja će osigurati pravilno usmjeravanje prometa prema i od servera i klijenata. Kao i u prethodnom odjeljku, preskočite ovaj korak ako koristite svoj WireGuard VPN samo za vezu između računala kako biste pristupili resursima koji su ograničeni na vaš VPN.

Da biste omogućili WireGuard VPN promet kroz vatrozid poslužitelja, trebate omogućiti maskiranje, što je iptables koncept koji pruža dinamično prevođenje mrežnih adresa (NAT) u stvarnom vremenu kako bi se ispravno usmjerile klijentske veze.

Prvo pronađite javno mrežno sučelje vašeg WireGuard poslužitelja koristeći podnaredbu ip route:

ip route list default

Javno sučelje je niz koji se nalazi u izlazu ove naredbe i slijedi riječ „dev“. Na primjer, ovaj rezultat prikazuje sučelje nazvano eth0, koje je istaknuto u nastavku:

default via 203.0.113.1 dev eth0 proto static

Zabilježite ime svog uređaja jer ćete ga sljedećim korakom dodati u pravila iptables.

Da biste dodali pravila vatrozida na svoj WireGuard poslužitelj, otvorite datoteku /etc/wireguard/wg0.conf ponovo s nano ili svojim omiljenim uređivačem.

sudo nano /etc/wireguard/wg0.conf

Na dnu datoteke, nakon retka SaveConfig=true, zalijepite sljedeće retke:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Linije PostUp će se izvršiti kada WireGuard poslužitelj pokrene virtualni VPN tunel. U ovom primjeru, dodati će tri ufw i iptables pravila:

  • ufw route allow in on wg0 out on eth0: Ovo pravilo će omogućiti prosljeđivanje IPv4 i IPv6 prometa koji dolazi na wg0 VPN sučelje prema eth0 mrežnom sučelju na serveru. Radi u suradnji s net.ipv4.ip_forward i net.ipv6.conf.all.forwarding sysctl vrijednostima koje ste konfigurirali u prethodnom odlomku.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE: Ovo pravilo konfigurira maskiranje i prepisuje IPv4 promet koji dolazi preko wg0 VPN sučelja kako bi izgledalo da potječe izravno s javne IPv4 adrese WireGuard poslužitelja.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE: Ovo pravilo konfigurira maskiranje i prepisuje IPv6 promet koji dolazi preko wg0 VPN sučelja kako bi izgledalo da potječe izravno s javne IPv6 adrese WireGuard poslužitelja.

Napomena: IPv6 maskiranje zahtijeva podršku kernela za ip6table_nat. Na nekim distribucijama ili cloud slikama ovaj modul nije dostupan ili nije omogućen prema zadanim postavkama. U tim slučajevima, morate koristiti pravilno IPv6 usmjeravanje s delegiranim prefiksima umjesto NAT-a, te oglašavati usmjerivi IPv6 prefiks prema suparnicima umjesto korištenja ULA adresa.

Pravila PreDown izvršavaju se kada WireGuard server zaustavi virtualni VPN tunel. Ta su pravila suprotna pravilima PostUp i služe za poništavanje pravila prosljeđivanja i maskiranja za VPN sučelje kada je VPN zaustavljen.

U oba slučaja uređujte konfiguraciju kako biste uključili ili isključili pravila za IPv4 i IPv6 koja su prikladna za vaš VPN. Na primjer, ako koristite samo IPv4, možete isključiti retke s naredbama ip6tables.

Suprotno tome, ako koristite samo IPv6, uređujte konfiguraciju tako da uključuje samo ip6tables naredbe. ufw linije trebale bi postojati za bilo koju kombinaciju IPv4 i IPv6 mreža. Spremite i zatvorite datoteku kada završite.

Posljednji dio konfiguriranja vatrozida na vašem WireGuard serveru je omogućiti promet prema i od samog WireGuard UDP porta. Ako niste promijenili port u serverovoj datoteci /etc/wireguard/wg0.conf, port koji ćete otvoriti je 51820. Ako ste odabrali drugi port prilikom uređivanja konfiguracije, svakako ga zamijenite u sljedećoj UFW naredbi.

Ako ste zaboravili otvoriti SSH port prateći prethodni vodič, dodajte ga ovdje također:

sudo ufw allow 51820/udp

sudo ufw allow OpenSSH

Napomena: Ako koristite drugi vatrozid ili ste prilagodili svoju UFW konfiguraciju, možda ćete trebati dodati dodatna pravila vatrozida. Na primjer, ako odlučite tunelirati sav svoj mrežni promet preko VPN veze, morat ćete osigurati da je promet na portu 53 dopušten za DNS zahtjeve, te portovi poput 80 i 443 za HTTP i HTTPS promet. Ako postoje drugi protokoli koje koristite preko VPN-a, tada ćete za njih također trebati dodati pravila.

Nakon dodavanja tih pravila, onemogućite i ponovno omogućite UFW kako biste ga ponovno pokrenuli i učitali promjene iz svih datoteka koje ste izmijenili:

sudo ufw disable

sudo ufw enable

Možete potvrditi da su pravila postavljena pokretanjem naredbe ufw status. Pokrenite je i trebali biste dobiti izlaz sličan sljedećem:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
51820/udp                  ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
51820/udp (v6)             ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)

Vaš WireGuard poslužitelj sada je konfiguriran za pravilno rukovanje prometom VPN-a, uključujući prosljeđivanje i maskiranje za korisnike. S pravilima vatrozida na mjestu, možete pokrenuti samu WireGuard uslugu kako bi slušala veze korisnika.

Korak 6 — Pokretanje WireGuard servera

WireGuard se može konfigurirati da radi kao systemd servis koristeći njegov ugrađeni wg-quick skript. Iako biste mogli ručno koristiti wg naredbu za stvaranje tunela svaki put kada želite koristiti VPN, to je ručni proces koji postaje repetitivan i sklon pogreškama. Umjesto toga, možete koristiti systemctl za upravljanje tunelom uz pomoć wg-quick skripte.

Korištenje systemd servisa znači da možete konfigurirati WireGuard da se pokrene pri podizanju sustava, tako da se možete povezati na svoj VPN u bilo kojem trenutku dok server radi. Da biste to napravili, omogućite wg-quick servis za wg0 tunel koji ste definirali dodavanjem u systemctl:

sudo systemctl enable wg-quick@wg0.service

Primijetite da naredba navodi ime tunela wg0 kao dio naziva servisa. Ovo ime odgovara konfiguracijskoj datoteci /etc/wireguard/wg0.conf. Ovakav način imenovanja znači da možete kreirati onoliko zasebnih VPN tunela koliko želite koristeći vaš server.

Na primjer, mogli biste imati uređaj tunela i ime prod, a njegova datoteka s konfiguracijom bila bi /etc/wireguard/prod.conf. Svaka konfiguracija tunela može sadržavati različite IPv4, IPv6 i postavke vatrozida za klijente. Na taj način možete podržavati više različitih veza s vršnjacima, svaka sa svojim jedinstvenim IP adresama i pravilima usmjeravanja.

Sada pokrenite uslugu:

sudo systemctl start wg-quick@wg0.service

Provjerite dvaput je li WireGuard usluga aktivna pomoću sljedeće naredbe. Trebali biste vidjeti da je usluga navedena kao aktivna. Imajte na umu da wg-quick izlazi nakon konfiguriranja sučelja, tako da je active (exited) normalno.

sudo systemctl status wg-quick@wg0.service
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-08-25 15:24:14 UTC; 5s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 3245 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 3245 (code=exited, status=0/SUCCESS)

Aug 25 15:24:14 wg0 wg-quick[3245]: [#] wg setconf wg0 /dev/fd/63
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip link set mtu 1420 up dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ufw route allow in on wg0 out on eth0
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added (v6)
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Izlaz prikazuje ip naredbe koje se koriste za kreiranje virtualnog wg0 uređaja i dodjeljivanje IPv4 i IPv6 adresa koje ste dodali u konfiguracijsku datoteku. Ova pravila možete koristiti za rješavanje problema s tunelom, ili ih koristiti s wg naredbom ako želite pokušati ručno konfigurirati VPN sučelje.

Nakon što je poslužitelj konfiguriran i radi, sljedeći korak je konfigurirati vaše korisničko računalo kao WireGuard klijent i povezati se s WireGuard poslužiteljem.

Korak 7 — Konfiguriranje WireGuard klijenta

Konfiguriranje WireGuard Peer-a slično je postavljanju WireGuard Servera. Nakon što instalirate klijentski softver, generirat ćete javni i privatni ključ, odabrati IP adresu ili adrese za peer, definirati konfiguracijsku datoteku za peer i potom pokrenuti tunel koristeći wg-quick skriptu.

Možete dodati koliko god želite peerova u svoj VPN generiranjem ključeva i konfiguracije koristeći sljedeće korake. Ako dodate više peerova u VPN, pazite da pratite njihove privatne IP adrese kako biste spriječili sukobe.

Za konfiguriranje WireGuard Peer-a, osigurajte da imate instaliran WireGuard paket koristeći sljedeće apt naredbe. Na WireGuard Peer-u pokrenite:

sudo apt update

sudo apt install wireguard

Stvaranje ključeva za WireGuard peer

Zatim ćete morati generirati par ključeva na vršnjaku koristeći iste korake koje ste koristili na poslužitelju. S vaše lokalne računala ili udaljenog poslužitelja koji će služiti kao vršnjak, nastavite i stvorite privatni ključ za vršnjaka koristeći sljedeće naredbe:

wg genkey | sudo tee /etc/wireguard/private.key

sudo chmod go= /etc/wireguard/private.key

Ponovno ćete dobiti jedan red base64 kodiranog izlaza, koji je privatni ključ. Kopija izlaza također se pohranjuje u /etc/wireguard/private.key. Pažljivo zabilježite privatni ključ koji se izlazi jer ćete ga kasnije trebati dodati u konfiguracijsku datoteku WireGuarda u ovom odjeljku.

Zatim upotrijebite sljedeću naredbu za stvaranje datoteke javnog ključa:

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Ponovno ćete primiti jedan redak base64 kodiranog izlaza, što je javni ključ za vašeg WireGuard Peer-a. Kopirajte ga negdje za referencu, jer ćete morati distribuirati javni ključ WireGuard Serveru kako biste uspostavili šifriranu vezu.

Kreiranje konfiguracijske datoteke WireGuard partnera

Sada kada imate par ključeva, možete stvoriti konfiguracijsku datoteku za peer koja sadrži sve informacije potrebne za uspostavljanje veze s WireGuard poslužiteljem.

Trebat će vam nekoliko informacija za konfiguracijsku datoteku:

  • Privatni ključ kodiran u base64 koji ste generirali na čvoru.
  • Opsezi IPv4 i IPv6 adresa koje ste definirali na WireGuard poslužitelju.
  • Javni ključ poslan s WireGuard poslužitelja kodiran u base64 formatu.
  • Javna IP adresa i broj porta WireGuard poslužitelja. Obično će to biti IPv4 adresa, ali ako vaš poslužitelj ima IPv6 adresu i vaše klijentsko računalo ima IPv6 vezu s internetom, možete koristiti ovu umjesto IPv4.

S ovim svim informacijama pri ruci, otvorite novu datoteku /etc/wireguard/wg0.conf na WireGuard Peer računalu koristeći nano ili vaš omiljeni uređivač:

sudo nano /etc/wireguard/wg0.conf

Dodajte sljedeće redove u datoteku, zamjenjujući različite podatke u označenim dijelovima prema potrebi:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd0d:86fa:c3bc::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64 Endpoint = 203.0.113.1:51820

Primijetite kako prvi redak Address koristi IPv4 adresu iz 10.8.0.0/24 podmreže koju ste ranije odabrali. Ova IP adresa može biti bilo koja u podmreži sve dok se razlikuje od IP adrese poslužitelja. Povećavanje adresa za 1 svaki put kada dodajete novog korisnika općenito je najlakši način dodjele IP adresa.

Također, primijetite kako druga Address linija koristi IPv6 adresu iz podmreže koju ste ranije generirali, i povećava adresu poslužitelja za jedan. Opet, bilo koja IP adresa u rasponu je valjana ako odlučite koristiti drugu adresu.

Drugi značajan dio datoteke je posljednji redak AllowedIPs. Ova dva IPv4 i IPv6 raspona upućuju peer da šalje promet preko VPN-a samo ako odredišni sustav ima IP adresu u bilo kojem od raspona. Korištenjem direktive AllowedIPs možete ograničiti VPN na peeru tako da se povezuje samo s drugim peerima i servisima na VPN-u, ili možete konfigurirati postavku da sav promet prolazi kroz VPN i koristi WireGuard poslužitelj kao pristupnu točku (gateway).

Ako koristite samo IPv4, tada izostavite završni raspon fd0d:86fa:c3bc::/64 (uključujući , zarez). Suprotno tome, ako koristite samo IPv6, tada uključite samo prefiks fd0d:86fa:c3bc::/64 i izostavite IPv4 raspon 10.8.0.0/24.

U oba slučaja, ako želite poslati sav promet svog suparnika preko VPN-a i koristiti WireGuard poslužitelj kao gateway za sav promet, tada možete koristiti 0.0.0.0/0, što predstavlja cijeli IPv4 adresni prostor, i ::/0 za cijeli IPv6 adresni prostor.

(Neobavezno) Konfiguriranje sučelnika da sav promet usmjerava preko tunela

Ako ste odabrali usmjeravanje cijelog prometa sučelja preko tunela pomoću ruta 0.0.0.0/0 ili ::/0 i sučelje je udaljeni sustav, tada ćete morati dovršiti korake u ovom odjeljku. Ako je vaše sučelje lokalni sustav, najbolje je preskočiti ovaj odjeljak.

Za udaljene uređaje kojima pristupate putem SSH-a ili nekog drugog protokola koristeći javnu IP adresu, morat ćete dodati nekoliko dodatnih pravila u wg0.conf datoteku tog uređaja. Ta pravila će osigurati da se i dalje možete povezati sa sustavom izvana kada je tunel uspostavljen. U suprotnom, kada je tunel uspostavljen, sav promet koji bi se inače obrađivao na javnom mrežnom sučelju neće biti ispravno usmjeren oko wg0 tunelskog sučelja, što će dovesti do nedostupnog udaljenog sustava.

Prvo, trebate odrediti IP adresu koju sustav koristi kao zadanu pristupnu točku. Pokrenite sljedeću naredbu ip route:

ip route list table main default

Dobit ćete izlaz kao sljedeći:

default via 203.0.113.1 dev eth0 proto static

Zabilježite istaknutu IP adresu pristupnika 203.0.113.1 za kasniju upotrebu i uređaj eth0. Naziv vašeg uređaja može biti drugačiji. Ako jest, zamijenite ga umjesto eth0 u sljedećim naredbama.

Zatim pronađite javnu IP adresu sustava tako da pregledate uređaj pomoću naredbe ip address show:

ip -brief address show eth0

Dobit ćete izlaz kao sljedeći:

eth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

U ovom primjeru izlaza, označeni 203.0.113.5 IP (bez završnog /20) je javna adresa koja je dodijeljena uređaju eth0 i koju ćete trebati dodati u WireGuard konfiguraciju.

Sada otvorite /etc/wireguard/wg0.conf datoteku WireGuard klijenta pomoću nano ili vašeg omiljenog uređivača.

sudo nano /etc/wireguard/wg0.conf

Prije linije [Peer] dodajte sljedeće 4 linije:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

Ovi redci će stvoriti prilagođeno pravilo usmjeravanja i dodati prilagođenu rutu kako bi se osiguralo da javni promet prema sustavu koristi zadani pristupnik.

  • PostUp=ip rule add table 200 from 203.0.113.5 - Ova naredba stvara pravilo koje provjerava sve unosne rute u tablici broj 200 kada se IP podudara s javnom 203.0.113.5 adresom sustava.
  • PostUp=ip route add table 200 default via 203.0.113.1 - Ova naredba osigurava da će sav promet koji obrađuje tablica 200 koristiti 203.0.113.1 kao gateway za usmjeravanje, umjesto WireGuard sučelja.

Redovi PreDown uklanjaju prilagođeno pravilo i rutu kada se tunel zatvori.

Napomena: Broj tablice 200 je proizvoljan prilikom izrade ovih pravila. Možete koristiti vrijednost između 2 i 252, ili možete koristiti vlastito ime dodavanjem oznake u datoteku /etc/iproute2/rt_tables i zatim se pozivati na to ime umjesto na numeričku vrijednost.

Za više informacija o tome kako radne tablice usmjeravanja rade u Linuxu, posjetite Odjeljak o radnim tablicama usmjeravanja u Vodiču za administraciju IP sloja mreže s Linuxom.

Ako usmjeravate sav promet partnera preko VPN-a, provjerite jeste li konfigurirali ispravna sysctl i iptables pravila na WireGuard serveru u Podešavanju mrežne konfiguracije WireGuard servera i Konfiguriranju vatrozida WireGuard servera.

(Opcionalno) Konfiguriranje DNS poslužitelja WireGuard peer-a

Ako koristite WireGuard poslužitelj kao VPN pristupnu točku za sav promet svojih mrežnih čvorova, morat ćete dodati redak u odjeljak [Interface] koji specificira DNS poslužitelje. Ako ne dodate ovu postavku, vaši DNS zahtjevi možda neće biti zaštićeni VPN-om, ili bi mogli biti otkriveni vašem davatelju internetskih usluga ili drugim trećim stranama.

Ako koristite WireGuard samo za pristup resursima na VPN mreži ili u konfiguraciji između vršnjaka, možete preskočiti ovaj odjeljak.

Da biste dodali DNS poslužitelje u konfiguraciju vašeg sučesnika, prvo odredite koje DNS poslužitelje koristi vaš WireGuard poslužitelj. Pokrenite sljedeću naredbu na WireGuard poslužitelju, zamijenivši ime svoje ethernet uređaja umjesto eth0 ako je drugačije od ovog primjera:

resolvectl dns eth0

Trebali biste dobiti izlaz poput sljedećeg:

Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

IP adrese koje se ispisuju su DNS razlučivači koje server koristi. Možete odabrati korištenje bilo kojeg ili svih njih, ili samo IPv4 ili IPv6, ovisno o vašim potrebama. Zabilježite razlučivače koje ćete koristiti.

Zatim ćete trebati dodati odabrane razlučitelje u konfiguracijsku datoteku WireGuard Peera. Vratite se na WireGuard Peer i otvorite datoteku /etc/wireguard/wg0.conf koristeći nano ili svoj omiljeni uređivač:

sudo nano /etc/wireguard/wg0.conf

Prije retka [Peer] dodajte sljedeće:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Opet, ovisno o vašim preferencijama ili zahtjevima za IPv4 i IPv6, možete urediti popis prema svojim potrebama.

Kada se povežete na VPN u sljedećem koraku, možete provjeriti šaljete li DNS upite putem VPN-a koristeći stranicu poput DNS leak testa.

Također možete provjeriti koristi li vaš vršnjak konfigurirane razrješivače pomoću naredbe resolvectl dns, kao što ste to pokrenuli na poslužitelju. Trebali biste dobiti izlaz poput sljedećeg, koji prikazuje DNS razrješivače koje ste konfigurirali za VPN tunel:

Global: 67.207.67.2 67.207.67.3
. . .

S svim ovim postavkama DNS rješavača na mjestu, sada ste spremni dodati javni ključ peer-a na poslužitelj, a zatim pokrenuti WireGuard tunel na peer-u.

Korak 8 — Dodavanje javnog ključa sudionika na WireGuard poslužitelj

Prije povezivanja klijenta na poslužitelj, važno je dodati javni ključ klijenta na WireGuard poslužitelj. Ovaj korak osigurava da ćete moći uspostaviti vezu i usmjeravati promet preko VPN-a. Ako se ovaj korak ne dovrši, WireGuard poslužitelj neće dopustiti klijentu slanje ili primanje bilo kakvog prometa preko tunela.

Provjerite imate li kopiju base64 kodiranog javnog ključa za WireGuard Peer pokretanjem:

sudo cat /etc/wireguard/public.key
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Sada se prijavite na WireGuard server i pokrenite sljedeću naredbu:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2

Imajte na umu da dio naredbe allowed-ips prima popis IPv4 i IPv6 adresa odvojenih zarezom. Možete navesti pojedinačne IP adrese ako želite ograničiti IP adresu koju peer može sam sebi dodijeliti, ili raspon poput onog u primjeru ako peerovi mogu koristiti bilo koju IP adresu u VPN rasponu. Također imajte na umu da nijedna dva peera ne mogu imati isti allowed-ips postavku.

Ako želite ažurirati allowed-ips za postojećeg peer-a, možete ponovno pokrenuti istu naredbu, ali promijeniti IP adrese. Podržano je više IP adresa. Na primjer, da biste promijenili WireGuard Peer koji ste upravo dodali kako biste dodali IP poput 10.8.0.100 postojećim IP adresama 10.8.0.2 i fd0d:86fa:c3bc::2, trebali biste izvršiti sljedeće:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2

Kad pokrenete naredbu za dodavanje peer-a, provjerite stanje tunela na serveru koristeći naredbu wg:

sudo wg
interface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128

Primijetite kako linija peer prikazuje javni ključ WireGuard klijenta, te IP adrese ili raspon adresa koje mu je dopušteno koristiti za dodjeljivanje vlastite IP adrese.

Sada kada ste na poslužitelju definirali parametre veze vršnjaka, sljedeći korak je pokrenuti tunel na vršnjaku.

Korak 9 — Povezivanje WireGuard sudionika s tunelom

Sada kada su vaš poslužitelj i vršnjak konfigurirani za podršku vašeg odabira IPv4, IPv6, prosljeđivanja paketa i DNS razlučivanja, vrijeme je da povežete vršnjaka s VPN tunelom.

Budući da možda želite da VPN bude uključen samo za određene slučajeve upotrebe, koristit ćemo naredbu wg-quick za ručno uspostavljanje veze. Ako želite automatizirati pokretanje tunela kao što ste to učinili na poslužitelju, slijedite te korake u odjeljku Pokretanje WireGuard poslužitelja umjesto korištenja naredbe wq-quick.

Ako usmjeravate sav promet kroz VPN i postavili ste prosljeđivanje DNS-a, morat ćete instalirati resolvconf alat na WireGuard Peer prije nego što pokrenete tunel. Pokrenite sljedeću naredbu kako biste to postavili:

sudo apt install resolvconf

Za pokretanje tunela, pokrenite sljedeće na WireGuard sučelju:

sudo wg-quick up wg0

Dobit ćete izlaz kao sljedeći:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x

Primijetite označene IPv4 i IPv6 adrese koje ste dodijelili peeru.

Ako postavite AllowedIPs na sučelju na 0.0.0.0/0 i ::/0 (ili koristite raspon koji se razlikuje od onih koje ste odabrali za VPN), vaš će izlaz izgledati otprilike ovako:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

U ovom primjeru, obratite pažnju na istaknute rute koje je naredba dodala, a koje odgovaraju AllowedIPs u konfiguraciji peer-a.

Status tunela možete provjeriti na sučelju koristeći naredbu wg:

sudo wg
interface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

Također možete ponovno provjeriti status na poslužitelju i dobit ćete sličan izlaz.

Provjerite koristi li vaš vršnjak VPN pomoću naredbi ip route i ip -6 route. Ako koristite VPN kao pristupnu točku za sav vaš internetski promet, provjerite koji će se sučelje koristiti za promet namijenjen CloudFlareovim DNS poslužiteljima 1.1.1.1 i 2606:4700:4700::1111.

Ako koristite WireGuard samo za pristup resursima na VPN-u, zamijenite valjanu IPv4 ili IPv6 adresu, poput same pristupne točke, u ove naredbe. Na primjer 10.8.0.1 ili fd0d:86fa:c3bc::1.

ip route get 1.1.1.1
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Primijetite da se koristi uređaj wg0 i IPv4 adresa 10.8.0.2 koju ste dodijelili sučelju. Isto tako, ako koristite IPv6, pokrenite sljedeće:

ip -6 route get 2606:4700:4700::1111
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium

Opet obratite pažnju na sučelje wg0 i IPv6 adresu fd0d:86fa:c3bc::2 koju ste dodijelili suparniku.

Ako vaš kolega ima instaliran preglednik, možete također posjetiti ipleak.net i ipv6-test.com kako biste potvrdili da vaš kolega prosljeđuje svoj promet preko VPN-a.

Kada ste spremni prekinuti vezu s VPN-om na sučelju, koristite naredbu wg-quick:

sudo wg-quick down wg0

Dobit ćete izlaz poput sljedećeg koji pokazuje da je VPN tunel isključen:

[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f

Ako postavite AllowedIPs na sučelju na 0.0.0.0/0 i ::/0 (ili koristite raspon koji se razlikuje od onih koje ste odabrali za VPN), vaš će izlaz izgledati otprilike ovako:

[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n

Za ponovno povezivanje na VPN, ponovno pokrenite naredbu wg-quick up wg0 na peeru. Ako želite potpuno ukloniti konfiguraciju peera sa WireGuard poslužitelja, možete pokrenuti sljedeću naredbu, pazeći da zamijenite točan javni ključ za peera kojeg želite ukloniti:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Obično ćete konfiguraciju suparnika trebati ukloniti samo ako suparnik više ne postoji ili ako su mu kriptografski ključevi kompromitirani ili promijenjeni. U suprotnom je bolje ostaviti konfiguraciju na mjestu kako bi se suparnik mogao ponovno povezati na VPN bez potrebe da svaki put dodajete njegov ključ i allowed-ips.

Upravljanje i rotacija WireGuard ključeva

WireGuard se oslanja na statične parove javnih i privatnih ključeva za autentifikaciju i enkripciju. Ovaj dizajn značajno smanjuje složenost konfiguracije, ali također stavlja odgovornost za upravljanje ključevima u potpunosti na administratora. Za dugotrajne VPN implementacije, zajedničku infrastrukturu ili okruženja s više peerova, pažljivo upravljanje ključevima ključno je za održavanje sigurnosti i operativne stabilnosti.

Razumijevanje vrsta ključeva WireGuard-a

Svaki WireGuard peer koristi dvije kategorije kriptografskih ključeva.

  • Dugoročni privatni ključevi: Privatni ključ jedinstveno identificira sudionika i mora ostati tajan u svakom trenutku. Ovaj se ključ koristi tijekom enkriptiranih rukovanja za autentikaciju sudionika i izvlačenje kratkoročnih sesijskih ključeva. Ako privatni ključ bude otkriven, bilo koji sustav koji posjeduje taj ključ može se predstavljati kao taj sudionik.

  • Javni ključevi za dugoročno korištenje: Javni ključ se izvodi iz privatnog ključa i dijeli s drugim sudionicima. Na središnjem čvorištu, javni ključevi određuju koji sudionici smiju komunicirati i koje IP adrese smiju koristiti.

Osim ovih dugoročnih ključeva, WireGuard automatski generira privremene ključeve sesije tijekom šifriranih rukovanja. Ti se ključevi sesije periodično mijenjaju i pružaju Savršenu naprijednu tajnost bez potrebe za intervencijom administratora.

Preporučene prakse upravljanja ključevima

Sljedeće prakse pomažu u smanjenju rizika i pojednostavljuju tekuće operacije:

  • Dodijelite jedinstveni par ključeva svakom uređaju: Svaki uređaj trebao bi imati svoj privatni i javni ključ. Korištenje jedinstvenih ključeva omogućuje opoziv pristupa za pojedini uređaj bez utjecaja na druge. Ponovna uporaba ključeva na više sustava povećava rizik u slučaju kompromitacije i otežava reviziju.

  • Ograničite pristup privatnom ključu: Datoteke s privatnim ključem trebale bi biti čitljive samo za root korisnika. Na Linux sustavima, to obično znači postavljanje dopuštenja na 600 pomoću naredbe poput chmod 600 /etc/wireguard/private.key. Ograničavanje pristupa datotekama pomaže u sprječavanju slučajnog otkrivanja putem sigurnosnih kopija, logova ili korisnika bez privilegija.

  • Održavajte jasan popis vršnjaka: Vodite evidenciju koja povezuje javni ključ svakog vršnjaka s nazivom njegovog uređaja, dodijeljenim IPv4 i IPv6 adresama i predviđenom namjenom. Ova dokumentacija postaje sve važnija kako broj vršnjaka raste i olakšava rješavanje problema, revizije i rutinsko održavanje.

  • Brzo uklonite neiskorištene ili neaktivne uređaje: Kada se uređaj povuče iz upotrebe ili mu više nije potreban pristup VPN-u, uklonite njegov javni ključ iz središnje konfiguracije uređaja. Ostaviti neiskorištene ključeve povećava mogućnost napada i otežava buduće provjere.

Situacije koje zahtijevaju rotaciju ključeva

Rotacija ključeva trebala bi se provoditi u nekoliko uobičajenih scenarija:

  • Osumnjičena ili potvrđena izloženost ključa: Ako je privatni ključ možda kopiran, procurio ili mu je pristupila neovlaštena osoba, treba ga odmah zamijeniti kako bi se spriječilo lažno predstavljanje.

  • Izgubljeni ili ukradeni uređaji: Kada je uređaj izgubljen ili ukraden, rotacija njegovih ključeva osigurava da se više ne može povezati s VPN-om, čak i ako se originalna konfiguracija oporavi.

  • Zahtjevi za sigurnost organizacije: Neka okruženja zahtijevaju periodičnu rotaciju ključeva kako bi se ispunile interne politike ili standardi usklađenosti, čak i ako se ne sumnja na kompromitaciju.

  • Promjene u vlasništvu ili ulozi uređaja: Kada se uređaj preraspodijeli drugom korisniku ili za drugu svrhu, rotiranje njegovih ključeva sprječava nenamjerni daljnji pristup.

Sigurno rotiranje ključeva kolege

WireGuard preslikava unutarnje IP adrese na određene javne ključeve koristeći tablicu usmjeravanja kriptoključevima. Zbog ovog dizajna, ista unutarnja IP adresa ne može biti sigurno dodijeljena dvama javnim ključevima u isto vrijeme. Stoga rotacija ključeva obično uključuje kratki prekid veze dok se konfiguracija ažurira.

Za rotiranje ključeva vršnjaka, slijedite ovaj postupak:

  1. Generirajte novi privatni i javni par ključeva na uređaju.
  2. Ažurirajte konfiguraciju središnjeg čvora kako biste zamijenili stari javni ključ novim, pri čemu zadržavate iste vrijednosti AllowedIPs. Još nemojte ponovno pokretati sučelje.
  3. Ažurirajte konfiguracijsku datoteku kolege kako bi koristila novi privatni ključ.
  4. Primijenite ažuriranu konfiguraciju na središnjem čvorištu, na primjer ponovno učitavanjem WireGuard servisa ili korištenjem wg syncconf. U tom trenutku, čvorište će privremeno izgubiti povezivost.
  5. Ponovo pokrenite WireGuard sučelje na sučelju tako da počne koristiti novi privatni ključ.
  6. Provjerite da se novi handshake dovrši i da promet teče ispravno.
  7. Uklonite sve preostale reference na stari ključ ako još uvijek postoje.

Ovaj pristup temeljen na zamjeni odražava kako WireGuard provodi kriptografsko usmjeravanje i izbjegava nejasne ili proturječne konfiguracije.

Rotiranje ključeva na središnjem vršnjaku

Rotacija privatnog ključa središnjeg čvora utječe na sve povezane čvorove. Konfiguracija svakog čvora mora se ažurirati novim javnim ključem prije nego što se veza može ponovno uspostaviti.

Budući da ova promjena istovremeno utječe na sve čvorove, rotacija ključa središnjeg čvora trebala bi se pažljivo planirati i provoditi tijekom održavanja sustava. U praksi se ključevi središnjeg čvora rotiraju rjeđe nego ključevi čvorova.

Upravljanje unaprijed podijeljenim ključevima (opcionalno)

Osim parova javnog i privatnog ključa, WireGuard podržava opcionalni unaprijed podijeljeni ključ (PSK) za svakog sugovornika. PSK dodaje dodatni sloj simetrične enkripcije na postojeću WireGuardovu kriptografiju.

Unaprijed dijeljeni ključevi (Pre-Shared Keys) obično se koriste u okruženjima visoke sigurnosti kao obrana protiv budućih kriptografskih napredaka. Ako se šifrirani promet danas snimi, a osnovni algoritam javnog ključa u budućnosti bude kompromitiran, PSK bi i dalje spriječio dešifriranje prošlih sesija.

Ako se koriste PSK-ovi, oni se trebaju tretirati kao osjetljive tajne i povremeno mijenjati. Rotiranje PSK-a slijedi isti operativni obrazac kao i rotiranje ključeva sučelja i mora se koordinirati s obje strane veze.

Odabir frekvencije rotacije

WireGuard ne nameće fiksni raspored rotacije ključeva. Prikladni intervali rotacije ovise o okruženju.

  • Osobne ili kratkotrajne rasporede možda neće zahtijevati planiranu rotaciju.
  • Zajednička ili produkcijska okruženja obično rotiraju ključeve svakih 6 do 12 mjeseci.
  • Okruženja visoke sigurnosti mogu zahtijevati učestalije rotacije prema politici.

Redovita rotacija smanjuje rizik povezan s dugovječnim vjerodajnicama i usklađuje WireGuard implementacije s uobičajenim sigurnosnim praksama.

WireGuard vs OpenVPN: Praktične razlike

WireGuard i OpenVPN su obje široko korištene VPN tehnologije, ali pristupaju enkripciji, konfiguraciji i ponašanju mreže na vrlo različite načine. Razumijevanje tih razlika pomaže programerima odabrati rješenje koje najbolje odgovara njihovim operativnim ograničenjima.

Konfiguracija i operativni model

WireGuard koristi statički model konfiguracije temeljen na parovima javnog i privatnog ključa. Svi čvorovi su izričito definirani, a ponašanje usmjeravanja kontrolira se putem fiksnih konfiguracijskih vrijednosti. Ne postoji kontrolni kanal, certifikacijsko tijelo niti dinamičko pregovaranje parametara.

OpenVPN se oslanja na TLS i X.509 certifikate. Koristi kontrolni kanal za autentifikaciju klijenata, pregovaranje o postavkama enkripcije i upravljanje sesijama. Ovaj model pruža fleksibilnost, ali povećava složenost konfiguracije i rada.

U praksi, WireGuard konfiguracije su kraće, lakše za provjeru i manje sklone suptilnim pogreškama u konfiguraciji. OpenVPN konfiguracije nude veću kontrolu, ali zahtijevaju pažljivo upravljanje kako bi ostale sigurne i dosljedne.

Kriptografija i dizajn sigurnosti

WireGuard koristi fiksni skup modernih kriptografskih metoda. Ove opcije nisu konfigurabilne. Ovaj dizajn eliminira napade smanjenja razine kriptografije i uklanja potrebu za odabirom kripto algoritama.

OpenVPN podržava širok raspon enkripcijskih algoritama i metoda autentifikacije. Iako ta fleksibilnost omogućuje kompatibilnost sa starijim sustavima, također povećava rizik od slabih ili nedosljednih konfiguracija.

Oba rješenja podržavaju savršenu tajnost unaprijed (Perfect Forward Secrecy). WireGuard automatski vrši rotaciju ključeva putem svog mehanizma rukovanja vezom, dok se OpenVPN oslanja na ponašanje TLS sesije.

Karakteristike performansi

WireGuard je dizajniran za visoke performanse i nisku latenciju. Radi u Linux kernelu i ima malu bazu koda, što smanjuje opterećenje i prebacivanje konteksta. U većini okruženja, WireGuard pruža veću propusnost i konzistentniju latenciju uz minimalno podešavanje.

Povijesno gledano, OpenVPN radi u korisničkom prostoru i ima dodatni trošak zbog prebacivanja konteksta i obrade protokola. Modernije verzije OpenVPN-a podržavaju Kernel Data Channel Offload (DCO), što značajno poboljšava performanse, ali ova značajka nije uvijek omogućena ili dostupna u zadanim instalacijama.

Čak i s DCO-om, WireGuard obično postiže visoke performanse s manje konfiguracijskih varijabli.

Roaming mreže i prolazak kroz vatrozid

WireGuard elegantno upravlja promjenama u mreži. Ako se IP adresa sučelnika promijeni, na primjer pri prelasku s WiFi-ja na mobilne mreže, tunel nastavlja raditi bez ponovnog pregovaranja.

Međutim, WireGuard radi isključivo preko UDP-a. Iako je UDP učinkovit, ponekad ga blokiraju restriktivne javne WiFi mreže, korporativni vatrozidi ili institucionalne mreže. WireGuard nema vlastitu rezervnu opciju kada je UDP promet blokiran.

OpenVPN podržava i UDP i TCP. Kada UDP nije dostupan, OpenVPN se može konfigurirati da radi preko TCP porta 443, što čini da VPN promet izgleda slično standardnom HTTPS prometu. Ova sposobnost čini OpenVPN pouzdanijim u okruženjima sa strogim pravilima vatrozida ili cenzure.

Za korisnike koji rade iza restriktivnih mreža, podrška za TCP često je presudan faktor pri odabiru OpenVPN-a umjesto WireGuarda.

Opseg značajki i proširivost

OpenVPN uključuje značajke koje WireGuard namjerno ne pruža. To uključuje autentifikaciju temeljenu na korisniku, dinamičku dodjelu adresa i integraciju s vanjskim sustavima identiteta.

WireGuard se fokusira isključivo na sigurnu tunelizaciju. Radni procesi autentifikacije, kontrola pristupa i dinamička konfiguracija moraju se rješavati izvan protokola.

To čini OpenVPN boljim izborom za okruženja koja zahtijevaju složenu autentifikaciju ili centralizirano upravljanje korisnicima, dok je WireGuard bolje prilagođen VPN-ovima na razini infrastrukture i pristupu temeljenom na vršnjacima.

Sažeti pregled

AspektWireGuardOpenVPN
Transportni protokolSamo UDPUDP i TCP
Stil konfiguracijeStatično, temeljeno na ključuDinamično, temeljeno na certifikatu
Veličina baze kodaMaliVelik
Opcije šifriranjaPopravljenoKonfigurabilno
IzvedbaVisokoUmjereno do visoko
Podrška za roamingUgrađenoOgraničeno
Otpornost vatrozidaOgraničeno na restriktivne mrežeSnažno putem TCP 443
SloženostNizakVisoko

Izbor između WireGuarda i OpenVPN-a

WireGuard je dobro prilagođen za infrastrukturne VPN-ove, tuneliranje s lokacije na lokaciju, mobilne klijente i okruženja u kojima su jednostavnost, performanse i predvidljivost prioriteti.

OpenVPN i dalje ostaje snažan izbor za poslovna okruženja koja zahtijevaju tuneliranje temeljeno na TCP-u, naprednu autentifikaciju ili pouzdan rad iza restriktivnih vatrozida.

U mnogim modernim implementacijama, WireGuard zamjenjuje OpenVPN ne zato što nudi više značajki, već zato što nudi manje značajki s jasnijim ponašanjem.

Podešavanje i optimizacija performansi

WireGuard dobro radi sa svojim zadanim postavkama, ali uvjeti stvarne mreže mogu utjecati na pouzdanost i propusnost. Čimbenici poput veličine paketa, opsega usmjeravanja, ponašanja NAT-a i razlučivanja DNS-a svi utječu na način na koji tunel funkcionira tijekom kontinuirane ili povremene upotrebe.

Pogledajmo najčešća područja podešavanja i kada su prilagodbe prikladne.

Odabir MTU-a i fragmentacija paketa

Maksimalna jedinica prijenosa (MTU) definira najveću veličinu paketa koja se može prenijeti bez fragmentacije. WireGuard šifrira i enkapsulira pakete, što smanjuje efektivni MTU u usporedbi s fizičkim mrežnim sučeljem.

Po defaultu, WireGuard koristi MTU od 1420. Ova vrijednost uračunava ukupni overhead IPv6 zaglavlja, UDP-a i WireGuard enkapsulacije te dobro funkcionira za većinu mreža baziranih na Ethernetu. Neka okruženja zahtijevaju manji MTU. To je često na mobilnim mrežama, PPPoE vezama i cloud platformama s dodatnim enkapsulacijskim slojevima. Kada je MTU prevelik, paketi se mogu odbaciti ili fragmentirati. To često rezultira vezama koje rade za male zahtjeve, ali zapinju ili ne uspijevaju pri većim prijenosima. Ako se pojave ovi simptomi, preporučuje se postepeno smanjivanje MTU-a. Vrijednosti poput 1360, ili u više ograničenim okruženjima 1280, što je minimalni MTU za IPv6, često riješe te probleme uz minimalan utjecaj na propusnost.

MTU bi trebao biti eksplicitno postavljen u odjeljku [Interface] datoteke konfiguracije kako bi se osiguralo dosljedno ponašanje pri ponovnim pokretanjima.

Opseg i utjecaj AllowedIPs

Direktiva AllowedIPs utječe i na ponašanje usmjeravanja i na performanse. Široki rasponi adresa uzrokuju da veći promet prolazi kroz tunel, što povećava opterećenje enkripcijom i na server. Upotreba uskih vrijednosti AllowedIPs ograničava tunel samo na promet koji zahtijeva zaštitu. To smanjuje upotrebu CPU-a i izbjegava nepotrebnu enkapsulaciju.

Kada je konfigurirano 0.0.0.0/0 ili ::/0, sav promet se preusmjerava putem VPN-a. Ova konfiguracija je prikladna kada su privatnost, centralizirana kontrola izlaznog prometa ili nepouzdane mreže u pitanju, ali povećava kašnjenje i korištenje resursa za opći internetski promet.

Optimizacija performansi često uključuje sužavanje AllowedIPs gdje je to moguće i izbjegavanje usmjeravanja cijelog tunela osim ako nije potrebno.

NAT proboj i stabilnost veze (PersistentKeepalive)

WireGuard je namjerno tih kada se ne prenose podaci. Po zadanim postavkama ne šalje periodične keepalive pakete. U okruženjima koja koriste NAT, poput kućnih rutera, mobilnih mreža ili mnogih cloud mreža, ta tišina može uzrokovati da NAT uređaj zatvori mapiranje veze. Kada se to dogodi, dolazni promet s poslužitelja je blokiran dok peer ponovno ne pošalje promet. Ovo ponašanje se često percipira kao kašnjenje, odgođene veze ili povremeni prekidi.

Kako bi se to spriječilo, WireGuard pruža postavku PersistentKeepalive. Ova opcija može se dodati u [Peer] sekciju konfiguracije partnera. Ona uzrokuje da partner šalje mali keepalive paket u fiksnom intervalu kako bi NAT mapiranje ostalo otvoreno. Vrijednost 25 sekundi se najčešće koristi i dobro funkcionira s većinom NAT uređaja. Ako veza u početku radi, ali zakaže nakon što ostane neaktivna, omogućavanje PersistentKeepalive=25 je primarno i preporučeno rješenje.

Rješavanje DNS-a i ponašanje tunela

DNS konfiguracija ima značajan utjecaj na percipirane performanse VPN-a. Kada DNS razlučivači nisu ispravno usmjereni kroz tunel, aplikacije mogu izgledati sporo ili nepouzdano čak i kada sam tunel ispravno funkcionira.

U konfiguracijama pristupnika, DNS upiti trebaju se slati putem VPN-a kako bi se osigurala konzistentna usmjeravanja i spriječili curenja. To zahtijeva eksplicitno definiranje DNS rezolvera u konfiguraciji peer-a. Kada je DNS pogrešno konfiguriran, uobičajeni simptomi uključuju sporo učitavanje stranica, nekonzistentnu povezivost ili usmjeravanje prometa izvan VPN-a unatoč aktivnom tunelu.

Odabir razlučitelja koji su dostupni kroz tunel i brzo odgovaraju poboljšava i pouzdanost i korisničko iskustvo.

Razlike u performansama IPv4 i IPv6

U okruženjima s dvostrukim slojem, IPv4 i IPv6 mogu se ponašati različito. IPv6 putovi mogu imati različita ograničenja MTU-a, politike usmjeravanja ili ponašanje vatrozida.

Testiranje oba protokola neovisno pomaže u identificiranju problema specifičnih za protokol. Alati poput ping, tracepath i ip route get korisni su za provjeru usmjeravanja i ponašanja MTU-a za svaku adresnu obitelj.

Ako performanse IPv6 izgledaju nekonzistentno, provjerite je li promet ICMPv6 dopušten. ICMPv6 je potreban za otkrivanje MTU-a puta (Path MTU Discovery), a njegovo blokiranje može uzrokovati zastoje u vezi kod većih paketa.

CPU i opterećenje enkripcijom

WireGuard koristi modernu kriptografiju koja je učinkovita na većini sustava. Međutim, enkripcija i dalje troši resurse procesora.

Na malim virtualnim strojevima, ugrađenim usmjerivačima ili sustavima bez hardverskog ubrzanja, konfiguracije s punim tunelom mogu zasićivati CPU pri stalnom opterećenju.

Praćenje korištenja CPU-a tijekom intenzivnog prometa pomaže utvrditi jesu li problemi s izvedbom uzrokovani opterećenjem enkripcije, a ne konfiguracijom mreže. U takvim slučajevima možda će biti potrebno smanjiti tunelirani promet ili nadograditi poslužitelj.

Provjera promjena u izvedbi

Poboljšanje performansi trebalo bi se provoditi postupno. Nakon svake promjene treba provjeriti povezivost i stabilnost prije primjene dodatnih prilagodbi.

Korisni koraci provjere uključuju provjeru stabilnosti rukovanja s wg, mjerenje latencije i propusnosti prije i nakon promjena, te potvrdu ponašanja usmjeravanja s ip route i ip -6 route. Ovaj pristup smanjuje rizik i olakšava otklanjanje problema.

Često postavljana pitanja

1. Što je WireGuard i kako radi na Ubuntuu?

WireGuard je moderna VPN tehnologija dizajnirana da bude mnogo brža i lakša za postavljanje od starijih opcija poput OpenVPN-a ili IPseca. Možete je zamisliti kao sigurni tunel koji izravno povezuje vaše uređaje. Za razliku od starijih VPN-ova koji su teški i složeni, WireGuard je izuzetno lagan. Na Ubuntuu radi tako da se izvršava izravno unutar Linux kernela; jezgre operativnog sustava. Budući da radi duboko u sustavu, a ne kao zasebna aplikacija na vrhu, koristi vrlo malo baterije i nevjerojatno brzo obrađuje podatke.

Za uspostavljanje veze, WireGuard koristi metodu vrlo sličnu SSH-u. Generira par „ključeva“ za svaki uređaj: privatni ključ (koji ostaje tajan na uređaju) i javni ključ (koji dijelite s drugim uređajima s kojima želite uspostaviti vezu). Veza se uspostavlja samo ako se ključevi savršeno podudaraju, što čini povezivanje brzo i sigurno.

2. Je li WireGuard sigurniji od OpenVPN-a?

Za većinu korisnika, WireGuard se smatra sigurnijim zbog svoje jednostavnosti i modernog dizajna. Glavni razlog tome je veličina njegovog koda. WireGuard je izgrađen s oko 4.000 linija koda, dok OpenVPN ima više od 100.000. Ova velika razlika znači da je puno lakše za stručnjake za sigurnost čitati WireGuard kod i pronaći ranjivosti (pogreške) prije nego što to učine zlonamjerni akteri.

WireGuard vas također prisiljava da koristite najnovije i najsnažnije standarde enkripcije dostupne danas. Stariji VPN-ovi omogućuju kripto-agilnost, što znači da se mogu spustiti na slabije metode enkripcije kako bi podržali stare uređaje. WireGuard uklanja ovu mogućnost, sprječavajući napadače da prevarom natjeraju vaš VPN da koristi slabiju zaštitu. Osim toga, WireGuard je po defaultu nevidljiv; ako neovlašteni uređaj pošalje paket vašem poslužitelju, WireGuard jednostavno neće odgovoriti. To čini vaš poslužitelj nevidljivim za hakere koji skeniraju otvorene portove.

3. Mogu li postaviti WireGuard na Ubuntu bez Dockera?

Da, možete ga jednostavno postaviti izravno na sustavu bez korištenja Docker kontejnera. Zapravo, pokretanje izravno često je preferirana metoda na Ubuntuu jer je softver uključen u standardne Ubuntu softverske repozitorije. Općenito, potrebno je samo izvršiti standardne instalacijske naredbe u nastavku, koje će povući potrebni softver izravno iz službenog izvora Ubuntua.

sudo apt update
sudo apt install wireguard

4. Kako dodati više WireGuard klijenata (peerova)?

WireGuard koristi koncept ravnopravnih uređaja, što znači da se svaki uređaj s kojim se spojite tretira kao „peer“. Za dodavanje više uređaja, poput prijenosnog računala, pametnog telefona i tableta, jednostavno uredite konfiguracijsku datoteku poslužitelja (obično se nalazi na /etc/wireguard/wg0.conf).

Za svaki novi uređaj dodajete novi blok teksta označen [Peer]. Unutar tog bloka morate zalijepiti Javni ključ tog specifičnog uređaja i dodijeliti mu jedinstvenu internu IP adresu (poput 10.0.0.2 za prvi uređaj, 10.0.0.3 za drugi i tako dalje). Ključno je da se ove interne IP adrese ne preklapaju.

Evo jednostavnog primjera konfiguracijskog bloka:

[Interface]
# Server settings...
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <Server_Private_Key>

[Peer]
# Client 1 (Laptop)
PublicKey = <Laptop_Public_Key>
AllowedIPs = 10.0.0.2/32

[Peer]
# Client 2 (Phone)
PublicKey = <Phone_Public_Key>
AllowedIPs = 10.0.0.3/32

5. Koje portove koristi WireGuard?

WireGuard prema zadanim postavkama koristi UDP port 51820. Strogo se oslanja na UDP protokol jer je brži za tuneliranje podataka od TCP-a. TCP zahtijeva potvrdu za svaki poslani paket podataka, što može značajno usporiti VPN vezu. UDP samo šalje podatke bez čekanja potvrde, što je savršeno za visoku brzinu WireGuarda. Prilikom postavljanja svog Ubuntu vatrozida (UFW), morate posebno dopustiti promet na ovom UDP portu, inače će zahtjevi za vezu biti blokirani prije nego što dođu do VPN softvera.

6. Kako otkloniti probleme s povezivanjem WireGuard-a?

Rješavanje problema s WireGuard obično je jednostavno jer je dijelova koji se mogu pokvariti manje. Ako se ne možete povezati, trebali biste slijediti ovaj točan redoslijed provjera:

Prvo provjerite status rukovanja pokretanjem sudo wg show na svom poslužitelju. Ako je veza ispravna, vidjet ćete red koji kaže latest handshake nakon kojeg slijedi vrijeme (npr. „prije 1 minute“). Ako taj red nedostaje, uređaji uopće ne komuniciraju jedan s drugim. To je gotovo uvijek uzrokovano vatrozidom koji blokira UDP port ili neusklađenošću javnih/privatnih ključeva.

Drugo, ako je uspostava veze uspješna, ali ne možete pregledavati internet, problem je vjerojatno u prosljeđivanju IP-a. Trebate osigurati da vaš Ubuntu server smije usmjeravati promet s VPN-a na internet. To možete provjeriti pregledom datoteke /etc/sysctl.conf i osigurati da je linija net.ipv4.ip_forward=1 aktivna (nije zakomentirana).

7. Podržava li WireGuard IPv6 na Ubuntuu?

Da, WireGuard ima izvrsnu podršku za IPv6. Vrlo je fleksibilan i može enkapsulirati (umotati) različite vrste prometa. Na primjer, možete pristupiti web stranici koja podržava samo IPv4 putem IPv6 veze, ili obrnuto. Da biste to omogućili, jednostavno trebate u svoju konfiguracijsku datoteku uključiti IPv6 adrese odvojene zarezom, zajedno s vašim uobičajenim IPv4 adresama. Te adrese dodajete i u Address polje (za vlastitu IP adresu poslužitelja) i u AllowedIPs polje (za IP adrese klijenata).

8. Kako omogućiti da se WireGuard pokrene pri pokretanju sustava?

Kako biste osigurali da se vaš VPN automatski uključi svaki put kada ponovno pokrenete svoj Ubuntu server, trebate koristiti systemd, koji je sustavski upravitelj za Linux. Pomoću naredbe enable kažete sustavu da potraži vašu specifičnu konfiguracijsku datoteku (npr. wg0) i učita je tijekom sekvence pokretanja. To osigurava da će, ako se vaš server ponovno pokrene zbog ažuriranja, vaša VPN veza ponovno biti aktivna bez potrebe da je ručno pokrećete.

sudo systemctl enable wg-quick@wg0

Zaključak

U ovom vodiču postavili ste WireGuard VPN na Ubuntu poslužitelju i povezali peer koristeći IPv4 i IPv6. Usput ste konfigurirali ključeve, dodijelili adrese tunela i omogućili poslužitelju sigurno usmjeravanje prometa, čime ste dobili funkcionalan VPN koji je jednostavan za razumijevanje i korištenje.

Vodič je također obuhvatio nekoliko praktičnih detalja koji su važni kada se VPN redovito koristi, kao što su upravljanje ključevima tijekom vremena, rukovanje IPv6 i dual-stack mrežama te poboljšanje pouzdanosti i performansi podešavanjem MTU-a, keep-alive postavkama i DNS postavkama. S ovim elementima na mjestu, trebali biste biti dobro pripremljeni za korištenje WireGuarda u stvarnim okruženjima ili za prilagodbu kako se vaši zahtjevi mijenjaju.

Ako želite saznati više o WireGuardu, uključujući kako konfigurirati naprednije tunele ili koristiti WireGuard s kontejnerima, posjetite službenu WireGuard dokumentaciju. Za više vodiča vezanih uz osiguravanje vaših Ubuntu sustava, pogledajte sljedeće članke:

  • Kako postaviti vatrozid s UFW-om na Ubuntuu
  • UFW Osnove: Uobičajena pravila vatrozida i naredbe za sigurnost Linuxa
  • VPC vs VPN: Koja opcija odgovara vašim potrebama za sigurnom mrežom?
  • Kako postaviti i konfigurirati OpenVPN poslužitelj na Ubuntuu

Hvala što učite s Linux-Console.net zajednicom.