Cum să configurați serverul și clientul WireGuard VPN pe Ubuntu 20.04

Configurați un VPN auto-găzduit folosind Wireguard

A VPN (rețea privată virtuală) permite utilizatorului să se conecteze la o rețea privată de la distanță ca și cum computerul utilizatorului ar fi conectat direct la rețeaua privată. Tehnologia a fost dezvoltată inițial pentru a permite accesul de la distanță la rețeaua privată internă a unei companii, pentru angajații care nu sunt prezenți efectiv în locația rețelei interne.

Un server VPN este implementat în locația rețelei interne. Acest server se află în rețeaua publică și poate fi accesat folosind un client VPN de către angajat. Este necesară autentificarea pentru a vă conecta la serverul VPN. Comunicația dintre serverul VPN și clientul VPN este securizată folosind un protocol de tunel. Rețineți că această comunicare poate fi sau nu criptată, dar de obicei în majoritatea protocoalelor VPN este criptată.

O altă utilizare a VPN este să obțineți anonimatul atunci când accesați internetul sau pentru a ocoli restricțiile geografice impuse în timpul accesării unor site-uri web. În astfel de cazuri, rețeaua la care utilizatorul dorește să se conecteze nu este o rețea privată, ci este Internetul.

Multe protocoale VPN au fost dezvoltate de-a lungul anilor. Aceste protocoale folosesc diferite protocoale de tunel și algoritmi de criptare pentru comunicarea dintre server și client.

Un astfel de protocol, care câștigă o largă utilizare recent, este Wireguard. Wireguard este mai ușor, mai simplu și mai performant decât binecunoscutele protocoale VPN utilizate în mod tradițional, cum ar fi OpenVPN, IPSec. Este deja implementat pentru Windows, Mac OS și un număr mare de distribuții Linux. În Linux, este implementat ca un modul kernel. Este disponibil în depozitele oficiale ale Ubuntu 20.04.

În acest articol, vom vedea cum să configurați un server și un client Wireguard VPN în Ubuntu 20.04.

Instalare

Pentru acest articol, configurez un server Wireguard pe un Ubuntu 20.04 Linode și Wireguard Client pe mașina mea locală cu Ubuntu 20.04.

Pachetul sârmă de protecție instalează atât serverul Wireguard, cât și clientul. Rulați următoarea comandă atât pe mașina Server, cât și pe mașina Client.

sudo apt install wireguard

Configurare server

Chei de securitate

Trebuie să generăm un set de perechi de chei publice/private pentru a autentifica și securiza conexiunea Wireguard. Acest lucru se poate face folosind următoarele comenzi:

sudo su cd /etc/wireguard umask 077 wg genkey | tee cheie_privată | wg pubkey > cheie_publică

Rețineți că facem toate sarcinile de configurare ca superutilizator. Motivul este că accesul la director /etc/wireguard este împiedicat pentru utilizatorii normali, iar accesul la director nu poate fi obținut doar cu privilegii sudo pentru un utilizator normal.

Apoi, setăm masca de creare a fișierelor la 077. Aceasta înseamnă că ori de câte ori un fișier nou este creat în acest folder de către orice proces, permisiunile acestuia vor fi mascate automat cu 077. De ex. dacă în acest folder este creat un fișier cu permisiunile 777, acesta este automat mascat și permisiunile devin efectiv 700. Acest lucru se face astfel încât numai proprietarul fișierului să aibă toate permisiunile asupra fișierului, iar toți ceilalți nu au permisiuni.

Pe linia următoare, generăm perechea de chei public/privat pentru server. Sunt salvate în fișiere cheie_privată și cheie_publică. Pentru a vizualiza cheile, rulați:

cat cheie_privata cat cheie_publica

Copiați cheia privată, avem nevoie de ea la pasul următor.

Notă: Nu partajați niciodată cheia privată în mod public!

Fișier de configurare

Să creăm un fișier de configurare pentru serverul Wireguard. Puteți alege orice nume pentru fișier. Vom crea un fișier wg0.conf în acest exemplu.

vim wg0.conf

Adăugați următoarele în fișier.

[Interfață] Adresă = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

Lipiți cheia privată pe care am copiat-o anterior în linia 5 din codul de mai sus.

Trebuie să configuram Wireguard pe o altă subrețea (virtuală). decât adresa IP a serverului. Aici, am folosit 10.20.43.1 pentru server și voi folosi 10.20.43.2 pentru client. Orice subrețea poate fi folosită aici. Pentru a obține adresa IP a serverului și a interfeței, rulați:

ifconfig

Notați adresa IP a serverului. Acest lucru este necesar în timpul configurării clientului.

Interfața folosită de server, așa cum se vede în imaginea de mai sus, este eth0. Numele interfeței poate diferi în funcție de rețeaua utilizatorului, poate fi wlan0 sau wlp2s0 în cazul în care utilizatorul este conectat la o rețea WiFi folosind un card wireless.

Inlocuieste în Documenta și PostDown cu interfața dvs.; în acest exemplu este eth0.Documenta și PostDown directivele sunt folosite pentru a specifica ce comenzi ar trebui să fie executate atunci când serverul pornește și, respectiv, se oprește. În exemplul nostru, folosim iptables comanda pentru a seta reguli IP astfel încât adresa IP a serverului să fie partajată de clienți. Regulile vor cădea odată ce serverul se oprește.

Salvați și ieșiți din fișier. Când utilizați vim, apăsați Esc, apoi tastați :wq și apăsați introduce pentru a salva și a ieși.

Dacă utilizați un ufw firewall pe server, trebuie să permitem conexiuni UDP la portul pentru serverul VPN, 51190.

ufw permit 51190/udp

Pornirea Serviciului

Acum, când configurarea este finalizată, putem porni serviciul Wireguard VPN.

Pentru a permite serviciul să pornească la momentul pornirii, rulați:

systemctl enable wg-quick@wg0

Rețineți că aici wg0 este numele fișierului de configurare.

A începe serviciul, rulați:

service wg-quick@wg0 start

Verifica că serviciul a început cu succes:

starea serviciului wg-quick@wg0

Verificați dacă interfața am creat în fișierul de configurare a început, folosind comanda IP.

ip a show wg0

Serverul VPN Wireguard este acum configurat și rulează. Să configurem clientul acum.

Configurare client

Configurația clientului pentru Wireguard este mai mult sau mai puțin aceeași cu configurația unui server. Generăm cheile pentru client și apoi creăm un fișier de configurare.

Chei de securitate

Pentru a genera cheia publică/privată pereche pentru client, rulați:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key

Cheile publice și private pentru client sunt acum generate în fișiere cheie_privată_client și client_public_key.

Verificați dacă au fost create, folosind pisică comanda.

cat client_private_key cat client_public_key

Copiați cheia privată afișată deoarece trebuie să o adăugăm la fișierul de configurare pentru client.

Fișier de configurare

Creați fișierul de configurare cu orice nume doriți. Îl vom crea cu numele wg0-client pentru acest exemplu.

vim wg0-client.conf

Adăugați următoarea configurație.

[Interfață] # Adresa IP și cheia privată a adresei clientului = 10.20.43.2/24 PrivateKey = [Peer] # Cheia publică, adresa IP și portul serverului PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0

Introduceți adresa de subrețea pentru client. După cum a fost descris anterior, folosim 10.20.43.2 pentru clientul din acest exemplu.

Adăugați cheia privată a clientului generat în pasul anterior în linia 4 din codul de configurare de mai sus.

Sub „Peer”, adăugăm informații despre serverul Wireguard VPN vrem să ne conectăm.

Introduceți cheia publică a serverului. Introduceți adresa IP a serverului, pe care l-am notat anterior, și port în formatul dat împotriva Punct final. Acesta este portul pe care l-am specificat în fișierul de configurare a serverului și pe care a început serviciul VPN de pe server.

IP-urile permise trebuie introduse așa cum sunt date (0.0.0.0/0), astfel încât orice solicitare pe o IP publică dinamică utilizată de client să fie întotdeauna redirecționată către serverul VPN.

Salvați și ieșiți din fișier. Când utilizați vim, apăsați Esc, apoi tastați :wq și apăsați introduce pentru a salva și a ieși.

Activați serviciul pentru clienți să ruleze cu fiecare boot și să o pornească.

systemctl activați serviciul wg-quick@wg-client wg-quick@wg-client start

Verifica dacă serviciul a început.

service wg-quick@wg-client status

Adăugarea de peer la server

Acum avem serverul VPN și clientul în funcțiune. Cu toate acestea, un tunel securizat între cele două nu este stabilit decât dacă stabilim o conexiune peer-to-peer între server și client.

Întoarce-te la server. Primul, opriți serviciul VPN.

service wg-quick@wg0 stop

Apoi, deschideți fișierul de configurare la adăugați configurație pentru peer (client).

vim /etc/wireguard/wg0.conf

Adăuga următoarele rânduri la dosar.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

Acum, porniți din nou serviciul VPN.

service wg-quick@wg0 start

Asta e! Aceasta este toată configurația necesară pentru configurarea clientului și serverului Wireguard VPN. Să testăm acum VPN-ul nostru.

Testarea VPN-ului

Mai întâi, să facem un simplu ping de la client la server, pentru a ne asigura că comunicația tunelului VPN funcționează. Rulați următoarele pe client:

ping 10.20.43.1

Următorul, deschideți un browser web și deschideți orice site web pentru a verifica dacă vă puteți conecta la Internet de pe computerul client. De asemenea, puteți verifica conexiunea la internet din linia de comandă folosind wget.

wget 

Acum, am verificat conectivitatea tunelului și conectivitatea la Internet. Dacă ambele funcționează, acum trebuie să ne asigurăm că tot traficul de internet care vine către client trece prin server.

Pentru aceasta, trebuie pur și simplu să verificăm adresa IP a clientului așa cum este văzută de Internet. O modalitate de a face acest lucru este să accesați whatsmyip.org. Sau, din linia de comandă, putem interoga un alt serviciu similar numit IP info, folosind Curl.

Rulați următoarele pe computerul client

curl //ipinfo.io/ip

Da. Este adresa IP publică a Linode-ului unde este găzduit serverul VPN. Așa se obține anonimatul utilizând VPN, deoarece pe tot internetul acum se vede IP-ul serverului VPN și nu al computerului dvs.

Concluzie

Ușurința de configurare este unul dintre cele mai importante avantaje ale Wireguard față de software-ul VPN tradițional precum OpenVPN, care necesită un nivel mai ridicat de cunoștințe de rețea și rutare pentru a fi configurat. Cu toate acestea, există o lipsă de documentație oficială detaliată pentru Wireguard, care ar putea cauza probleme dacă configurarea Wireguard generează erori sau nu funcționează conform așteptărilor.

Cu toate acestea, Wireguard este o alegere excelentă dacă doriți un VPN găzduit de sine pentru o comunicare sigură prin Internet. Pentru a afla mai multe despre Wireguard și protocoalele și tehnologiile pe care le utilizează, puteți consulta site-ul oficial.