Skapa ditt eget Linux Virtual Private Network med OpenVPN
Virtuella privata nätverk (VPN) låter dig dölja dina dataöverföringar online och förbättra din säkerhet medan du surfar på Internet från offentliga platser. Många leverantörer av online-tjänster erbjuder både gratis och betalda VPN-alternativ för dig att använda. Men även de bästa betalda planerna kan vara opålitliga eller långsamma ibland.
Om du bara kan skapa din egen VPN mellan din mobila dator och din hemdator.
Faktum är att processen är lättare än du kanske tror. Idag diskuterar vi hur du kan använda OpenVPN för att skapa en säker anslutning mellan en klient och en server på en Linux-maskin.
Tänk på att vi ska skapa en routing-konfiguration och inte en överbryggande, vilket borde vara bra för de flesta användningsfall. Windows-användare kan följa med genom att läsa OpenVPN-dokumentationen, börja med avsnittet om att ställa in en certifikatmyndighet. Kommandon som används i Windows kommer att likna dem som visas nedan.
Vad du behöver
Du behöver två datorer - en är servermaskinen medan den andra är klienten. Servermaskinen kan vara ditt hemdator eller en Linux-instans från DigitalOcean eller Linode. Klientmaskinen är den dator som du använder regelbundet. Eftersom denna handledning görs på Linux måste båda datorerna köra Linux också.
Obs! I denna handledning använder vi Ubuntu som vår distro för både servern och klientmaskinen.
Installera OpenVPN
För att komma igång måste du installera OpenVPN och Easy-RSA på din server. Installera sedan OpenVPN på din klientmaskin.
På Ubuntu bör du installera Easy-RSA från den här Github-sidan. Ubuntu innehåller Easy-RSA version 2 i dess repositories. Github-länken erbjuder Easy-RSA version 3, som följer de kommandon som jag kommer att använda i den här artikeln.
sudo apt-få installera openvpn git klon https://github.com/OpenVPN/easy-rsa.git
I katalogen du klonade Github-arkivet, kopierar du "easyrsa3" -katalogen den innehåller i "/ etc / easy-rsa /."
sudo mkdir / etc / easy-rsa sudo cp -r ./easyrsa3/* / etc / easy-rsa /
Public Key Infrastructure (PKI)
OpenVPN använder en Public Key Infrastructure (PKI) för att fastställa identiteten hos servrar och klienter, så de separata enheterna kan prata med varandra. PKI använder en certifikatmyndighet (CA) tillsammans med enskilda certifikat och privata nycklar för varje server och klient.
CA måste signera servern och klientcertifikat. OpenVPN kontrollerar sedan att servern autentiserar varje kunds identitet, och samtidigt kontrollerar varje klient serverns identitet.
Inställningen här är mer komplicerad än du kan hitta för PPTP-stilanslutningar, men det ger bättre säkerhet för användarna och ger servern större frihet att acceptera eller neka begärda inkommande klientanslutningar.
Skapa CA-certifikatet
För strängare säkerhet rekommenderas att din CA-maskin skiljer sig från din server. I korthet kommer den här artikeln att använda samma maskin för båda uppgifterna. Du bör ändra dina filkopieringsprocedurer för att tillgodose din situation - oavsett om det används scp
för nätverksöverföringar eller med en USB-nyckel för att manuellt flytta filer.
Obs! Om du använder en separat dator som din CA måste du installera Easy-RSA på den maskinen.
1. Ändra kataloger till "/ etc / easy-rsa /:"
cd / etc / easy-rsa /
2. Kopiera "/etc/easy-rsa/vars.example" till "/ etc / easy-rsa / vars.". Öppna sedan vars att redigera innehållet:
sudo cp ./vars.example ./vars sudo nano ./vars
3. Ange detaljer som ditt land, provins, stad, organisation och e-post. Ovanstående linjerna som visas här genom att ta bort "#" i början av var och en.
När du är klar med redigeringen, spara (Ctrl + o) och avsluta (Ctrl + x).
4. Initiera din nya PKI och skapa certifikatmyndighetens keypair som du ska använda för att signera enskilda server- och klientcertifikat:
export EASYRSA = $ (pwd) sudo ./easyrsa init-pki sudo ./easyrsa build-ca
Kopiera cacrt filen du just skapat till din OpenVPN-servern katalog. Du bör också byta ägare och gruppera med Chown:
sudo cp /etc/easy-rsa/pki/ca.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/ca.crt
Skapa serverns certifikat och privat nyckel
Ändra tillbaka till din Easy-RSA-katalog och generera serverns certifikat och dess privata nyckel:
cd / etc / easy-rsa sudo ./easyrsa init-pki sudo ./easyrsa gen-req ServerName nopass
Du kan ändra "ServerName" i kommandot ovan till vilket namn du önskar. Se till att du speglar den förändringen när du kopierar din nya nyckel till OpenVPN-serverns katalog:
sudo cp /etc/easy-rsa/pki/private/ServerName.key / etc / openvpn / server /
Diffie-Hellman Parameters File
OpenVPN använder sig av Diffie-Hellman (DH) -nycklarutbytesmetoden för säker utbyte av kryptografiska nycklar över ett nätverk. Du kommer att skapa en DH parametervär med följande kommando:
sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048
Sluttalet, 2048, i det kommandot visar antalet bitar som användes vid skapandet av filen. Till exempel kan du använda 4096, men det skulle ta mycket längre tid att generera filen och skulle inte förbättra säkerheten mycket. Standardvärdet är 2048, och det värdet är tillräckligt för de flesta användningsfall.
Hash-baserad Message Authentication
OpenVPN använder också en Hash-based Message Authentication (HMAC) signatur för att skydda sårbarheter i SSL / TLS handskakningar. Skapa filen med det här kommandot:
sudo openvpn --genkey --secret /etc/openvpn/server/ta.key
Klientfiler
Vid denna tidpunkt har du skapat ett antal filer för din server. Nu är det dags att skapa filer för dina kunder. Du kan upprepa denna process flera gånger för så många kunder som du behöver. Du kan skapa klientfiler säkert på vilken dator som helst med Easy-RSA installerad.
Skriv in Easy-RSA-katalogen och starta PKI igen om du inte redan har gjort det:
cd / etc / easy-rsa sudo ./easyrsa init-pki
Skapa en klientnyckel och ett certifikat. Byt kataloger om du hoppade över föregående steg.
cd / etc / easy-rsa sudo ./easyrsa gen-req ClientName nopass
Om du upprepar processen behöver du inte initiera PKI för varje ny klient. Var noga med att ändra "ClientName" för att vara unik varje gång.
Signeringsserver och klientcertifikat
CA måste nu signera din server- och klientcertifikat.
Om du tittar i filen "/ etc / easy-rsa / pki / reqs /", borde du se alla begäran (.req) -filerna Easy-RSA skapade i de tidigare easyrsa gen-req
.
I den här skärmdumpen finns det bara två .req-filer. Ditt nummer kommer att variera om du har gjort mer än en klient i föregående steg.
Om du använde en separat CA-maskin måste du nu överföra dessa .req-filer till CA för signering. När det är klart, byt till Easy-RSA-katalogen och skriv under dina filer med följande kommandon, se till att spegla den korrekta platsen för varje .req och namnet på varje server och klient.
cd / etc / easy-rsa sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ServerName.req Server1 sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1 sudo ./easyrsa sign-req server Server1 sudo ./easyrsa sign-req klient Client1
Observera att du måste tillhandahålla Easy-RSA med ett annat namn för din server och klientcertifikat. ServerName.req kommer att användas här, till exempel för att skapa Server1.crt.
Du borde nu hitta två nya filer - "/etc/easy-rsa/pki/issued/Server1.crt" och "/etc/easy-rsa/pki/issued/Client1.crt" - som du överför till deras respektive maskiner (ses i nästa avsnitt i denna artikel). Du kan radera eventuella .req-filer som finns kvar.
Passerar längs .CRT-filerna
Nu är de signerade certifikaten (varje .crt) redo att fungera för sina ägare. Flytta servern filen till sin OpenVPN plats och skapa en ny katalog för klientcertifikaten:
sudo mv /etc/easy-rsa/pki/issued/Server1.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/Server1.crt sudo mkdir / etc / easy-rsa / pki / signerad sudo mv /etc/easy-rsa/pki/issued/Client1.crt / etc / easy-rsa / pki / signerat /
Att skapa mappen "... pki / signed /" här ger dig en märkt plats för att placera flera klientcertifikat.
Delad server och klientfiler
Nu borde du ha fem filer i din "/ etc / openvpn / server /" -katalog: ca.crt, dh.pem, Server1.crt, ServerName.key och ta.key.
Du behöver två av samma filer i din OpenVPN-klientmapp på klientens maskin. Kopiera dem över med hjälp av scp
eller en flashdisk efter behov. Kopiera både "/etc/openvpn/server/ca.crt" och "/etc/openvpn/server/ta.key" till din klients "/ etc / openvpn / client /."
Se till att kopiera ditt kundcertifikat och nyckeln till samma plats. Kopiera "/etc/easy-rsa/pki/signed/Client1.crt" och "/etc/easy-rsa/pki/private/ClientName.key" till din klients "/ etc / openvpn / client /." Upprepa denna process för eventuella ytterligare klienter som du kanske har skapat.
För någon klient bör du nu ha fyra filer i "/ etc / openvpn / client:" Client1.crt, ClientName.key, ca.crt och ta.key.
Server- och klientkonfigurationsfiler
Ditt sista steg innan du startar VPN är att redigera konfigurationsfiler för servern och klienten. Hitta först "default server.conf" och "client.conf" -filerna. De kommer sannolikt att vara på en av dessa platser:
- ”/ usr / share / OpenVPN / examples”
- "/ Usr / share / doc / openvpn / exempel / sample-config-files /" (Ubuntu configs finns här)
Obs! På Ubuntu måste du packa upp filen "server.conf.gz". Använd gunzip -d ./server.conf.gz
att hämta server.conf-filen från det komprimerade paketet.
Kopiera varje config-fil till sin respektive "/ etc / openvpn / server /" och "/ etc / openvpn / client /" -katalog.
I server.conf gör du följande ändringar. Se till att namnen och platserna på din ca.crt, Server1.crt, ServerName.key och dh.pem listas i din config-fil. Du kan behöva använda hela banor - som en rad som läser "cert /etc/openvpn/server/Server1.crt."
Ändra tls-auth...
-linjen för att läsa tls-crypt ta.key
. Återigen kan en full väg vara nödvändig.
Uncomment (ta bort ";") från "användare ingen" och "grupp ingen" linjer.
För din klient kommer du att göra liknande förändringar. Efter att du har konfigurerat filen, reflektera namnen och platserna på din ca.crt, Client1.crt, ClientName.key och ta.key (med samma drag från tls-auth...
till tls-crypt...
) infoga namnet eller IP-adressen och porten på din server.
Dags att ansluta
Nu kan du starta din server och klient. Det här är en enkel sak om allt ovan gick som planerat.
Starta servern med:
openvpn /etc/openvpn/server/server.conf
och klienten med:
openvpn /etc/openvpn/client/client.conf
Den framgångsrika skapandet av en VPN kommer att visa klientens utgångsavläsning "Initialization Sequence Completed" i slutet av dess utdata. Du hittar också en ny typ av anslutning i dina tillgängliga nätverksgränssnitt.
Denna skärmdump visar "tun0" -gränssnittet. Det är vad OpenVPN-servern gjorde. Du kan se adressen som 10.8.0.1 och pinga den adressen från klienten för att verifiera en lyckad anslutning.
Routing Internettrafik via servern
Vid denna tidpunkt kommer du förmodligen vilja komma åt Internet via din server från din fjärrklient. För att göra detta måste du först ändra din serverkonfigurationsfil. Lägg till raden push 'redirect-gateway def1
till din push 'redirect-gateway def1
.
echo "push \" omdirigering-gateway def1 \ "" | sudo tee -a /etc/openvpn/server/server.conf
Du måste också berätta för din server att routerns Internettrafikförfrågningar ska ordnas korrekt. Detta kommando kommer att ändra dina Iptables-paketfiltreringsregler:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Om du inte har ändrat linjen "server 10.8.0.0 255.255.255.0" i din server.conf-fil, ska IP-adressen i det här kommandot fungera. Du måste byta "eth0" för att matcha din servers Ethernet-gränssnitt. Du kan se från tidigare skärmdumpar att min maskin använder "enp19s0".
Därefter kan du trycka DNS-inställningar på klienten. Alla adresser som klienten kan nå kan skjutas. Du kan använda detta kommando som utgångspunkt:
echo "push \" dhcp-alternativ DNS 10.8.0.1 \ "" | sudo tee -a /etc/openvpn/server/server.conf
Slutligen kan du aktivera paketet vidarebefordran på servern enligt följande:
eko 1 | sudo tee / proc / sys / net / ipv4 / ip_forward
Du ska nu kunna använda din klient för att komma åt Internet via VPN.
Slutsats
Jag vet att det här har varit en lång väg. Förhoppningsvis har du funnit framgång med att skapa en VPN och ansluta till Internet på ett säkert sätt.
Om inget annat kommer det att ha varit en bra lärande för vad som krävs för att skapa en säker digital tunnel. Tack för att du kom med mig till slutet.