====== Wireguard protokol ====== ===== Sažetak ===== U ovom seminaru proučava se Wireguard protokol. Uspoređuje ga se s IPSec-om i OpenVPN-om te se navode prednosti i nedostaci u odnosu na ta dva popularna VPN protokola. Analiziraju se performanse i sigurnost kao i način na koji radi Wireguard protokol. Kao praktični dio, radi se uspostava Wireguard VPN mreže između udaljenog poslužitelja (VPS) i klijenta (osobno računalo) te se opisuju svi potrebni koraci za ostvarenje takve mreže. Keywords: **VPN**; **Wireguard** ===== Uvod u VPN ===== VPN (engl. //Virtual private network//) proširuje privatnu mrežu preko javne mreže i omogućuje korisnicima slanje ili primanje podataka preko dijeljene ili javne mreže kao da su spojeni direktno na privatnu mrežu. VPN tehnologija je razvijena kako bi se udaljenim radnicima ili uredima omogućio pristup poslovnim aplikacijama i resursima. Kako bi se osigurala sigurnost privatna mreža uspostavljena je koristeći enkriptirani mrežni tunel i VPN korisnici koriste metode autentifikacije kao što su lozinke ili certifikati kako bi dobili pristup virtualnoj privatnoj mreži. U nekim drugim okolnostima obični korisnici interneta mogu koristiti VPN kako pristupili sadržaju koji je ograničen na neku geografsku lokaciju ili koji je cenzuriran u njihovoj državi ili da se spoje na //proxy// poslužitelj radi zaštite osobnog identiteta i lokacije te da ostanu anonimni na internetu. Način na koji VPN funkcionira grafički je prikazan na slici ispod. {{:racfor_wiki:android:3a5c726ec6de88022ced3c6d2e7fd936.png}} ===== Postojeći VPN protokoli ===== Trenutno postoji nekoliko različitih mrežnih protokola koji se koriste za ostvarivanje VPN-a. Najrašireniji su OpenVPN i IPSec. ==== OpenVPN ==== OpenVPN je najpopularniji VPN protokol danas. Zbog velikog broja korisnika i otvorenosti koda, a i zbog toga jer je prošao razne nezavisne sigurnosne provjere mnogi ga smatraju i najsigurnijim VPN protokolom. Ovaj protokol nema nativnu podršku od operacijskih sustava pa je potrebno koristiti posebne aplikacije (OpenVPN klijente) za spajanje na mrežu. Davatelji VPN usluga većinom imaju svoje aplikacije koje se jednostavno instaliraju i koriste na svim popularnim operacijskim sustavima. Sigurnost i performanse: * koristi OpenSSL biblioteku (podržava razne algoritme i šifrate kao što su: AES, Blowfish, Camellia, ChaCha20) i TLS protokol za enkripciju. * može koristiti TCP ili UDP s time da je brzina veća ako se koristi UDP, a pouzdanost veća ako se koristi TCP zbog načina na koji ti protokoli funkcioniraju. * može se koristiti na bilo kojem TCP ili UDP portu. ==== IPSec (Internet Protocol Security) ==== IPSec je sigurni mrežni protokol koji autentificira i enkriptira pakete poslane preko mreže. IPSec radi u potpunosti na mrežnom sloju za razliku od OpenVPN-a koji za enkripciju koristi TLS koji radi na sloju iznad transportnog. Osim toga, IPSec je podržan nativno na većini operacijskih sustava i može se koristiti bez dodatnih VPN klijent aplikacija što je još jedna prednost u odnosu na OpenVPN. IPSec enkriptira cijeli IP paket koristeći: * AH (engl. //Authentication Header//) koji osigurava **autentičnost** izvora podataka i **integritet** niza IP datagrama te onemogućuje napade izvedene ponovljenim slanjem snimljenog prometa. * ESP (engl. //Encapsulating Security Protocol//) koji prvenstveno osigurava **povjerljivost** komunikacije (povjerljivost ovisi o izboru algoritma šifriranja) Kada se koristi za ostvarivanje VPN-a IPSec se uparuje s protokolima za tuneliranje (IKEv2 i L2TP). Važno je napomenuti da je IPSec protokol navodno kompromitiran od stane NSA (engl. //National Security Agency//) što dovodi u pitanje njegovu sigurnost. Više o tome se može pročitati na poveznici: [[https://en.wikipedia.org/wiki/IPsec#Alleged_NSA_interference|https://en.wikipedia.org/wiki/IPsec#Alleged_NSA_interference]] === IPSec / IKEv2 === IKEv2 (engl. //Internet Key Exchange//) su razvili //Cisco //i //Microsoft// i zatvorenog je koda (iako postoje neke verzije otvorenog koda). Nativno ga podržavaju Windows, MacOS i iOS. Najpopularniji je na mobilnim uređajima jer je nativno podržan na iOS-u i efikasniji je od OpenVPN-a po pitanju iskorištavanja CPU-a što dovodi do duljeg trajanja baterije, a ima i mogućnost ponovnog uspostavljanja konekcije. Sigurnost i performanse: * podržava različite kriptografske algoritme za enkripciju, a neki od njih su AES, Blowfish, Camellia i 3DES. * smatra se da ima bolje performanse od OpenVPN-a zbog bolje iskorištavanja CPU-a * koristi UDP port 500 za početnu razmjenu ključeva i UDP port 4500 za prolazak kroz NAT (engl. //Network Address Translation//) pa ga je lakše blokirati od primjerice OpenVPN-a koji ne koristi fiksne port-ove. === IPSec / L2TP === L2TP (engl. //Layer 2 Tunneling Protocol//) su također razvili //Cisco //i //Microsoft //i nativno je podržan na Windows-u i MacOS-u. Sigurnost i performanse: * za enkripciju koristi AES ili 3DES * enkapsulira podatke dva puta, ali enkripcija i dekripcija se odvija u kernel-u pa je i dalje relativno brz * podržava višedretvenost * koristi UDP port 500 za početnu razmjenu ključeva, UDP port 1701 za početnu L2TP konfiguraciju i UDP port 4500 za prolazak kroz NAT. Zbog korištenja fiksnih port-ova lakše ga je blokirati od protokola koji ne koriste fiksne port-ove. ===== Wireguard ===== Wireguard je sigurni mrežni tunel koji radi na mrežnom sloju. Implementiran je kao virtualno mrežno sučelje u Linux-u.Trenutno je u fazi razvoja, ali već se može koristiti, a plan je da bude prihvaćen u //mainline// Linux početkom 2020. godine. Wireguard koristi UDP protokol i može koristiti bilo koji port, a razmjena ključeva najsličnija je razmjeni ključeva koju koristi SSH (ovo je detaljno opisano kasnije). Wireguard koristi [[https://en.wikipedia.org/wiki/Curve25519|Curve25519]] za razmjenu ključeva, [[https://en.wikipedia.org/wiki/ChaCha20|ChaCha20]] za enkripciju podataka i [[https://en.wikipedia.org/wiki/Poly1305|Poly1305]] za autentifikaciju podataka, [[https://en.wikipedia.org/wiki/SipHash|SipHash]] za ključeve u //hash// tablici i [[https://en.wikipedia.org/wiki/BLAKE2s|BLAKE2s]] za //hashiranje//. Neki od ciljeva ovog protokola su: * biti brži i jednostavniji za konfiguriranje od IPSec-a i OpenVPN-a. * biti jednostavan za održavanje i recenziranje (trenutna implementacija ima oko 4000 linija koda) * biti VPN koji se može koristiti na svim platformama (trenutno su podržane: GNU/Linux, Android, macOS, iOS, BSD, Windows) ==== Wireguard mrežno sučelje ==== Wireguard radi tako da se doda kao mrežno sučelje (isto kao i mrežno sučelje za LAN (//eth0//) ili WLAN (//wlan0//)) naziva //wg*// pri čemu //*// označava broj. Nakon toga mrežno sučelje se može konfigurirati standardnim alatima kao što su ''ifconfig'' ili ''ip-address'', a rute se mijenjaju koristeći ''route'' ili ''ip-route alate''. Oni dijelovi sučelja koji su specifični za Wireguard se konfiguriraju koristeći ''wg'' alat. Wireguard povezuje IP adrese tunela s javnim ključevima i udaljenim krajnjim točkama. Kada sučelje šalje paket svom //peer//-u događa se sljedeće: - Ovaj paket je namijenjen za 192.168.30.8, to je //peer //''ABCDEFGH'' (ako //peer// nije konfiguriran onda se paket odbacuje) - Enkriptira se cijeli IP paket koristeći javni ključ od //peer//-a ''ABCDEFGH'' - Koja je udaljena krajnja točka //peer//-a ''ABCDEFGH''? To je UDP port 53133 na poslužitelju 216.58.211.110 - Šalju se enkriptirani bajtovi iz koraka 2 preko interneta na 216.58.211.110:53133 koristeći UDP. Kada sučelje primi paket onda se radi sljedeće: - Došao je paket s UDP port-a 7361 na poslužitelju 98.139.183.24, treba ga dekriptirati. - Dekriptirani paket autentificira //peer//-a ''LMNOPQRS'', zapamti da je njegova posljednja krajnja točka: 98.139.183.24:7361 i koristi UDP. - Jednom kada je dekriptiran, vidimo da je //plain-text// paket došao s 192.168.43.89. Smije li //peer//''LMNOPQRS'' slati podatke prema nama kao 192.168.43.89? - Ako smije, prihvaća se paket na sučelju, ako ne paket se odbacuje. ==== Upravljanje ključevima i IP adresama ==== U WIreguard-u se koristi koncept naziva //Cryptokey Routing// koji radi na način da povezuje javne ključeve s listom IP adresa koje su dozvoljene unutar tunela. Svako mrežno sučelje ima privatni ključ i listu //peer//-ova. Svaki //peer// ima javni ključ. Javni ključevi su kratki i jednostavni i njih koriste //peer//-ovi kako bi se međusobno autentificirali. Mogu se prenositi preko konfiguracijskih datoteka bilo kojom metodom slično kako se prenose i SSH javni ključevi. Primjerice, poslužitelj može imati ovakvu konfiguraciju: [Interface] PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk= ListenPort = 51820 [Peer] PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg= AllowedIPs = 10.192.122.3/32, 10.192.124.1/24 [Peer] PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0= AllowedIPs = 10.192.122.4/32, 192.168.0.0/16 [Peer] PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA= AllowedIPs = 10.10.10.230/32 Klijent može imati ovakvu konfiguraciju: [Interface] PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE= ListenPort = 21841 [Peer] PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw= Endpoint = 192.95.5.69:51820 AllowedIPs = 0.0.0.0/0 U konfiguraciji poslužitelja svaki //peer// (klijent) će moći slati pakete onom mrežnom sučelju čija se izvorišna IP adresa nalazi u listi dozvoljenih IP adresa. Na primjer, kada poslužitelj dobije paket od //peer//-a ''gN65BkIK…'', nakon dekripcije i autentifikacije, ako je izvorišna IP adresa paketa 10.10.10.230 on se prihvaća, a inače se odbacuje. Nadalje, u konfiguraciji poslužitelja, ako mrežno sučelje želi poslati paket //peer//-u (klijentu) ono gleda odredišnu IP adresu i uspoređuje ju s listom dozvoljenih IP adresa svakog //peer//-a da vidi kojem //peer//-u ga treba poslati. Primjerice, ako mrežno sučelje želi poslati paket s odredišnom IP adresom 10.10.10.230, ono taj paket enkriptira koristeći javni ključ od //peer//-a ''gN65BkIK…'' te ga šalje prema zadnjoj korištenoj krajnjoj točki tog //peer//-a. U klijentskoj konfiguraciji njegov jedini //peer// (poslužitelj) može slati pakete mrežnom sučelju s bilo koje izvorišne IP adrese jer se sve prihvaćaju (u pravilima stoji 0.0.0.0/0 što znači da se prihvaćaju sve IP adrese). Primjerice, kada se primi paket od //peer//-a ''HIgo9xNz…'', ako se točno dekriptira i autentificira s bilo koje izvorišne IP adrese, onda se prihvaća, a inače se odbacuje. Ako mrežno sučelje klijenta želi poslati paket svom jedinom //peer//-u (poslužitelju), ono će enkriptirati pakete za svog jedinog //peer//-a s bilo kojom odredišnom IP adresom (0.0.0.0/0). Na primjer, ako mrežno sučelje treba poslati paket s bilo kojom odredišnom IP adresom, ono će ga enkriptirati koristeći javni ključ od svog //peer//-a ''HIgo9xNz…'' i zatim ga poslati prema zadnjoj korištenoj krajnjoj točki tog //peer//-a. Drugim riječima, kada se paketi šalju lista dozvoljenih IP adresa služi kao //routing// tablica, a kada se paketi primaju lista dozvoljenih IP adresa se koristi za kontrolu pristupa. Može se koristiti bilo koja kombinacija IPv4 i IPv6 adresa za bilo koje od polja u konfiguraciji. Wireguard može i enkapsulirati jednu adresu unutar druge ako je to potrebno. Budući da su svi paketi poslani kroz Wireguard mrežno sučelje enkriptirani i autentificirani te zbog bliske povezanosti između identiteta //peer//-a i dozvoljenih IP adresa //peer//-a, administratori ne moraju pisati komplicirane konfiguracije //firewall//-a, kao što je recimo slučaj kod IPSec-a. Jednostavno se može napraviti provjera s koje je IP adrese paket došao i s kojeg mrežnog sučelja jer Wireguard garantira da je paket siguran i autentificiran. ==== Performanse ==== Kada govorimo o performansama Wireguard-a najzanimljivija nam je usporedba s popularnijim VPN protokolima (IPSec-om i OpenVPN-om). U Wireguard-ovoj bijeloj knjizi (engl. //white paper//) navedena ja takva usporedba performansi. Podaci su dobiveni korištenjem programa iperf3 između računala s procesorom Intel Core i7-3820QM i mrežnom karticom Intel 82579LM te računala s procesorom i7-5200U i mrežnom karticom Intel I218LM. Izračunat je prosjek u periodu od 30 minuta, a rezultati su prikazani na slici ispod: {{:racfor_wiki:android:e717b1e4cb102720023c92a2a871178b.png}} Još je važno napomenuti da je CPU bio na 100% iskorištenja tijekom //throughput// testova OpenVPN-a i IPSec-a, a nije bio na 100% iskorištenja tijekom testa Wireguard-a što upućuje na to da je Wireguard uspio u potpunosti zasititi gigabitnu Ethernet vezu. ==== Sigurnost ==== S obzirom da se Wireguard protokol još uvijek naglo razvija i ima mali broj korisnika nije prošao niti približan broj revizija i sigurnosnih provjera kao primjerice OpenVPN koji je dokazano siguran protokol. Na Wireguard-ovoj web stranici stoji upozorenje svim korisnicima da je ovaj projekt još uvijek u razvoju i da nema stabilnu verziju ([[https://www.wireguard.com/#work-in-progress|https://www.wireguard.com/#work-in-progress]]). Osim što je protokol trenutno "nedovršen" nema nekih većih zabrinutosti oko **sigurnosti**, ali način na koji Wireguard funkcionira nije pogodan za zaštitu **privatnosti**. === Problemi sa zaštitom privatnosti === - Javna IP adresa //peer//-a je stalno u memoriji * U Wireguard-u ne postoji pojam konekcije, //peer//-ovi mogu prestati s razmjenom podataka bilo kad i nastaviti bilo kad u budućnosti. * Drugi VPN protokoli prate kada je //peer// aktivan i u slučaju da je neaktivan brišu njegove podatke iz memorije. - Wireguard ne pruža mehanizam alokacije IP adresa u tunelu * Kako bi VPN mogao funkcionirati svaki tunel zahtjeva da se interna IP adresa tunela dodijeli na oba kraja. Protokoli kao što su OpenVPN i IPSec koriste DHCP za dinamičko dodjeljivanje IP adrese tunela tijekom spajanja //peer//-a. * Wireguard ne može koristiti DHCP jer ne zna što je konekcija pa se koristi ili statička adresa ili se mora osmisliti neki mehanizam za dinamičko generiranje IP adrese tunela uz raspodjelu javnih ključeva prije uspostavljanja konekcije. - Bez dinamičke alokacije IP adresa korisnici se mogu lakše pratiti u određenim okolnostima * Privatna adresa tunela ne može se otkriti na javnom internetu jer je enkriptirana, ali programi koji su trenutno pokrenuti na računalu mogu vidjeti IP adresu tunela i internu adresu koja je s njom povezana. - Wireguard ne nudi //"identity-hiding forward secrecy"// * Ako napadač snimi sav promet prema poslužitelju i od poslužitelja te zatim provali u poslužitelj i sazna Wireguard-ov privatni ključ moći će povezati snimljeni promet sa specifičnim korisnicima. ===== Postavljanje Wireguard-a na udaljenom poslužitelju ===== Kao što je prethodno napisano, jedan od glavnih ciljeva Wireguard protokola je da bude jednostavan za korištenje, a to se može najbolje vidjeti u ovom poglavlju gdje je opisano stvaranje stvaranje vlastitog VPN-a korištenjem Wireguard-a. Arhitektura sustava opisana je sljedećom slikom: {{:racfor_wiki:android:4f3f192a7bf8fe888740211e683d14b1.png}} Što je potrebno? * VPS (engl. //Virtual Private Server//) s GNU/Linux operacijskim sustavom i instaliranim Wireguard-om * osobno računalo s GNU/Linux operacijskim sustavom i instaliranim Wireguard-om ==== Postavke na VPS-u ==== === Instalacija Wireguard-a === Najprije je potrebno instalirati Wireguard s obzirom da još uvijek ne dolazi s kernel-om. U ovom slučaju korišten je Ubuntu 18.04 i proces instalacije je sljedeći: # add-apt-repository ppa:wireguard/wireguard # apt-get update # apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r) === Generiranje ključeva poslužitelja === # wg genkey | tee privatekey | wg pubkey> publickey === Konfiguracija poslužitelja === Potrebno je stvoriti datoteku ''/etc/wireguard/wg0.conf'' na poslužitelju sa sljedećim sadržajem: [Interface] Address = 10.200.200.1/24 SaveConfig = true PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT ListenPort = 51820 PrivateKey = [Peer] PublicKey = AllowedIPs = 10.200.200.2/24 Endpoint = : Objašnjenje konfiguracije: **Address = 10.200.200.1/24:** IP adresa i adresni prostor Wireguard-a u VPN-u. **SaveConfig = true:** spremi konfiguraciju da ostane trajna i nakon prekida veze. **ListenPort = 51820:** UDP port na kojem VPN čeka nadolazeći promet, može biti i neki drugi broj. **PrivateKey = :** ovo je sadržaj prethodno stvorene datoteke na poslužitelju ''privatekey'' **PublicKey = :** ovo je sadržaj datoteke publickey datoteke na klijentu **AllowedIPs = 10.200.200.2/24****:** IP adrese kojima je dozvoljeno slanje i primanje prometa kroz VPN **Endpoint = :: **ova postavka je ažurirana svaki put kad se //peer// spoji na poslužitelj s druge ip adrese i opcionalna je, ali meni spajanje nije radilo ako sam izostavio tu liniju. PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT **PostUp **opisuje koja se pravila izvode kada se VPN veza uspostavlja: Prvo i treće pravilo omogućuju dolazni odnosno odlazni promet na Wireguard sučelju (''%i''). Drugo pravilo omogućuje da VPN promet prođe kroz nat na mrežnom sučelju ''eth0'' što je sučelje preko kojeg je poslužitelj spojen na internet. **PostDown** opisuje koja se pravila izvode kada se VPN veza prekida. Pravila su jednaka kao i u **PostUp** samo što se ovdje brišu (zastavica -D) umjesto da se dodaju (zastavica -A). === Omogućavanje Wireguard mrežnog sučelja na poslužitelju === Najprije se postave ispravne dozvole na konfiguracijskim datotekama. # chown -v root:root /etc/wireguard/wg0.conf # chmod -v 600 /etc/wireguard/wg0.conf Nakon toga se podigne Wireguard sučelje: # systemctl enable wg-quick@wg0.service Zatim je potrebno postaviti //IP forwarding// na poslužitelju kako bi promet mogao prolaziti kroz tunel. # sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf Kako se ne bi moralo ponovno pokrenuti poslužitelja mogu se izvršiti ove dvije naredbe. # sysctl -p # echo 1> /proc/sys/net/ipv4/ip_forward === Postavljanje firewall-a na poslužitelju === Praćenje VPN konekcije: # iptables -A INPUT -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT # iptables -A FORWARD -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT Prihvati promet na UDP port-u kojeg koristi Wireguard: # iptables -A INPUT -p udp -m udp –dport 51820 -m conntrack –ctstate NEW -j ACCEPT Dozvoli rekurzivni TCP i UDP DNS promet: # iptables -A INPUT -s 10.200.200.0/24 -p tcp -m tcp –dport 53 -m conntrack –ctstate NEW -j ACCEPT # iptables -A INPUT -s 10.200.200.0/24 -p udp -m udp –dport 53 -m conntrack –ctstate NEW -j ACCEPT Dopusti prijenos podataka koji su u VPN tunelu (možda nije potrebno jer već postoji u Wireguard konfiguraciji, ali meni nije radilo bez ovoga): # iptables -A FORWARD -i wg0 -o wg0 -m conntrack –ctstate NEW -j ACCEPT Postavi nat (možda nije potrebno jer već postoji u Wireguard konfiguraciji, ali meni nije radilo bez ovoga): # iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o eth0 -j MASQUERADE Spremi pravila da ostanu i nakon ponovnog pokretanja računala: # apt-get install iptables-persistent # systemctl enable netfilter-persistent # netfilter-persistent save === DNS postavke === Dobra je praksa osigurati da DNS promet bude siguran. Korištenjem ove konfiguracije štitimo naš poslužitelj od curenja DNS podataka, lažnih //proxy// konfiguracija i raznik //Man-In-The-Middle// napada. Najprije moramo instalirati //unbound//: # apt-get install unbound unbound-host Zatim preuzmemo listu korijenskih DNS poslužitelja: # curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache Nakon toga moramo napisati konfiguraciju ''/etc/unbound/unbound.conf'' sa sljedećim sadržajem (konfiguracija je komentirana pa nije potrebno dodatno pojašnjenje pojedinih pravila): server: num-threads: 4 # Enable logs verbosity: 1 # list of Root DNS Server root-hints: "/var/lib/unbound/root.hints" # Use the root servers key for DNSSEC auto-trust-anchor-file: "/var/lib/unbound/root.key" # Respond to DNS requests on all interfaces interface: 0.0.0.0 max-udp-size: 3072 # Authorized IPs to access the DNS Server access-control: 0.0.0.0/0 refuse access-control: 127.0.0.1 allow access-control: 10.200.200.0/24 allow # not allowed to be returned for public internet names private-address: 10.200.200.0/24 # Hide DNS Server info hide-identity: yes hide-version: yes # Limit DNS Fraud and use DNSSEC harden-glue: yes harden-dnssec-stripped: yes harden-referral-path: yes # Add an unwanted reply threshold to clean the cache and avoid when possible a DNS Poisoning unwanted-reply-threshold: 10000000 # Have the validator print validation failures to the log. val-log-level: 1 # Minimum lifetime of cache entries in seconds cache-min-ttl: 1800 # Maximum lifetime of cached entries cache-max-ttl: 14400 prefetch: yes prefetch-key: yes Na kraju je samo još potrebno postaviti dozvole i pokrenuti //unbound//: # chown -R unbound:unbound /var/lib/unbound # systemctl enable unbound ==== Postavke na osobnom računalu (klijentu) ==== === Instalacija Wireguard-a === Način na koji se Wireguard instalira ovisi o distribuciji GNU/Linux-a koju koristite. === Generiranje ključeva klijenta === # wg genkey | tee privatekey | wg pubkey> publickey === Konfiguracija klijenta === Potrebno je stvoriti datoteku ''/etc/wireguard/wg0.conf'' sa sljedećim sadržajem: [Interface] Address = 10.200.200.2/24 PrivateKey = DNS = 10.200.200.1 [Peer] PublicKey = Endpoint = :51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 21 Objašnjenje konfiguracije: **Address = 10.200.200.2/24:** IP adresa i adresni prostor Wireguard klijenta u VPN-u. **PrivateKey = :** sadržaj prethodno stvorene datoteke privatekey na klijentu. **DNS = 10.200.200.1:** adresa DNS poslužitelja. **PublicKey = : **sadržaj datoteke publickey na poslužitelju. **Endpoint = :51820:** javna ip adresa servera i port na kojem sluša VPN promet. **AllowedIPs = 0.0.0.0/0:** ovo je //wildcard// kojim se dozvoljava da se na poslužitelj spoji s bilo koje IP adrese. **PersistentKeepalive = 21:** pošalji autentificirani prazni paket //peer//-u svakih 21 sekundu da se spriječe potencijalni problemi s firewall-om ili NAT-om. === Spajanje na VPN === Kako bi se spojili na VPN potrebno je aktivirati mrežno sučelje ''wg0''. To se može učiniti sljedećom naredbom: $ sudo wg-quick up wg0 Nakon izvođenja ove naredbe trebali bi biti spojeni na VPN. Status možete provjeriti ovako: $ sudo wg Dobije se ispis: interface: wg0 public key: private key: (hidden) listening port: 32801 fwmark: 0xca6c peer: endpoint: :51820 allowed ips: 0.0.0.0/0 latest handshake: 2 seconds ago transfer: 2.04 MiB received, 4.51 MiB sent persistent keepalive: every 21 seconds VPN se može ugasiti naredbom: $ sudo wg-quick down wg0 Za provjeru je li VPN upaljen može se koristiti alate //traceroute// koji ispisuje put kojim zahtjev putuje koji mora biti drugačiji s VPN-om i bez njega. VPN isključen: $ traceroute google.com traceroute to google.com (216.58.207.174), 30 hops max, 60 byte packets 1 _gateway (192.168.0.1) 4.062 ms 6.276 ms 6.132 ms 2 10.208.56.1 (10.208.56.1) 19.334 ms 31.814 ms 35.844 ms 3 * * * 4 100.64.0.74 (100.64.0.74) 35.689 ms 35.651 ms 35.581 ms 5 * * * 6 dh120-53.xnet.hr (83.139.120.53) 35.417 ms 31.647 ms 63.185 ms 7 212.162.29.117 (212.162.29.117) 74.309 ms * * 8 ae-2-3101.bar1.Budapest1.Level3.net (4.69.201.150) 64.354 ms 73.763 ms 73.798 ms 9 ae-2-3101.bar1.Budapest1.Level3.net (4.69.201.150) 86.898 ms 91.141 ms 91.179 ms 10 72.14.243.192 (72.14.243.192) 68.187 ms 68.053 ms 50.025 ms 11 74.125.242.227 (74.125.242.227) 76.204 ms * 74.125.242.226 (74.125.242.226) 49.574 ms 12 216.239.48.144 (216.239.48.144) 74.725 ms 216.239.48.120 (216.239.48.120) 70.866 ms 216.239.48.144 (216.239.48.144) 63.884 ms 13 172.253.70.102 (172.253.70.102) 66.526 ms 64.828 ms 172.253.72.248 (172.253.72.248) 61.331 ms 14 108.170.247.97 (108.170.247.97) 75.478 ms 108.170.247.113 (108.170.247.113) 74.012 ms 108.170.247.97 (108.170.247.97) 86.185 ms 15 * 209.85.252.235 (209.85.252.235) 83.468 ms 209.85.252.233 (209.85.252.233) 87.459 ms 16 muc11s04-in-f14.1e100.net (216.58.207.174) 82.050 ms 66.597 ms * VPN uključen: $ traceroute google.com traceroute to google.com (172.217.22.46), 30 hops max, 60 byte packets 1 10.200.200.1 (10.200.200.1) 29.185 ms 33.921 ms 33.878 ms 2 139.162.128.2 (139.162.128.2) 33.872 ms 33.821 ms 33.837 ms 3 139.162.129.10 (139.162.129.10) 38.861 ms 38.811 ms 38.739 ms 4 de-cix.fra.google.com (80.81.192.108) 33.286 ms 139.162.129.9 (139.162.129.9) 33.459 ms 33.394 ms 5 de-cix.fra.google.com (80.81.192.108) 33.054 ms 108.170.251.129 (108.170.251.129) 33.025 ms de-cix.fra.google.com (80.81.192.108) 32.899 ms 6 108.170.251.129 (108.170.251.129) 32.933 ms 66.249.95.29 (66.249.95.29) 31.776 ms 66.249.95.31 (66.249.95.31) 35.813 ms 7 fra15s16-in-f14.1e100.net (172.217.22.46) 35.739 ms 35.733 ms 66.249.95.31 (66.249.95.31) 35.890 ms Vidimo da je s uključenim VPN-om prvi skok na adresu 10.200.200.1 što je adresa našeg poslužitelja u VPN-u. ===== Literatura ===== [1] [[https://www.wireguard.com/papers/wireguard.pdf|https://www.wireguard.com/papers/wireguard.pdf]] [2] [[https://www.wireguard.com/|https://www.wireguard.com/]] [3] [[https://en.wikipedia.org/wiki/Virtual_private_network|https://en.wikipedia.org/wiki/Virtual_private_network]] [4] [[https://en.wikipedia.org/wiki/IPsec|https://en.wikipedia.org/wiki/IPsec]] [5] [[https://restoreprivacy.com/wireguard/|https://restoreprivacy.com/wireguard/]] [6] [[https://www.ivpn.net/knowledgebase/254/Using-WireGuard-for-Privacy-Protection.html|https://www.ivpn.net/knowledgebase/254/Using-WireGuard-for-Privacy-Protection.html]] [7] [[https://restoreprivacy.com/openvpn-ipsec-wireguard-l2tp-ikev2-protocols/|https://restoreprivacy.com/openvpn-ipsec-wireguard-l2tp-ikev2-protocols/]] [8] [[https://en.wikipedia.org/wiki/WireGuard|https://en.wikipedia.org/wiki/WireGuard]] [9] [[https://wiki.archlinux.org/index.php/WireGuard|https://wiki.archlinux.org/index.php/WireGuard]] [10] [[https://www.ckn.io/blog/2017/11/14/wireguard-vpn-typical-setup/?fbclid=IwAR1ippkULJcKA11jdAkc9pWU3jPbMB1PD8-E7e7pqsfrDrwK5LHoDJBkFdw|https://www.ckn.io/blog/2017/11/14/wireguard-vpn-typical-setup/?fbclid=IwAR1ippkULJcKA11jdAkc9pWU3jPbMB1PD8-E7e7pqsfrDrwK5LHoDJBkFdw]]