OpenVPN

En generell guide for oppsett av OpenVPN på linux. openSUSE i dette tilfellet. Port 1194 (UDP) må åpnes i ruteren på server siden.

Oppsett av server

Easy-RSA, kommandolinjeinterface for Public Key Infrastructure (PKI). Brukes til å lage CA (Certificate Authorities), server og klient sertifikater, og nøkkelfiler. Kombineres ofte med OpenVPN for sikkerheten.

# Installer nødvendige pakker
zypper refresh
zypper install openvpn easy-rsa

# Lag en ny mappe og mappestruktur for easy-rsa sertifikater og nøkler
mkdir -p ~/easy-rsa
cd ~/easy-rsa
easyrsa init-pki

# Generer et nytt CA sertifikat og nøkkel-par.
# Brukes til å signere alle andre server/klient sertifikater.
# nopass = ingen passord
# Genererer filene ca.crt, private/ca.key
easyrsa build-ca nopass 

# Genererer en ny CSR (certificate signing request) og 
# en privat nøkkel for serveren. Dette bruker serveren 
# for å indentifisere seg selv til klienter (server.crt i neste steg)
# Genererer filene private/server.key, reqs/server.req
easyrsa gen-req server nopass 
# Signerer CSR med CA nøkkelen for å lage sertifikatet.
# Genererer filen issued/server.crt
easyrsa sign-req server server

# Genererer Diffie-Hellman (DH) parametere.
# Kreves for SSL/TLS kommunikasjon. Sikrer sikker 
# utveksling av nøkler over en usikker kobling.
# Genererer filen dh.pem
easyrsa gen-dh

# Genererer en nøkkel for TLS autentikasjon og lagre som ta.key
openvpn --genkey secret ta.key

# Genererer et sertifikat for en klient (client1)
# Genererer filene pki/private/client1.key, 
# pki/reqs/client1.req, pki/issued/client1.crt
easyrsa gen-req client1 nopass
easyrsa sign-req client client1

Nå har vi generert alle nøkler og sertifikater vi trenger, så da kan vi kopiere de inn til openvpn installasjonen, som vanligvis er /etc/openvpn. Henter også en mal for server konfigurasjon.

cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn
cp /usr/share/doc/packages/openvpn/sample-config-files/server.conf /etc/openvpn/server.conf

Endre/legg til (hvis de ikke eksisterer) disse innstillingene i server.conf

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0
auth SHA256

IPv4 forwarding må slås på. Dette er for å tillate videresending/ruting av trafikk mellom virituelle og fysiske nettverkskort.

sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf

Legg til OpenVPN i brannmuren:

firewall-cmd --zone=public --add-service=openvpn --permanent
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload

Vi kan nå aktivere og starte openvpn serveren:

systemctl enable openvpn@server
systemctl start openvpn@server

Oppsett av klient

Last ned nyeste klient fra openvpn

Last ned ca.crt, ta.key, client1.crt, client1.key fra serveren flytt de til en ny mappe.
Opprett en ny fil i denne mappen også, kall den "client1.ovpm", og sett følgende innstillinger:

client
dev tun
proto udp
remote IP/DOMENE 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
verb 3
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1

Åpne klienten og last inn ovpn-filen.

Oppsett av klient på iPhone

Embed innholdet av filene direkte i konfigurasjonsfilen. Eksempel:

client
dev tun
proto udp
remote IP/DOMENE 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
verb 3
key-direction 1

<ca>
-----BEGIN CERTIFICATE-----
INNHOLD AV ca.crt
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
INNHOLD AV client1.crt
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
INNHOLD AV client1.key
-----END PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
INNHOLD AV ta.key
-----END OpenVPN Static key V1-----
</tls-auth>

Viktig å definere key-direction 1 før <tls-auth> blokken.

Feilsøking

Øk verbositeten i server.conf. Sjekk feilmeldinger live med:

journalctl -u openvpn@server -f