Si të krijoni një VPN pikë-për-pikë me WireGuard në Ubuntu 16.04


Prezantimi

WireGuard është një VPN moderne, me performancë të lartë, e krijuar për të qenë e lehtë për t'u përdorur duke ofruar siguri të fortë. WireGuard fokusohet vetëm në sigurimin e një lidhjeje të sigurt midis palëve përmes një ndërfaqe rrjeti të koduar me vërtetimin e çelësit publik. Kjo do të thotë që, ndryshe nga shumica e VPN-ve, nuk zbatohet asnjë topologji, kështu që mund të arrihen konfigurime të ndryshme duke manipuluar konfigurimin e rrjetit përreth. Ky model ofron fuqi dhe fleksibilitet të madh që mund të aplikohet sipas nevojave tuaja individuale.

Një nga topologjitë më të thjeshta që mund të përdorë WireGuard është një lidhje pikë-për-pikë. Kjo krijon një lidhje të sigurt midis dy makinave pa ndërmjetësim nga një server qendror. Ky lloj lidhjeje mund të përdoret gjithashtu midis më shumë se dy anëtarëve për të krijuar një topologji rrjetë VPN, ku çdo server individual mund të flasë drejtpërdrejt me kolegët e tij. Për shkak se çdo host është në baza të barabarta, këto dy topologji janë më të përshtatshmet për vendosjen e mesazheve të sigurta midis serverëve në krahasim me përdorimin e një serveri të vetëm si një portë për të drejtuar trafikun.

Në këtë udhëzues, ne do të demonstrojmë se si të krijoni një lidhje VPN pikë-për-pikë me WireGuard duke përdorur dy serverë Ubuntu 16.04. Ne do të fillojmë duke instaluar softuerin dhe më pas duke gjeneruar çifte çelësash kriptografikë për çdo host. Më pas, ne do të krijojmë një skedar të shkurtër konfigurimi për të përcaktuar informacionin e lidhjes së kolegëve. Pasi të fillojmë ndërfaqen, do të jemi në gjendje të dërgojmë mesazhe të sigurta midis serverëve përmes ndërfaqes WireGuard.

Parakushtet

Për të ndjekur këtë udhëzues, do t'ju duhet akses në dy serverë Ubuntu 16.04. Në çdo server, do t'ju duhet të krijoni një përdorues jo-root me privilegje sudo për të kryer veprime administrative. Do t'ju duhet gjithashtu një mur bazë zjarri i konfiguruar në secilin sistem. Ju mund t'i përmbushni këto kërkesa duke plotësuar tutorialin e mëposhtëm:

  • Konfigurimi fillestar i serverit me Ubuntu 16.04

Kur të jeni gati për të vazhduar, hyni në secilin server me përdoruesin tuaj sudo.

Instalimi i Softuerit

Projekti WireGuard ofron një PPA me paketa të përditësuara për sistemet Ubuntu. Do të na duhet të instalojmë WireGuard në të dy serverët tanë përpara se të vazhdojmë. Në secilin server, kryeni veprimet e mëposhtme.

Së pari, shtoni WireGuard PPA në sistem për të konfiguruar aksesin në paketat e projektit:

  1. sudo add-apt-repository ppa:wireguard/wireguard

Shtypni ENTER kur ju kërkohet të shtoni burimin e ri të paketës në konfigurimin tuaj apt. Pasi të jetë shtuar PPA, përditësoni indeksin e paketës lokale për të tërhequr informacionin në lidhje me paketat e reja të disponueshme dhe më pas instaloni modulin e kernelit WireGuard dhe komponentët e tokës së përdoruesit:

  1. sudo apt-get update
  2. sudo apt-get install wireguard-dkms wireguard-tools

Më pas, ne mund të fillojmë konfigurimin e WireGuard në secilin prej serverëve tanë.

Krijimi i një çelësi privat

Secili pjesëmarrës në një WireGuard VPN vërteton bashkëmoshatarët e tij duke përdorur kriptografinë e çelësave publikë. Lidhjet ndërmjet kolegëve të rinj mund të krijohen duke shkëmbyer çelësat publikë dhe duke kryer konfigurimin minimal.

Për të gjeneruar një çelës privat dhe për ta shkruar atë drejtpërdrejt në një skedar konfigurimi WireGuard, shkruani në secilin server sa vijon:

  1. (umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
  2. wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

Komanda e parë shkruan përmbajtjen fillestare të një skedari konfigurimi në /etc/wireguard/wg0.conf. Vlera umask në një nën-predhë në mënyrë që të krijojmë skedarin me leje të kufizuara pa ndikuar në mjedisin tonë të rregullt.

Komanda e dytë gjeneron një çelës privat duke përdorur komandën wg të WireGuard dhe e shkruan atë drejtpërdrejt në skedarin tonë të konfigurimit të kufizuar. Ne gjithashtu e vendosim çelësin përsëri në komandën wg pubkey për të nxjerrë çelësin publik të lidhur, të cilin e shkruajmë në një skedar të quajtur /etc/wireguard/publickey për referencë të lehtë. Ne do të duhet të shkëmbejmë çelësin në këtë skedar me serverin e dytë ndërsa përcaktojmë konfigurimin tonë.

Krijimi i një skedari fillestar të konfigurimit

Më pas, ne do të hapim skedarin e konfigurimit në një redaktues për të vendosur disa detaje të tjera:

  1. sudo nano /etc/wireguard/wg0.conf

Brenda, duhet të shihni çelësin tuaj privat të krijuar të përcaktuar në një seksion të quajtur [Interface]. Ky seksion përmban konfigurimin për anën lokale të lidhjes.

Konfigurimi i seksionit të ndërfaqes

Ne duhet të përcaktojmë adresën IP të VPN që do të përdorë kjo nyje dhe portin që do të dëgjojë për lidhjet nga kolegët. Filloni duke shtuar linjat ListenPort dhe SaveConfig në mënyrë që skedari juaj të duket kështu:

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true

Kjo cakton portën që WireGuard do të dëgjojë. Ky mund të jetë çdo port i lirë, i lidhur, por në këtë udhëzues ne do të vendosim VPN-në tonë në portin 5555 për të dy serverët. Vendosni ListenPort në çdo host në portën që keni zgjedhur:

Gjithashtu kemi vendosur SaveConfigtrue. Kjo do t'i tregojë shërbimit wg-quick që të ruajë automatikisht konfigurimin e tij aktiv në këtë skedar në momentin e mbylljes.

Shënim: Kur aktivizohet SaveConfig, shërbimi wg-quick do të mbishkruajë përmbajtjen e /etc/wireguard/wg0.conf skedar sa herë që shërbimi mbyllet. Nëse keni nevojë të modifikoni konfigurimin e WireGuard, ose mbyllni shërbimin wg-quick përpara se të redaktoni skedarin /etc/wireguard/wg0.conf ose bëni ndryshimet në ekzekutimi i shërbimit duke përdorur komandën wg (këto do të ruhen në skedar kur shërbimi të fiket). Çdo ndryshim i bërë në skedarin e konfigurimit gjatë ekzekutimit të shërbimit do të mbishkruhet kur wg-quick ruan konfigurimin e tij aktiv.

Më pas, shtoni një përkufizim unik Adresa për secilin server në mënyrë që shërbimi wg-quick të mund të vendosë informacionin e rrjetit kur të shfaqë ndërfaqen WireGuard. Ne do të përdorim nënrrjetin 10.0.0.0/24 si hapësirë adresash për VPN-në tonë. Për çdo kompjuter, do t'ju duhet të zgjidhni një adresë unike brenda këtij diapazoni (10.0.0.1 deri në 10.0.0.254) dhe të specifikoni adresën dhe nënrrjetin duke përdorur shënimin CIDR.

Ne do t'i japim serverit tonë të parë një adresë prej 10.0.0.1, e cila përfaqësohet si 10.0.0.1/24 në shënimin CIDR:

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24

serverin tonë të dytë, ne do ta përcaktojmë adresën si 10.0.0.2, e cila na jep një paraqitje CIDR prej 10.0.0.2/24:

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.2/24

Ky është fundi i seksionit [Interface].

Ne mund të fusim informacionin për kolegët e serverit ose brenda skedarit të konfigurimit ose manualisht duke përdorur komandën wg më vonë. Siç u përmend më lart, shërbimi wg-quick me opsionin SaveConfig të vendosur në true do të nënkuptojë që informacioni i kolegëve do të shkruhet përfundimisht në skedar me secilën metodë.

Për të demonstruar të dyja mënyrat e përcaktimit të identiteteve të kolegëve, ne do të krijojmë një seksion [Peer] në skedarin e konfigurimit të serverit të dytë, por jo të parën. Mund ta ruani dhe mbyllni skedarin e konfigurimit për serverin i parë (ai që përcakton adresën 10.0.0.1) tani.

Përcaktimi i seksionit të kolegëve

Në skedarin e konfigurimit që është ende i hapur, krijoni një seksion të quajtur [Peer] poshtë hyrjeve në seksionin [Interface].

Filloni duke vendosur PublicKey në vlerën e çelësit publik të serverit i parë. Ju mund ta gjeni këtë vlerë duke shtypur cat /etc/wireguard/publickey në serverin përballë. Ne gjithashtu do të vendosim AllowedIPs në adresat IP që janë të vlefshme brenda tunelit. Meqenëse ne e dimë adresën specifike IP që përdor serveri i parë, ne mund ta fusim atë drejtpërdrejt, duke përfunduar me /32 për të treguar një varg që përmban një vlerë të vetme IP:

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32

Së fundi, ne mund të vendosim Endpoint në adresën IP publike të serverit të parë dhe në portën e dëgjimit WireGuard (ne kemi përdorur portin 5555 në këtë shembull). WireGuard do ta përditësojë këtë vlerë nëse merr trafik të ligjshëm nga ky koleg në një adresë tjetër, duke lejuar që VPN të përshtatet me kushtet e roaming. Ne vendosëm vlerën fillestare në mënyrë që ky server të mund të fillojë kontaktin:

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32
Endpoint = public_IP_of_first_server:5555

Kur të keni mbaruar, ruani dhe mbyllni skedarin për t'u kthyer në vijën e komandës.

Nisja e VPN dhe lidhja me kolegët

Tani jemi gati të nisim WireGuard në secilin server dhe të konfigurojmë lidhjen midis dy kolegëve tanë.

Hapja e Firewall-it dhe fillimi i VPN-së

Së pari, hapni portën WireGuard në murin e zjarrit në secilin server:

  1. sudo ufw allow 5555

Tani, filloni shërbimin wg-quick duke përdorur skedarin e ndërfaqes wg0 që përcaktuam:

  1. sudo systemctl start wg-quick@wg0

Kjo do të fillojë ndërfaqen e rrjetit wg0 në makinë. Këtë mund ta konfirmojmë duke shtypur:

  1. ip addr show wg0
Output on first server
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1 link/none inet 10.0.0.1/24 scope global wg0 valid_lft forever preferred_lft forever

Ne mund të përdorim mjetin wg për të parë informacione rreth konfigurimit aktiv të VPN:

  1. sudo wg

Në serverin pa një përkufizim kolegial, ekrani do të duket diçka si kjo:

Output on first server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555

Në server me një konfigurim homolog të përcaktuar tashmë, dalja do të përmbajë gjithashtu atë informacion:

Output on second server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_first_server endpoint: public_IP_of_first_server:5555 allowed ips: 10.0.0.1/32

Për të përfunduar lidhjen, tani duhet të shtojmë informacionin peering të serverit të dytë në serverin e parë duke përdorur komandën wg.

Shtimi i informacionit të kolegëve që mungojnë në linjën e komandës

serverin e parë (ai që nuk shfaq informacionin e kolegëve), fut manualisht informacionin e peering duke përdorur formatin e mëposhtëm. Çelësi publik i serverit të dytë mund të gjendet në daljen e sudo wg nga serveri i dytë:

  1. sudo wg set wg0 peer public_key_of_second_server endpoint public_IP_of_second_server:5555 allowed-ips 10.0.0.2/32

Ju mund të konfirmoni që informacioni është tani në konfigurimin aktiv duke shtypur përsëri sudo wg në serverin e parë:

  1. sudo wg
Output on first server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_second_server endpoint: public_IP_of_second_server:5555 allowed ips: 10.0.0.2/32

Lidhja jonë pikë-për-pikë tani duhet të jetë e disponueshme. Provoni të bëni ping adresën VPN të serverit të dytë nga i pari:

  1. ping -c 3 10.0.0.2
Output on first server
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms --- 10.0.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms

Nëse gjithçka funksionon si duhet, mund ta ruani konfigurimin në serverin e parë përsëri në skedarin /etc/wireguard/wg0.conf duke rifilluar shërbimin:

  1. sudo systemctl restart wg-quick@wg0

Nëse dëshironi të filloni tunelin në nisje, mund ta aktivizoni shërbimin në secilën makinë duke shtypur:

  1. sudo systemctl enable wg-quick@wg0

Tuneli VPN tani duhet të fillojë automatikisht sa herë që ndizet makina.

konkluzioni

WireGuard është një opsion i shkëlqyeshëm për shumë raste përdorimi për shkak të fleksibilitetit, zbatimit me peshë të lehtë dhe kriptografisë moderne. Në këtë udhëzues, ne instaluam WireGuard në dy serverë Ubuntu 16.04 dhe konfiguruam çdo host si një server me një lidhje pikë-për-pikë me kolegët e tij. Kjo topologji është ideale për vendosjen e komunikimit server-to-server me kolegët ku secila palë është një pjesëmarrës i barabartë ose ku hostet mund të kenë nevojë të krijojnë lidhje ad-hoc me serverë të tjerë.