Ordnerstruktur des Servers

tree /etc/openvpn
/etc/openvpn/
|-- ccd
|-- client
|   |-- client01
|   |-- client02
|   |-- client03
|   `-- client04
|-- server
`-- ssl

Vorlagen

Server

cat /etc/openvpn/server.conf 
dev tun
mode server
tls-server
topology subnet
server 1.2.3.0 255.255.255.0
route-gateway 1.2.3.1
cipher AES-256-GCM
keepalive 10 30
client-to-client

client-config-dir ccd/

dh ssl/dh4096.pem
ca ssl/admin.ca
cert ssl/admin.crt
key ssl/admin.key
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/login

Client

cat /etc/openvpn/client/template.ovpn
dev tun0
remote 2.3.4.5
cipher AES-256-GCM

tls-client
pull
auth-user-pass

<ca>
</ca>

<cert>
</cert>

<key>
</key>

Neuen Nutzer anlegen

Für einen neuen Nutzer mit statischer IP benötigt man drei Dinge:

  • Client-Zertifikat
  • eine Konfigurationsdatei, die nutzerspezifische Einstellungen überträgt
  • POSIX-Nutzer mit Passwort

Erstellen der Zertifikate

mkdir -p /etc/openvpn/client/new-user
cd !$
openssl genrsa -out new-user.key 4096
openssl req -new -key new-user.key -out new-user.csr
...
Common Name (e.g. server FQDN or YOUR name) []: NewUser
...
openssl x509 -req -days 3650 -in user.csr -CA ../../ssl/admin.ca -CAkey ../../ssl/admin.ca.key -CAcreateserial -out new-user.crt
openssl x509 -subject -noout -in new-user.crt 

statische IP an den Common Name des Nutzers zuweisen

echo "ifconfig-push 1.2.3.4 255.255.255.0" > /etc/openvpn/ccd/NewUser

Nutzer ohne Shell und Heimatverzeichnis erstellen

useradd new-user -d /nonexistent -s /usr/bin/nologin
passwd new-user

.ovpn-Datei für den Client

Nachdem die template.ovpn-Vorlage irgendwohin kopiert wurde (ich empfehle /etc/openvpn/client/new-user/new-user.ovpn), kann man mit Vim ganz einfach die Zertifikate mit :0read /etc/openvpn/client/new-user/new-user.crt einfügen:

openvpn-client-01.png openvpn-client-02.png

Anschließend kann der Client die Datei mit NetworkManager importieren.