Inhaltsverzeichnis
OpenVPN
Mit OpenVPN von Überall ins eigene/heimische Netz. Hier als Beispiel mit FLI4L als Router.
Quellen:
- https://linuxconfig.org/how-to-setup-a-openvpn-server-on-ubuntu-20-04 - OpenVPN Server unter Ubuntu 20.04 aufsetzten
- https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-18-04-de - OpenVPN Server unter Ubuntu 18.04 aufsetzten
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 Parameterserver.crt
- Server Zertifikatserver.key
- Server Schlüsselserver.conf
- enthält die (Basis-) Konfiguration zum Betrieb des OpenVPN Serverstsl-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 Zertifikatclient1.crt
- Client1 Zertifikatclient1.key
- Client1 Schlüsseltslauth.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