Sådan konfigureres en peer-to-peer fuldt indrettet VPN mellem servere

Hvis du har distribueret flere servere på DigitalOcean eller Vultr, ved du sandsynligvis, at hver server kan leveres med en privat IP-adresse, der er tilknyttet datacentrets private netværk. Dette er fantastisk, fordi det giver mulighed for at distribuere distribuerede tjenester (som databaser), der kommunikerer med hinanden med en latenstid, der er tæt på nul.

"Problemet" er, at det private netværk deles: det betyder, at der i det samme subnet findes hundreder og muligvis tusinder af andre servere. Så på et tidspunkt vil du gerne konfigurere et Virtual Private Network (VPN) mellem dine servere, så de kan kontakte hinanden med brugerdefinerede private IP-adresser (som 10.0.1.x) gennem et krypteret netværk .

Hvorfor du skal bruge vpncloud.rs

En af de mest almindelige løsninger til opsætning af en VPN er OpenVPN, men det er ikke det, jeg vil dække i dag. På BotFactory har vi mere end 10 servere, der er vært på DigitalOcean, og vi ønskede en relativt nem måde at kryptere trafikken mellem vores servere uden at bruge timer og timer på at konfigurere netværket. Vi ønskede noget, der automatisk opdager nye og fjernede servere. Derfor har vi valgt vpncloud.rs. Her er nogle af højdepunkterne på vpncloud.rs:

  • det giver mulighed for at binde VPN til en brugerdefineret grænseflade, så du kan oprette et netværk som 10.0.x.x / 16 med alle dine værter
  • det opretter et fuldt indviklet peer-to-peer VPN-netværk. Det betyder, at hver af værterne har brug for IP-adressen på blot hinandens server (inde i VPN) for automatisk at opdage alle noder
  • tunnelen er selvfølgelig krypteret, og AES-256 understøttes
  • automatisk genforbindelse, når en forbindelse mistes eller en peer midlertidigt ikke er tilgængelig
  • god ydelse
  • en forudbygget .deb-pakke er tilgængelig
  • det er open source
  • det er utroligt let at konfigurere, du vil blive overrasket
  • det er stabilt. Vi har kørt vpncloud.rs på 10 servere i næsten et år, og vi har aldrig haft et nedbrud eller noget problem. Det fungerer bare.

Jeg vil nu forklare, hvordan man konfigurerer et grundlæggende mesh P2P VPN-netværk med vpncloud.rs.

Lad os gå

Først skal du installere vpncloud.rs på hver af de servere, du vil inkludere i det virtuelle netværk.

Jeg antager, at serverne kører Ubuntu, men de følgende trin skal være de samme for alle de Debian-baserede Linux-distributioner. Hvis du bruger en anden type Linux-distribution, skal du følge trinnene i readme til kompilering.

Kør disse kommandoer:

wget https://github.com/dswd/vpncloud.rs/releases/download/v0.8.1/vpncloud_0.8.1_amd64.deb
sudo dpkg -i vpncloud_0.8.1_amd64.deb

En systemd-service oprettes automatisk sammen med en prøvekonfigurationsfil.

Konfiguration

Konfigurationsfilen ser sådan ud og er placeret i /etc/vpncloud/example.net.disabled.

Den første ting du skal gøre er at oprette en kopi af eksempelfilen.

sudo cp /etc/vpncloud/example.net.disabled /etc/vpncloud/myvpn.net
sudo nano /etc/vpncloud/myvpn.net

Lad os nu se på indholdet af konfigurationsfilen. De ændringer, jeg beskriver her, skal foretages på alle de servere, hvor du installerede VPN.

Som jeg tidligere sagde, opretter vpncloud.rs en fuld mesh, men for at gøre det behøver den ikke IP-adresserne på alle servere. I min konfiguration har jeg konfigureret 3 peers, som er IP-adresserne på de 3 databaseservere (de skal aldrig være offline på samme tid). Hver VPN-instans er i stand til at bruge disse peers til at oprette forbindelser med alle de andre værter i det virtuelle netværk.

peers

Følgende er en prøvekonfiguration for peers.

jævnaldrende:
  - privatip1: 3210
  - privatip2: 3210

Selvom det er muligt at placere serverens offentlige IP-adresser i konfigurationen, anbefales det, at du bruger de interne private netværks IP-adresser (leveret af f.eks. DigitalOcean til eth1) til bedre ydelse og lavere latenstid. Du kan også bruge værtsnavne eller endda sætte "falske" værtsnavne, som du derefter kan kortlægge med de private IP'er i filen / etc / hosts.

Sørg også for, at porten 3210 er åben på det interne netværk på alle servere. Hvis du har brug for en simpel firewall, der kun giver dig mulighed for at åbne en port på en grænseflade, skal du kigge på FireHOL. Det er godt!

Delt nøgle

Herefter er en prøvekonfiguration til indstillingen delt_nøgle. Den samme nøgle skal indstilles på alle servere.

shared_key: "nT4gAGSP! S9! 2Rjb9% h * gdVN * 8NszP"

(* Brug ikke denne nøgle *)

Dette er den nøgle, der vil blive brugt til at udlede den symmetriske nøgle, der skal bruges med AES-256 til kryptering af VPN-trafikken. Fordelen ved at bruge en delt nøgle er, at du ikke behøver at overføre komplekse nøgler mellem servere. Det er som et kodeord, og det skal være en streng med ASCII-tegn. I mit tilfælde er den delte nøgle en tilfældig streng med 30 ASCII-tegn.

Kryptering

Som standard bruger vpncloud.rs ChaCha20 som krypteringsalgoritme. På DigitalOcean-servere understøttes AES-256 af CPU'erne, så du kan indstille krypterings- / dekrypteringsalgoritmen til AES-256 for bedre ydelse.

krypto: aes256

Virtuel interface

Til sidst skal du specificere ifup- og ifdown-indstillingerne, som specificerer de kommandoer, der skal køres af vpncloud.rs, når netværksgrænsefladen til VPN oprettes (og ned).

ifup: "ifconfig $ IFNAME 10.0.1.1/8 mtu 1400"
ifdown: "ifconfig $ IFNAME ned"

I henhold til den IP-adresse (i CIDR-notation), som du angiver i ifup-kommandoen, vil operativsystemet automatisk forstå, at du vil oprette et netværk, hvis værter er i dette tilfælde i undernettet 10.x.x.x.

I mit tilfælde "grupperede" jeg serverne ved at ændre den tredje oktet af adressen for at opnå en konfiguration som denne:

  • 10.0.1.x forbeholdt databaseservere
  • 10.0.2.x forbeholdt webservere
  • ...

Kør dreng løb

Når du har anvendt ovenstående konfiguration på alle servere, kan du starte VPN-tjenesten.

sudo service vpncloud @ myvpn start

hvor myvpn skal erstattes med navnet på konfigurationsfilen (ekskluderet .net-udvidelsen).

Kontroller for fejl med sudo-service vpncloud @ myvpn-status, og prøv derefter at pinge alle servere: på hver server, ping 10.0.1.1, 10.0.1.2 osv., Afhængigt af din konfiguration. De skal alle arbejde med en latenstid tæt på nul.

Til sidst skal du ikke glemme at aktivere tjenesten, så den automatisk kører ved systemstart.

sudo systemctl aktivere vpncloud @ myvpn

Navngivende værter

For at gøre værterne af VPN lettere genkendelige kan du kortlægge IP-adresserne til værtsnavne og tilføje noget som de følgende linjer til filen / etc / hosts på hver server.

10.0.1.1 db1.vpn
10.0.1.2 db2.vpn

Var det ikke så let?

Hvis du fandt denne artikel nyttig, skal du klappe og dele :)

Hvis du kunne lide vpncloud.rs som jeg gjorde, skal du stjerne opbevaringsstedet på GitHub, og hvis du er i stand til at finde en fejl, kan du bidrage med at oprette et problem eller ved at sende en pull-anmodning (du bliver nødt til at forstå lidt af Rust-sproget at gøre det. Det gør jeg ikke).

Se også vpncloud.rs wiki på GitHub, hvis du er interesseret i at lære andre aspekter af VPN.