Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:linux:openvpn

OpenVPN

Mit OpenVPN von Überall ins eigene/heimische Netz. Hier als Beispiel mit FLI4L als Router.

Quellen:

Grundlagen

Dateien des Server

für den OpenVPN Server werden folgende Dateien unterhalb von '/etc/openvpn/' benötigt:

  • ca.crt - das sog. Wurzel-Zertifikat aka. Root CA certificate (Certificate Authority)
  • dh2048.pem - Diffie Hellman Parameter
  • server.crt - Server Zertifikat
  • server.key - Server Schlüssel
  • server.conf - enthält die (Basis-) Konfiguration zum Betrieb des OpenVPN Servers
  • tsl-auth.key - TSL Schlüssel

''server.conf''

Die Datei 'server.conf' enthält alle notwendigen Konfigurationsparameter zum Betrieb des Servers. Wesentlich sind hier z.B. die Pfandangaben und Dateinamen der o.a. Dateien.

server.conf
port 9711
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 192.168.200.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.200.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DOMAIN wg"
push "dhcp-option DNS 192.168.100.1"
client-to-client
keepalive 10 120
tls-auth /etc/openvpn/tls-auth.key 0
cipher AES-256-CBC
#comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
verb 2
ping-timer-rem
verb 2
resolv-retry infinite
writepid /var/run/openvpn/server/pid
persist-local-ip
mlock
reneg-sec 3600
status /var/run/openvpn/server/status 15
status-version 1
management 127.0.0.1 0
management-log-cache 100
management-writeport /var/run/openvpn/server/mport
script-security 2
setenv ovpn_ipv6 no
fast-io
down-pre
float
mssfix 1450
tun-mtu 1450
mtu-disc yes

Dateien des Client

  • client.ovpn - Konfigurationsdatei je Client, enthält alle notwendigen Parameter

Die Konfigurationsdatei client.ovpn besteht, als reine Textdatei, aus folgenden Blöcken:

  • OpenVPN Client Konfigurationsparameter
  • ca.crt - Root CA Zertifikat
  • client1.crt - Client1 Zertifikat
  • client1.key - Client1 Schlüssel
  • tslauth.key - TSL Schlüssel

Erstellung der Konfiguration

Server

Zertifikate und Schlüssel für den Server erzeugen:
Vorbereitung:

sudo apt-get install easy-rsa

Arbeitsverzeichnis für die Erstellung der Schlüssel und Zertifikate erstellen:

make-cadir My_Certificate_Authority && cd My_Certificate_Authority

Parameter des Zertifikatsausstellers bearbeiten:

mcedit vars
...
set_var EASYRSA_REQ_COUNTRY	"DE"
set_var EASYRSA_REQ_PROVINCE	"NIEDERSACHSEN"
set_var EASYRSA_REQ_CITY	"Hildesheim"
set_var EASYRSA_REQ_ORG	"Familie von Thuelen"
set_var EASYRSA_REQ_EMAIL	"Christoph@von-Thuelen.de"
set_var EASYRSA_REQ_OU		"Familie"
...
set_var EASYRSA_CA_EXPIRE	7300
...
set_var EASYRSA_CERT_EXPIRE	5400
...
#EOF

PKI Initialisieren (Unterverzeichnisse werden erstellt):

/usr/share/easy-rsa/easyrsaeasyrsa init-pki

„.rnd“-File generieren:

openssl rand -writerand ./pki/.rnd

CA Zertifikat erstellen:

/usr/share/easy-rsa/easyrsa build-ca nopass
# ohne "nopass" --> Password: ZFxhJYWCGj2QUhMQ
# mit "nopass" --> keine weitere Passwortabfrage
# ... Common Name (eg: your user, host, or server name) [Easy-RSA CA]: <empty>
# --> pki/private/ca.key
# --> pki/ca.crt wird  generiert

Server Schlüssel erstellen:

/usr/share/easy-rsa/easyrsa gen-req server nopass
# --> pki/reqs/server.req
# --> pki/private/server.key

Server Zertifikat erstellen:

/usr/share/easy-rsa/easyrsa sign-req server server
# --> pki/issued/server.crt

Diffie-Hellman Parameter erstellen:

/usr/share/easy-rsa/easyrsa gen-dh
# --> pki/dh.pem
cp pki/dh.pem /pki/dh2048.pem

TSL-Auth Schlüssel erstellen:

openvpn --genkey --secret tsl-auth.key
# --> tsl-auth.key

Client

Zertifikate und Schlüssel für den Client erzeugen:

sudo su
make-cadir OpenVPN_Clients && cd OpenVPN_Clients

Client Schlüssel erstellen:

/usr/share/easy-rsa/easyrsa gen-req client1 nopass
# --> pki/reqs/client1.req
# --> pki/private/client1.key

Client Zertifikat erstellen:

/usr/share/easy-rsa/easyrsa sign-req client client1
# --> pki/issued/client1.crt

OpenVPN Client Konfigurationsdatei „*.ovpn“ erstellen:

mkdir ../client1
cp pki/ca.crt ../client1/
cp pki/issued/client1.crt ../client1/
cp pki/private/client1.key ../client1/
cp ../template_client_config.ovpn ../client1/client1.ovpn
cp tsl-auth.key ../client1/
cd ..
./make_openvpn_client_config.sh client1
template_client_config.ovpn
client
dev tun
proto udp
remote <FQDN if OpenVPN-Server> <port>
resolv-retry infinite
nobind
persist-key
persist-tun
key-direction 1
remote-cert-tls server
cipher AES-256-CBC
data-ciphers AES-256-CBC
verb 3
make_openvpn_client_config.sh
#!/bin/bash
 
# First argument: Client identifier
CONFIG_NAME=$1
BASE_CONFIG=template_client_config.ovpn
OUTPUT=$CONFIG_NAME.ovpn
 
if [ -z "$CONFIG_NAME" ]; then
  echo "\$CONFIG_NAME is empty"
  echo "Please specify client config name. --> exit!"
  exit 1
else
  echo "Make OpenVPN client config for: $CONFIG_NAME"
fi
 
if [ -d $CONFIG_NAME ]; then
  echo "Generating $OUTPUT"
  cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    $CONFIG_NAME/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    $CONFIG_NAME/$CONFIG_NAME.crt \
    <(echo -e '</cert>\n<key>') \
    $CONFIG_NAME/$CONFIG_NAME.key \
    <(echo -e '</key>\n<tls-auth>') \
    $CONFIG_NAME/tls-auth.key \
    <(echo -e '</tls-auth>') \
    > $CONFIG_NAME/$CONFIG_NAME.ovpn
else
   echo "ERROR: Folder for $CONFIG_NAME not found --> exit!"
fi
wiki/linux/openvpn.txt · Zuletzt geändert: 2024/12/29 21:05 von wikimaster