Hero Image

Open VPN

Inledning

Vill du surfa säkert på internet från din smartphone eller bärbara dator när du är ansluten till ett opålitligt nätverk, till exempel ett Wi-Fi-nätverk på ett hotell eller ett kafé? Med ett virtuellt privat nätverk (VPN) kan du ansluta till opålitliga nätverk på ett privat och säkert sätt, precis som om du vore ansluten till ett privat nätverk. Trafiken skickas via VPN-servern och fortsätter sedan sin väg till destinationen.

I kombination med HTTPS-anslutningar gör den här konfigurationen att du kan säkra dina inloggningar och transaktioner via det trådlösa nätverket. Du kan kringgå geografiska begränsningar och censur samt skydda din plats och all okrypterad HTTP-trafik från det opålitliga nätverket.

OpenVPN är en fullfjädrad VPN-lösning med öppen källkod som bygger på Secure Socket Layer (SSL) och stödjer ett brett spektrum av konfigurationer. I den här handledningen kommer du att installera en OpenVPN-server på en Debian 10-server och sedan konfigurera åtkomst till den från Windows, macOS, iOS och/eller Android. Den här handledningen beskriver installations- och konfigurationsstegen så enkelt som möjligt för var och en av dessa inställningar.

Förutsättningar

För att kunna följa den här handledningen behöver du tillgång till en Debian 10-server där du ska köra din OpenVPN-tjänst. Du måste konfigurera en användare som inte är root och som har sudo-behörighet innan du påbörjar den här handledningen. Du kan följa vår guide för initial serverkonfiguration i Debian 10 för att skapa en användare med lämpliga behörigheter. I den länkade guiden konfigureras även en brandvägg, vilket förutsätts vara på plats under hela denna guide.

Dessutom behöver du en separat dator som ska fungera som din certifikatutfärdare (CA). Även om det tekniskt sett är möjligt att använda din OpenVPN-server eller din lokala dator som CA, rekommenderas detta inte eftersom det utsätter ditt VPN för vissa säkerhetsrisker. Enligt den officiella OpenVPN-dokumentationen bör du placera din CA på en fristående maskin som är avsedd för att importera och signera certifikatförfrågningar. Av denna anledning utgår denna guide från att din CA finns på en separat Debian 10-server som även har en icke-root-användare med sudo-behörighet och en grundläggande brandvägg.

Observera att om du inaktiverar lösenordsautentisering när du konfigurerar dessa servrar kan du stöta på problem när du senare i den här guiden ska överföra filer mellan dem. För att lösa detta problem kan du återaktivera lösenordsautentisering på varje server. Alternativt kan du generera ett SSH-nyckelpar för varje server och sedan lägga till OpenVPN-serverns offentliga SSH-nyckel i CA-maskinens authorized_keys-fil och vice versa. Se Hur man konfigurerar SSH-nycklar på Debian 11 för instruktioner om hur du genomför någon av dessa lösningar.

När du har uppfyllt dessa förutsättningar kan du gå vidare till steg 1 i den här handledningen.

Installera OpenVPN och EasyRSA

Börja med att uppdatera paketindexet för din VPN-server och installera OpenVPN. OpenVPN finns i Debians standardrepositorier, så du kan använda apt för installationen:

sudo apt update
sudo apt install openvpn

OpenVPN är ett TLS/SSL-VPN. Det innebär att det använder certifikat för att kryptera trafiken mellan servern och klienterna. För att utfärda betrodda certifikat ska du konfigurera din egen enkla certifikatutfärdare (CA). För att göra detta laddar vi ner den senaste versionen av EasyRSA, som vi kommer att använda för att bygga upp vår CA:s infrastruktur för publika nycklar (PKI), från projektets officiella GitHub-repository.

Som nämnts i förutsättningarna kommer vi att installera certifikatutfärdaren (CA) på en fristående server. Anledningen till detta tillvägagångssätt är att om en angripare skulle lyckas ta sig in på din server skulle denne kunna få tillgång till din CA:s privata nyckel och använda den för att signera nya certifikat, vilket skulle ge angriparen tillgång till ditt VPN. Att hantera CA:n från en fristående maskin bidrar därför till att förhindra att obehöriga användare får åtkomst till ditt VPN. Observera också att det rekommenderas att du håller CA-servern avstängd när den inte används för att signera nycklar, som en ytterligare försiktighetsåtgärd.

mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Konfigurera EasyRSA-variablerna och skapa certifikatutfärdaren

EasyRSA levereras med en konfigurationsfil som du kan redigera för att ange ett antal variabler för din certifikatutfärdare.

Gå till katalogen EasyRSA på din CA-dator:

cd ~/easy-rsa

I den här katalogen finns en fil som heter vars.example. Gör en kopia av den här filen och döp kopian till vars utan filändelse:

cp vars.example vars

Öppna den här nya filen i det textredigeringsprogram du föredrar:

nano vars

Leta reda på inställningarna som anger standardvärden för fälten i nya certifikat. Det ser ungefär ut så här:

vim ~/easy-rsa/vars

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "California"
set_var EASYRSA_REQ_CITY       "San Francisco"
set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL      "me@example.net"
set_var EASYRSA_REQ_OU         "My Organizational Unit"

När du är klar ska du spara och stänga filen.

I mappen EasyRSA finns ett skript som heter easyrsa, vilket används för att utföra olika uppgifter i samband med uppbyggnad och hantering av certifikatutfärdaren. Kör detta skript med alternativet init-pki för att starta infrastrukturen för publika nycklar på certifikatutfärdarens server:

./easyrsa init-pki

Resultat:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: ~/easy-rsa/pki

Därefter kör du skriptet easyrsa igen och anger alternativet build-ca.

Detta kommer att skapa certifikatutfärdaren (CA) och generera två viktiga filer – ca.crt och ca.key – som utgör den offentliga och den privata delen av ett SSL-certifikat.

ca.crt är certifikatutfärdarens (CA) offentliga certifikatfil, som i OpenVPN-sammanhang används av både servern och klienten för att bekräfta för varandra att de ingår i samma förtroendenätverk och inte är någon som utför en man-in-the-middle-attack. Av denna anledning behöver din server och alla dina klienter en kopia av filen ca.crt. ca.key är den privata nyckeln som CA-maskinen använder för att signera nycklar och certifikat för servrar och klienter. Om en angripare får tillgång till din CA och därmed din ca.key-fil kommer denne att kunna signera certifikatförfrågningar och få tillgång till ditt VPN, vilket äventyrar säkerheten. Därför bör din ca.key-fil endast finnas på din CA-dator och, som en extra säkerhetsåtgärd, bör din CA-dator helst hållas offline när den inte signerar certifikatförfrågningar. Om du inte vill bli ombedd att ange ett lösenord varje gång du interagerar med din CA kan du köra kommandot build-ca med alternativet nopass, så här:

./easyrsa build-ca nopass

I utdata kommer du att ombes bekräfta det allmänna namnet på din certifikatutfärdare:

Resultat:

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
The common name is the name used to refer to this machine in the context of
the certificate authority.
You can enter any string of characters for the CA’s common name but, for
simplicity’s sake, press ENTER to accept the default name.

Nu är ditt CA-certifikat på plats och klart att börja signera certifikatansökningar.

Skapa servercertifikat, nyckel och krypteringsfiler

Nu när du har en certifikatutfärdare (CA) som är klar att användas kan du generera en privat nyckel och en certifikatbegäran från din server och sedan skicka begäran till din CA för signering, varvid det nödvändiga certifikatet skapas. Du kan också skapa ytterligare filer som används under krypteringsprocessen.

Börja med att gå till EasyRSA-katalogen på din OpenVPN-server:

cd easy-rsa/

Kör sedan skriptet easyrsa med alternativet init-pki. Även om du redan har kört det här kommandot på CA-datorn är det nödvändigt att köra det här, eftersom din server och CA kommer att ha separata PKI-kataloger:

./easyrsa init-pki

Kör sedan easyrsa-skriptet igen, den här gången med alternativet gen-req följt av ett allmännamn för maskinen. Även här kan du välja vad du vill, men det kan vara bra att välja något beskrivande. I den här handledningen kommer OpenVPN-serverns allmännamn helt enkelt att vara ”server”. Se till att även inkludera alternativet nopass. Om du inte gör det kommer begäranfilen att lösenordsskyddas, vilket kan leda till behörighetsproblem senare:

Obs! Om du här väljer ett annat namn än ”server” måste du anpassa vissa av anvisningarna nedan. När du till exempel kopierar de genererade filerna till katalogen /etc/openvpn måste du ersätta namnen med de korrekta. Du måste också senare ändra filen /etc/openvpn/server.conf så att den pekar på de korrekta .crt- och .key-filerna.

./easyrsa gen-req server nopass

Detta skapar en privat nyckel för servern och en certifikatbegäran med namnet server.req. Kopiera serverns nyckel till katalogen /etc/openvpn/:

sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

Överför filen server.req till din CA-dator med hjälp av en säker metod (till exempel SCP, som i vårt exempel nedan):

scp ~/easy-rsa/pki/reqs/server.req username@your_CA_ip:/tmp

Gå sedan till EasyRSA-katalogen på din CA-dator:

cd easy-rsa/

Använd skriptet easyrsa igen och importera filen server.req genom att ange filvägen tillsammans med dess vanliga namn:

./easyrsa import-req /tmp/server.req server

Underteckna sedan begäran genom att köra easyrsa-skriptet med alternativet sign-req, följt av begäranstypen och det allmänna namnet. Begäranstypen kan vara antingen client eller server, så se till att använda begäranstypen server för OpenVPN-serverns certifikatbegäran:

./easyrsa sign-req server server

I utdata kommer du att ombes att bekräfta att begäran kommer från en betrodd källa. Skriv ”yes” och tryck sedan på ENTER för att bekräfta detta:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 1080 days:

subject=
    commonName                = server

Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes

Om du har krypterat din CA-nyckel kommer du att bli ombedd att ange ditt lösenord nu.

Överför därefter det signerade certifikatet tillbaka till din VPN-server med hjälp av en säker metod:

scp pki/issued/server.crt username@your_server_ip:/tmp

Innan du loggar ut från din CA-dator ska du även överföra filen ca.crt till din server:

scp pki/ca.crt username@your_server_ip:/tmp

Logga sedan in på din OpenVPN-server igen och kopiera filerna server.crt och ca.crt till katalogen /etc/openvpn/:

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Gå sedan till din EasyRSA-katalog:

cd easy-rsa/

Skapa sedan en stark Diffie-Hellman-nyckel som ska användas vid nyckelutbytet genom att skriva:

./easyrsa gen-dh

Det kan ta några minuter. När processen är klar ska du skapa en HMAC-signatur för att stärka serverns funktioner för TLS-integritetsverifiering:

sudo openvpn --genkey secret ta.key

När kommandot har körts klart kopierar du de två nya filerna till katalogen /etc/openvpn/:

sudo cp ~/easy-rsa/ta.key /etc/openvpn/
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

Nu har alla certifikat- och nyckelfiler som din server behöver genererats. Du är nu redo att skapa de certifikat och nycklar som din klientdator kommer att använda för att ansluta till din OpenVPN-server.

Skapa ett klientcertifikat och ett nyckelpar

Även om du kan skapa en privat nyckel och en certifikatbegäran på din klientdator och sedan skicka den till certifikatutfärdaren för signering, beskriver den här guiden en metod för att skapa certifikatbegäran på servern. Fördelen med detta är att vi kan skapa ett skript som automatiskt genererar klientkonfigurationsfiler som innehåller alla nödvändiga nycklar och certifikat. På så sätt slipper du överföra nycklar, certifikat och konfigurationsfiler till klienterna, vilket förenklar processen för att ansluta till VPN.

Vi kommer att generera ett enda par bestående av en klientnyckel och ett certifikat för den här guiden. Om du har fler än en klient kan du upprepa den här processen för var och en av dem. Observera dock att du måste ange ett unikt namn till skriptet för varje klient. I den här handledningen kallas det första certifikat-/nyckelparet för ”client1”.

Börja med att skapa en katalogstruktur i din hemkatalog för att lagra klientcertifikatet och nyckelfilerna:

mkdir -p ~/client-configs/keys

Eftersom du kommer att lagra dina kunders certifikat/nyckelpar och konfigurationsfiler i den här katalogen bör du redan nu begränsa åtkomstbehörigheterna till den som en säkerhetsåtgärd:

chmod -R 700 ~/client-configs

Gå sedan tillbaka till EasyRSA-katalogen och kör skriptet easyrsa med alternativen gen-req och nopass, tillsammans med klientens allmänna namn:

cd ~/easy-rsa/
./easyrsa gen-req client1 nopass

Tryck på ENTER för att bekräfta det allmänna namnet. Kopiera sedan filen client1.key till katalogen /client-configs/keys/ som du skapade tidigare:

cp pki/private/client1.key ~/client-configs/keys/

Överför sedan filen client1.req till din CA-dator på ett säkert sätt:

scp pki/reqs/client1.req username@your_CA_ip:/tmp

Logga in på din CA-dator, gå till katalogen EasyRSA och importera certifikatbegäran:

ssh username@your_CA_ip
cd easy-rsa/
./easyrsa import-req /tmp/client1.req client1

Underteckna sedan begäran på samma sätt som du gjorde för servern i föregående steg. Se dock till att ange typen av klientbegäran den här gången:

./easyrsa sign-req client client1

När du blir ombedd, skriv in ”yes” för att bekräfta att du avser att signera certifikatbegäran och att den kommer från en betrodd källa:

Resultat:

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Om du har krypterat din CA-nyckel kommer du återigen att uppmanas att ange ditt lösenord här.

Detta skapar en fil med ett klientcertifikat som heter client1.crt. Överför sedan denna fil tillbaka till servern:

scp pki/issued/client1.crt username@your_server_ip:/tmp

Anslut via SSH till din OpenVPN-server igen och kopiera klientcertifikatet till katalogen /client-configs/keys/:

cp /tmp/client1.crt ~/client-configs/keys/

Kopiera sedan även filerna ca.crt och ta.key till katalogen /client-configs/keys/:

sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Nu har alla certifikat och nycklar för din server och din klient genererats och lagrats i rätt kataloger på din server. Det finns fortfarande några åtgärder som måste vidtas med dessa filer, men det kommer vi till i ett senare steg. För tillfället kan du gå vidare med att konfigurera OpenVPN på din server.

Konfigurera OpenVPN-tjänsten

Nu när både klientens och serverns certifikat och nycklar har genererats kan du börja konfigurera OpenVPN-tjänsten så att den använder dessa autentiseringsuppgifter.

Börja med att kopiera en exempelkonfigurationsfil för OpenVPN till konfigurationskatalogen och packa sedan upp den för att använda den som utgångspunkt för din installation:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf \
/etc/openvpn/

Öppna serverkonfigurationsfilen i den textredigerare du föredrar:

sudo nano /etc/openvpn/server.conf

Leta reda på avsnittet HMAC genom att söka efter direktivet tls-auth. Denna rad bör redan vara avkommenterad, men om så inte är fallet tar du bort ”;” för att avkommentera den.

# /etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret

Leta sedan upp avsnittet om krypteringsalgoritmer genom att söka efter de kommenterade raderna med krypteringsalgoritmer. Krypteringsalgoritmen AES-256-CBC erbjuder en god krypteringsnivå och har bra stöd. Även här bör raden redan vara avkommenterad, men om så inte är fallet tar du bara bort ”;” som står framför den:

# /etc/openvpn/server.conf
cipher AES-256-GCM
auth SHA256

Leta sedan upp raden som innehåller ett ”dh”-direktiv som definierar Diffie-Hellman-parametrarna. På grund av vissa ändringar som nyligen gjorts i EasyRSA kan filnamnet för Diffie-Hellman-nyckeln skilja sig från det som anges i exemplet på serverkonfigurationsfilen. Ändra vid behov filnamnet som anges här genom att ta bort siffran 2048 så att det stämmer överens med den nyckel du genererade i föregående steg:

# /etc/openvpn/server.conf
dh dh.pem

Slutligen letar du upp inställningarna för användare och grupper och tar bort ”;” i början av varje rad för att ta bort kommentarerna från dessa rader:

# /etc/openvpn/server.conf
user nobody
group nogroup

De ändringar du hittills har gjort i exempelfilen server.conf är nödvändiga för att OpenVPN ska fungera. Ändringarna som beskrivs nedan är valfria, men även de behövs i många vanliga användningsfall.

(Valfritt) Skicka DNS-ändringar för att omdirigera all trafik via VPN-anslutningen. Inställningarna ovan skapar en VPN-anslutning mellan de två datorerna, men tvingar inte alla anslutningar att använda tunneln. Om du vill använda VPN-anslutningen för att dirigera all din trafik bör du troligen skicka DNS-inställningarna till klientdatorerna.

Det finns några direktiv i filen server.conf som du måste ändra för att aktivera den här funktionen. Leta reda på avsnittet ”redirect-gateway” och ta bort semikolonet ”;” i början av raden ”redirect-gateway” för att ta bort kommentaren:

/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"

Strax nedanför detta hittar du avsnittet dhcp-option. Ta återigen bort ”;” framför båda raderna för att ta bort kommentartecknen:

# /etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Detta kommer att hjälpa kunderna att ändra sina DNS-inställningar så att VPN-tunneln används som standardgateway.

(Valfritt) Ange andra autentiseringsuppgifter än standardvärdena Om du valde ett annat namn när du körde kommandot ./easyrsa gen-req i steg 3 ska du ändra raderna för certifikatet och nyckeln så att de pekar på rätt .crt- och .key-filer. Om du använde standardnamnet ”server” är detta redan korrekt inställt:

# /etc/openvpn/server.conf
cert server.crt
key server.key

När du är klar ska du spara och stänga filen.

När du har gått igenom och gjort de ändringar i serverns OpenVPN-konfiguration som krävs för just ditt användningsfall kan du börja göra vissa ändringar i serverns nätverksinställningar.

Justera serverns nätverkskonfiguration

Det finns vissa aspekter av serverns nätverkskonfiguration som måste justeras för att OpenVPN ska kunna dirigera trafiken korrekt via VPN. Den första av dessa är IP-vidarebefordran, en metod för att bestämma vart IP-trafiken ska dirigeras. Detta är avgörande för den VPN-funktionalitet som din server ska tillhandahålla.

Ändra serverns standardinställning för IP-vidarebefordran genom att redigera filen /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Inuti filen letar du efter den kommenterade raden som ställer in net.ipv4.ip_forward. Ta bort tecknet ”#” i början av raden för att avkommentera denna inställning:

# /etc/sysctl.conf
net.ipv4.ip_forward=1

Spara och stäng filen när du är klar.

För att läsa in filen och justera värdena för den aktuella sessionen, skriv:

sudo sysctl -p

net.ipv4.ip_forward = 1

Om du har följt guiden för den inledande serverkonfigurationen för Debian 10 som anges i förutsättningarna bör du ha en UFW-brandvägg installerad. Oavsett om du använder brandväggen för att blockera oönskad trafik (vilket du nästan alltid bör göra) behöver du i den här guiden en brandvägg för att styra en del av den trafik som kommer in till servern. Vissa av brandväggsreglerna måste ändras för att möjliggöra masquerading, ett iptables-koncept som tillhandahåller dynamisk nätverksadressöversättning (NAT) i realtid för att korrekt vidarebefordra klientanslutningar.

Innan du öppnar brandväggens konfigurationsfil för att lägga till reglerna för IP-maskering måste du först ta reda på vilket gränssnitt som är det publika på din dator. För att göra detta skriver du:

ip route | grep default

Ditt offentliga gränssnitt är den sträng som finns i utdata från detta kommando och som följer efter ordet ”dev”. I det här exemplet visar resultatet gränssnittet med namnet eth0, vilket är markerat nedan:

Utdata

default via 203.0.113.1 dev eth0 proto static

När du har kopplat gränssnittet till din standardrutt öppnar du filen /etc/ufw/before.rules för att lägga till den relevanta konfigurationen:

sudo nano /etc/ufw/before.rules

UFW-regler läggs vanligtvis till med kommandot ufw. Reglerna i filen before.rules läses dock in och tillämpas innan de vanliga UFW-reglerna laddas. Lägg till de markerade raderna nedan högst upp i filen. Detta ställer in standardpolicyn för kedjan POSTROUTING i nat-tabellen och maskerar all trafik som kommer från VPN. Kom ihåg att ersätta eth0 i raden -A POSTROUTING nedan med det gränssnitt du hittade i kommandot ovan:

# /etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Spara och stäng filen när du är klar.

Därefter måste du ställa in UFW så att även vidarebefordrade paket tillåts som standard. För att göra detta öppnar du filen /etc/default/ufw:

sudo nano /etc/default/ufw

Leta reda på direktivet DEFAULT_FORWARD_POLICY i filen och ändra värdet från DROP till ACCEPT:

# /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

Spara och stäng filen när du är klar.

Justera sedan brandväggen så att trafik till OpenVPN tillåts. Om du inte har ändrat porten och protokollet i filen /etc/openvpn/server.conf måste du öppna UDP-trafik till port 1194. Om du har ändrat porten och/eller protokollet ska du ange de värden du valt här.

Om du inte lade till SSH-porten när du gick igenom handledningen för förberedelserna, lägg till den även här:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

När du har lagt till dessa regler ska du inaktivera och sedan återaktivera UFW för att starta om det och ladda in ändringarna från alla filer som du har ändrat:

sudo ufw disable
sudo ufw enable

Din server är nu konfigurerad för att hantera OpenVPN-trafik på rätt sätt.

Starta och aktivera OpenVPN-tjänsten

Nu är du äntligen redo att starta OpenVPN-tjänsten på din server. Detta görs med hjälp av systemd-verktyget systemctl.

Starta OpenVPN-servern genom att ange namnet på din konfigurationsfil som en instansvariabel efter namnet på systemd-enhetsfilen. Konfigurationsfilen för din server heter /etc/openvpn/server.conf, så lägg till @server i slutet av din enhetsfil när du anropar den:

sudo systemctl start openvpn@server

Kontrollera noga att tjänsten har startats korrekt genom att skriva:

sudo systemctl status openvpn@server
# and
ip addr show tun0

Detta visar ett konfigurerat gränssnitt:

Resultat:

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

När du har startat tjänsten ska du aktivera den så att den startar automatiskt vid uppstart:

sudo systemctl enable openvpn@server

Din OpenVPN-tjänst är nu igång. Innan du kan börja använda den måste du dock först skapa en konfigurationsfil för klientdatorn. I den här handledningen har vi redan gått igenom hur man skapar certifikat- och nyckelpar för klienter, och i nästa steg kommer vi att visa hur man skapar en infrastruktur som enkelt genererar konfigurationsfiler för klienter.

Upprättande av infrastrukturen för klientkonfiguration

Att skapa konfigurationsfiler för OpenVPN-klienter kan vara ganska komplicerat, eftersom varje klient måste ha sin egen konfiguration och alla måste stämma överens med inställningarna i serverns konfigurationsfil. I stället för att skriva en enda konfigurationsfil som endast kan användas på en klient beskriver detta steg en process för att bygga upp en infrastruktur för klientkonfiguration som du kan använda för att generera konfigurationsfiler direkt när det behövs. Du ska först skapa en ”bas”-konfigurationsfil och sedan bygga ett skript som gör det möjligt för dig att generera unika klientkonfigurationsfiler, certifikat och nycklar efter behov.

Börja med att skapa en ny katalog där du ska spara klientens konfigurationsfiler, inom katalogen client-configs som du skapade tidigare:

mkdir -p ~/client-configs/files

Kopiera sedan en exempelkonfigurationsfil för klienten till katalogen client-configs för att använda den som utgångspunkt för din konfiguration:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf \
~/client-configs/base.conf

Öppna den här nya filen i din textredigerare:

nano ~/client-configs/base.conf

Inuti filen letar du upp direktivet ”remote”. Detta anger för klienten adressen till din OpenVPN-server – den offentliga IP-adressen för din OpenVPN-server. Om du har valt att ändra den port som OpenVPN-servern lyssnar på måste du också ändra 1194 till den port du har valt:

~/client-configs/base.conf

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194

Se till att protokollet stämmer överens med det värde du använder i serverkonfigurationen:

# ~/client-configs/base.conf
proto udp4

Ta sedan bort kommentartecknet ”;” i början av varje rad för att aktivera användar- och gruppdirektiven:

# ~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Leta reda på de direktiv som anger ca, cert och key. Kommentera ut dessa direktiv, eftersom du strax kommer att lägga till certifikaten och nycklarna direkt i filen:

# ~/client-configs/base.conf
# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Gör på samma sätt och kommentera ut direktivet tls-auth, eftersom du kommer att lägga till ta.key direkt i klientens konfigurationsfil:

# ~/client-configs/base.conf
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Kopiera de krypterings- och autentiseringsinställningar som du har angett i filen /etc/openvpn/server.conf:

# ~/client-configs/base.conf
cipher AES-256-GCM
auth SHA256

Lägg sedan till direktivet för nyckelriktning någonstans i filen. Du måste ställa in detta på ”1” för att VPN-anslutningen ska fungera korrekt på klientdatorn:

# ~/client-configs/base.conf
key-direction 1

Avslutningsvis lägger du till några rader som är kommenterade. Även om du kan inkludera dessa direktiv i varje klientkonfigurationsfil behöver du endast aktivera dem för Linux-klienter som levereras med en fil vid namn /etc/openvpn/update-resolv-conf. Detta skript använder verktyget resolvconf för att uppdatera DNS-informationen för Linux-klienter.

# ~/client-configs/base.conf
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Om din klient kör Linux och har en fil med namnet /etc/openvpn/update-resolv-conf ska du ta bort kommentartecknen från dessa rader i klientens konfigurationsfil efter att den har genererats.

Spara och stäng filen när du är klar.

Skapa sedan ett enkelt skript som sammanställer din baskonfiguration med relevanta certifikat-, nyckel- och krypteringsfiler och placerar sedan den genererade konfigurationen i katalogen ~/client-configs/files. Öppna en ny fil med namnet make_config.sh i katalogen ~/client-configs:

nano ~/client-configs/make_config.sh

Lägg till följande innehåll inuti och se till att byta ut ”emir” mot namnet på ditt servers icke-root-användarkonto:

# ~/client-configs/make_config.sh
#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/username/client-configs/keys
OUTPUT_DIR=/home/username/client-configs/files
BASE_CONFIG=/home/username/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Spara och stäng filen när du är klar.

Innan du går vidare ska du se till att markera den här filen som körbar genom att skriva:

chmod 700 ~/client-configs/make_config.sh

Det här skriptet skapar en kopia av den base.conf-fil du har skapat, samlar in alla certifikat- och nyckelfiler som du har skapat för din klient, extraherar innehållet i dem, lägger till det i kopian av baskonfigurationsfilen och exporterar allt detta innehåll till en ny klientkonfigurationsfil. Det innebär att du inte behöver hantera klientens konfigurations-, certifikat- och nyckelfiler separat, utan att all nödvändig information lagras på ett och samma ställe. Fördelen med detta är att om du någonsin behöver lägga till en klient i framtiden kan du helt enkelt köra detta skript för att snabbt skapa konfigurationsfilen och säkerställa att all viktig information lagras på en enda, lättillgänglig plats.

Observera att varje gång du lägger till en ny klient måste du skapa nya nycklar och certifikat för den innan du kan köra det här skriptet och skapa dess konfigurationsfil. I nästa steg får du öva dig på att använda det här skriptet.

Skapa klientkonfigurationer

Om du har följt guiden har du i steg 4 skapat ett klientcertifikat och en nyckel med namnen client1.crt respektive client1.key. Du kan skapa en konfigurationsfil för dessa autentiseringsuppgifter genom att gå till katalogen ~/client-configs och köra det skript som du skapade i slutet av föregående steg:

cd ~/client-configs
sudo ./make_config.sh client1

Detta kommer att skapa en fil med namnet client1.ovpn i katalogen ~/client-configs/files:

ls ~/client-configs/files

client1.ovpn

Du måste överföra den här filen till den enhet som du tänker använda som klient. Det kan till exempel vara din lokala dator eller en mobil enhet.

Även om de exakta programmen som används för att genomföra denna överföring beror på enhetens operativsystem och dina personliga preferenser, är en pålitlig och säker metod att använda SFTP (SSH File Transfer Protocol) eller SCP (Secure Copy) i bakgrunden. På så sätt överförs dina kunders VPN-autentiseringsfiler via en krypterad anslutning.

Ladda ner OpenVPN-klientprogrammet för Windows från OpenVPN:s nedladdningssida. Välj den installationsfil som passar din version av Windows.

Obs! OpenVPN kräver administratörsbehörighet för att kunna installeras.

När du har installerat OpenVPN kopierar du .ovpn-filen till:

C:\Program Files\OpenVPN\config

När du startar OpenVPN kommer programmet automatiskt att upptäcka profilen och göra den tillgänglig.

Du måste köra OpenVPN som administratör varje gång programmet används, även från administratörskonton. För att slippa högerklicka och välja ”Kör som administratör” varje gång du använder VPN:et måste du ställa in detta i förväg från ett administratörskonto. Detta innebär också att vanliga användare måste ange administratörens lösenord för att kunna använda OpenVPN. Å andra sidan kan vanliga användare inte ansluta till servern på rätt sätt om inte OpenVPN-programmet på klienten har administratörsrättigheter, så de utökade behörigheterna är nödvändiga.

För att ställa in OpenVPN-programmet så att det alltid körs som administratör, högerklicka på genvägsikonen och välj Egenskaper. Längst ner på fliken Kompatibilitet klickar du på knappen Ändra inställningar för alla användare. I det nya fönstret markerar du rutan Kör det här programmet som administratör.

Ansluta

Varje gång du startar OpenVPN GUI kommer Windows att fråga om du vill tillåta programmet att göra ändringar på din dator. Klicka på Ja. När du startar OpenVPN-klientprogrammet placeras endast appletten i systemfältet så att du kan ansluta till och koppla bort VPN efter behov; det upprättar inte själva VPN-anslutningen.

När OpenVPN har startats inleder du en anslutning genom att öppna appletten i systemfältet och högerklicka på OpenVPN-ikonen. Då öppnas snabbmenyn. Välj ”client1” högst upp i menyn (det är din profil ”client1.ovpn”) och välj ”Anslut”.

Ett statusfönster öppnas som visar loggutskriften medan anslutningen upprättas, och ett meddelande visas när klienten är ansluten.

Koppla från VPN på samma sätt: Gå till appletten i systemfältet, högerklicka på OpenVPN-ikonen, välj klientprofilen och klicka på ”Koppla från”.

macOS

Installera macOS-klienten

Tunnelblick är en kostnadsfri OpenVPN-klient med öppen källkod för macOS. Du kan ladda ner den senaste diskavbildningen från sidan Tunnelblick Downloads. Dubbelklicka på den nedladdade .dmg-filen och följ anvisningarna för att installera programmet.

Mot slutet av installationsprocessen kommer Tunnelblick att fråga om du har några konfigurationsfiler. Svara ”Jag har konfigurationsfiler” och låt Tunnelblick slutföra installationen. Öppna ett Finder-fönster och dubbelklicka på client1.ovpn. Tunnelblick kommer då att installera klientprofilen. Administratörsbehörighet krävs.

Ansluta till macOS

Starta Tunnelblick genom att dubbelklicka på Tunnelblick-ikonen i mappen ”Program”. När Tunnelblick har startats visas en Tunnelblick-ikon i menyraden längst upp till höger på skärmen, där du kan hantera anslutningarna. Klicka på ikonen och välj sedan menyalternativet ”Anslut klient1” för att upprätta VPN-anslutningen.

Linux

Installera Linux-klienten

Om du använder Linux finns det en rad olika verktyg som du kan använda beroende på vilken distribution du har. Din skrivbordsmiljö eller fönsterhanterare kan också innehålla verktyg för anslutning.

Det mest universella sättet att ansluta är dock att helt enkelt använda OpenVPN-programvaran.

I Debian kan du installera det på samma sätt som du gjorde på servern genom att skriva:

sudo apt update
sudo apt install openvpn resolvconf
sudo reboot

Starta klienten från terminalen:

sudo openvpn --config config.ovpn

Konfigurera Linux-klienten

Kontrollera om din distribution innehåller skriptet /etc/openvpn/update-resolv-conf:

ls /etc/openvpn

update-resolv-conf

Redigera sedan den OpenVPN-klientkonfigurationsfil som du har överfört:

nano client1.ovpn

Om du har hittat en fil med namnet update-resolv-conf ska du ta bort kommentartecknen framför de tre raderna som du lade till för att justera DNS-inställningarna:

# client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Om du använder CentOS ska du ändra gruppdirektivet från ”nogroup” till ”nobody” så att det stämmer överens med de grupper som finns tillgängliga i distributionen:

# client1.ovpn
group nobody

Spara och stäng filen.

Nu kan du ansluta till VPN genom att helt enkelt ange OpenVPN-kommandot med klientens konfigurationsfil:

sudo openvpn --config client1.ovpn

Detta bör ansluta dig till ditt VPN.

iOS

Installera klienten på iOS

Sök efter och installera OpenVPN Connect, den officiella OpenVPN-klientappen för iOS, från iTunes App Store. För att överföra konfigurationen för din iOS-klient till enheten ska du ansluta den direkt till en dator.

Här beskrivs hur du genomför överföringen med iTunes. Öppna iTunes på datorn och klicka på iPhone > appar. Bläddra ner till avsnittet ”Fildelning” och klicka på OpenVPN-appen. Det tomma fönstret till höger, ”OpenVPN-dokument”, är avsett för fildelning. Dra .ovpn-filen till fönstret ”OpenVPN-dokument”.

iTunes visar att VPN-profilen är redo att laddas in på iPhone

Starta nu OpenVPN-appen på iPhone. Du får ett meddelande om att en ny profil är klar att importeras. Tryck på det gröna plustecknet för att importera den.

OpenVPN-appen för iOS visar en ny profil som är redo att importeras

Ansluta iOS

OpenVPN är nu klart att användas med den nya profilen. Starta anslutningen genom att dra knappen ”Anslut” till läget ”På”. Avsluta anslutningen genom att dra samma knapp till läget ”Av”.

Obs! VPN-knappen under ”Inställningar” kan inte användas för att ansluta till VPN. Om du försöker kommer du att få ett meddelande om att du endast kan ansluta via OpenVPN-appen.

OpenVPN-appen för iOS anslöt till VPN-nätverket

Android

Installera klienten på Android

Öppna Google Play Store. Sök efter och installera Android OpenVPN Connect, den officiella OpenVPN-klientappen för Android.

Du kan överföra .ovpn-profilen genom att ansluta Android-enheten till din dator via USB och kopiera över filen. Om du har en SD-kortläsare kan du istället ta ut enhetens SD-kort, kopiera profilen till kortet och sedan sätta tillbaka kortet i Android-enheten.

Starta OpenVPN-appen och tryck på menyn för att importera profilen.

Valet i importmenyn för OpenVPN-appen för Android

Gå sedan till den plats där profilen är sparad och välj filen. Appen visar ett meddelande om att profilen har importerats.

OpenVPN-appen för Android – välja VPN-profil att importera

Ansluta Android-klienten

För att ansluta trycker du bara på knappen ”Anslut”. Du blir då tillfrågad om du litar på OpenVPN-appen. Välj ”OK” för att starta anslutningen. För att koppla från VPN går du tillbaka till OpenVPN-appen och väljer ”Koppla från”.

OpenVPN-appen för Android är redo att ansluta till VPN-nätverket

Steg 11 – Testa din VPN-anslutning (valfritt)

Obs! Den här metoden för att testa din VPN-anslutning fungerar endast om du i steg 5 valde att dirigera all din trafik via VPN.

När allt är installerat kan du med en enkel kontroll se om allt fungerar som det ska. Öppna en webbläsare utan att ha en VPN-anslutning aktiverad och gå till DNSLeakTest.

Webbplatsen visar den IP-adress som din internetleverantör har tilldelat dig och som resten av världen ser. Om du vill kontrollera dina DNS-inställningar via samma webbplats klickar du på ”Utökat test”, så får du reda på vilka DNS-servrar du använder.

Anslut nu OpenVPN-klienten till din Droplets VPN och uppdatera webbläsaren. En helt annan IP-adress (din VPN-servers) bör nu visas, och det är så du framstår för omvärlden. Återigen kommer DNSLeakTests utökade test att kontrollera dina DNS-inställningar och bekräfta att du nu använder de DNS-resolvers som tilldelats av ditt VPN.

Återkallande av klientcertifikat

Ibland kan det hända att du behöver återkalla ett klientcertifikat för att förhindra fortsatt åtkomst till OpenVPN-servern.

För att göra detta, gå till EasyRSA-katalogen på din CA-dator:

cd easy-rsa/

Kör sedan skriptet easyrsa med alternativet revoke, följt av namnet på den klient som du vill återkalla:

./easyrsa revoke client2

Du kommer då att uppmanas att bekräfta återkallelsen genom att skriva in ”yes”:

Bekräfta att du vill återkalla certifikatet med följande ämne:

subject=
    commonName                = client2

Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

Efter att åtgärden har bekräftats kommer certifikatutfärdaren (CA) att helt återkalla klientens certifikat. Din OpenVPN-server har dock för närvarande ingen möjlighet att kontrollera om några klientcertifikat har återkallats, och klienten kommer fortfarande att ha åtkomst till VPN-nätverket. För att åtgärda detta ska du skapa en lista över återkallade certifikat (CRL) på din CA-dator:

./easyrsa gen-crl

Detta kommer att skapa en fil med namnet crl.pem. Överför filen på ett säkert sätt till din OpenVPN-server:

Kopiera den här filen till katalogen /etc/openvpn/ på din OpenVPN-server:

sudo cp /tmp/crl.pem /etc/openvpn

Öppna sedan OpenVPN-serverns konfigurationsfil:

sudo nano /etc/openvpn/server.conf

Lägg till alternativet crl-verify längst ner i filen. Detta gör att OpenVPN-servern kontrollerar den lista över återkallade certifikat som vi har skapat varje gång ett anslutningsförsök görs:

# /etc/openvpn/server.conf
crl-verify crl.pem

Spara och stäng filen.

Avsluta med att starta om OpenVPN för att tillämpa certifikatets återkallelse:

sudo systemctl restart openvpn@server

Klienten ska inte längre kunna ansluta till servern med de gamla inloggningsuppgifterna.

Gör så här för att återkalla ytterligare klienter:

Återkalla certifikatet med kommandot ./easyrsa revoke client_name

Skapa en ny CRL

Överför den nya filen crl.pem till din OpenVPN-server och kopiera den till katalogen /etc/openvpn för att skriva över den gamla listan.

Starta om OpenVPN-tjänsten.

Inaktivera klient vid uppstart sudo nano /etc/default/openvpn

AUTOSTART="none"