Openthinclient und OpenVPN

In diesem Beitrag zeige ich heute wie man mit Openthinclient und OpenVPN Thin Clients auch außerhalb des eigen Netzes betreiben kann (Telearbeitsplatz/Homeoffice).

Zunächst wird vorausgesetzt, dass ein Windows Active Directory Server im eigenen Netzwerk betrieben wird. Dieser Windows Server wird zur Authentifizierung der Nutzer gegenüber dem OpenVPN Server benötigt. So können am Ende Benutzer mit ihrem Windows Benutzer und deren Passwort einen VPN Tunnel aufbauen.

Als erstes fangen wir mit der Installation einenes Linux Servers an. Ich nehme in meinen Fall eine Ubuntu Distribution. Danach fangen wir mit der Installation von Openthinclient an. Dazu wird folgendes Kommando auf dem Ubuntu Server ausgeführt um die Installationsdatei herunterzuladen:

wget http://archive.openthinclient.org/openthinclient/installer/otc-manager_unix_2019_1_3_with_JRE.sh

Nach dem herunterladen der der Installationsdatei wird diese mit dem folgenden Befehl ausführbar gemacht:

sudo chmod +x ./otc-manager_unix_2019_1_3_with_JRE.sh

Danach wird mit folgenden Befehl der Installationsprozess gestartet. Auf die nachfolgenden Installationsprozess gehe ich nicht näher ein. Aber weitere Information findet man auf der Homepage von Openthinclient https://www.openthinclient.com.

sudo ./otc-manager_unix_2019_1_3_with_JRE.sh

Um die Installation abzuschließen wird man dazu aufgefordert auf der Weboberfläche des Openthinclient Servers aufzurufen. Beispiel: http://XXX.XXX.XXX.XXX:8080

Nach der Installation von Openthinclient beginnen wir mit der Konfiguration des OpenVPN Servers auf unserer Ubuntu Maschine.

Wenn der Server hinter einem Router steht, muss die IP-Adresse des Servers fest vergeben werden. Zudem muss eine Portfreigabe für den VPN Dienst (Standartmäßig UDP 1194) freigegeben werden und es sollte eine Dynamischer DNS Dienst konfiguriert werden, wenn der Router keine statische IP-Adresse vom Provider zugewiesen bekommen hat. Des weiteren muss noch eine statische Route im Router eingetragen werden, damit die OpenVPN Clients auch mit dem internen Netzwerk kommunizieren können. Der OpenVPN Server erstellt ein eigenes Netzwerk, wo sich die verbunden OpenVPN Clients sich drin befinden (10.8.0.0/24). Genau dieses Netzwerk muss als statische Route im Router eingetragen werden, damit Clients oder Server auf das 10.8.0.0/24 Netzwerk zugreifen können.

So könnte die statische Route aussehen: 10.8.0.0 255.255.255.0 192.168.0.6

Die orange markierte IP-Adresse ist die Adresse des Ubuntu Servers wo sich der openthinclient server und der openvpn server drauf befinden.

Nach dem konfigurieren des Routers wird folgender Befehl auf der Konsole des Ubuntu Server ausgeführt um die Installationsdatei für OpenVPN herunterzuladen:

sudo wget https://git.io/vpn -O openvpn-install.sh

Nach dem herunterladen der der Installationsdatei wird diese mit dem folgenden Befehl ausführbar gemacht:

sudo chmod +x ./openvpn-install.sh

Danach wird mit folgenden Befehl der Installationsprozess gestartet:

sudo ./openvpn-install.sh

Nun werden folgende Einstellungen im Installationsskript getroffen:

  • Auf welche IP-Adresse soll der OpenVPN sich binden: Externe IP-Adresse deines Routers oder man verwendet eine Dynamische DNS Adresse. Wenn man die Externe IP-Adresse des Routers verwendet, wird diese alle 24h Stunden vom Internetprovider geändert und man kann den VPN Zugang nicht mehr nutzen. Dagegen hilft eine Dynamischer DNS Dienst, der egal welche Externe IP-Adresse man hat, immer auf die selbe Dynamische DNS Adresse zeigt.
  • Auf welchem Protokoll sollen VPN Verbindungen laufen: [1] Standard Einstellung mit Enter bestätigen.
  • Auf welchen Port soll der OpenVPN Server horchen: [1] Standard Einstellung mit Enter bestätigen.
  • Welcher DNS Dienst soll verwendet werden: [1] Standard Einstellung mit Enter bestätigen.
  • Name der Client Konfigurationsdatei: clients

Am Ende der Konfiguration wird die Client-Konfigurationsdatei im Ordner /root/clients.ovpn abgelegt.

Jetzt bearbeiten wir die server.conf. Dazu werden folgende Befehle auf dem Terminal des Ubuntu Servers ausgeführt:

sudo bash -c 'echo duplicate-cn >> /etc/openvpn/server/server.conf'
sudo bash -c 'echo /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/auth-ldap.conf >> /etc/openvpn/server/server.conf'
sudo bash -c 'echo push "route 192.168.0.0 255.255.255.0" >> /etc/openvpn/server/server.conf'

Detaillierte Informationen über die Befehle
  • Der erste Befehl dient dazu, dass unsere cilent.ovpn Konfigurationsdatei gleichzeitig für mehrere Thin Clients eingesetzt werden kann.
  • Der zweite Befehl dient dazu, dass der OpenVPN Server über das LDAP Protokoll ein Verbindung zum Windows Active Directory Server aufbaut um die Benutzernamen und Passwörter der Nutzer abzugleichen, die zum Aufbauen der VPN Verbindung ihre Benutzernamen und Passwort angeben müssen.
  • Der dritte Befehl dient dazu, dass die OpenVPN Clients eine Route des internen Netzwerks beigebracht bekommen. Die Netzwerkadresse und die Netzwerkmaske kann natürlich eine andere wie in diesem Beispiel sein.

Nun installieren wir das LDAP Modul für OpenVPN. Dieses Modul ermöglicht die Verbindung zu einem Microsoft Active Directory Server. Dazu wird folgender Befehl ausgeführt:

sudo apt install openvpn-auth-ldap

Als nächstes erstellen wir einen neuen Benutzer auf unserem Active Directory Server. Dazu wird das Tool „Active Directory-Benuter und -Computer“ aufgerufen und es wird ein einfacher Benutzer angelegt. Dieser Benutzer dient nachher dazu eine Verbindung zwischen dem OpenVPN Server und dem Active Directory Server aufzubauen. Bei dem Erstellen ist es egal in welcher OU (Organistationseinheit) sich dieser befindet.

Beim Erstellen des Benutzers muss man darauf achten, dass das Kennwort nie ablaufen darf und das der Benutzer sein Kennwort auch nicht ändern darf.

Nachdem Erstellen des neuen Benutzers werden „Erweiterte Features“ unter Ansicht aktiviert:

Nun wird der distinguishedName von dem neu erstellten Benutzer kopiert.

Wieder auf unserer Linux Maschine angelangt, erstellen wir nun eine auth-ldap.conf Datei, die der OpenVPN Server braucht um eine Verbindung zum Active Directory herzustellen. Folgende Befehle werden nun eingegeben:

sudo mkdir /etc/openvpn/auth
sudo touch /etc/openvpn/auth/auth-ldap.conf
sudo nano /etc/openvpn/auth/auth-ldap.conf 

Im Texteditor nano werden nun folgende Zeilen in die Datei eingefügt:

<LDAP>
         URL               ldap://XXX.XXX.XXX.XXX:389
         BindDN            "CN=openvpn-ldap,OU=IT-Abteilung,OU=Benutzer,DC=zuhause,DC=local"
         Password          "[email protected]$worD1234"
         Timeout           15
         TLSEnable         no
         FollowReferrals   yes
 </LDAP>
  
 <Authorization>
         BaseDN            "OU=Benutzer,DC=zuhause,DC=local"
         SearchFilter      "(sAMAccountName=%u)"
         RequireGroup      false
 </Authorization> 
  • URL: Dies ist die IP-Adresse eures Active Directory Servers. Dabei die X durch die Nummer der IP-Adresse ersetzen.
  • BindDN: Hier wird der kopierte distinguishedName des zuvor neu erstellten Benutzer eingefügt.
  • Password: Passwort des zuvor neu erstellten Benutzers.
  • BaseDN: Benutzer die sich in der angegeben OU (Organisationseinheit) oder darunter befinden, sind nachher dazu berechtigt einen VPN Tunnel mit ihrem Benutzernamen und Passwort aufzubauen.

Detaillierte Informationen über die anderen Befehle
  • Timeout: Zeit nachdem die Verbindungsversuche abgebrochen werden, wenn der Active Directory Server nicht erreicht wird.
  • TLSEnable: Soll die Verbindung zwischen OpenVPN und dem Active Directory Server verschlüsselt werden. In meinem Fall nicht also „no“.
  • FollowRefferals: Wenn man z.B. mehrere Domains (dc=tree1,dc=example,dc=com and dc=tree2,dc=example,dc=com) in einer Gesamtstruktur betreibt, die sich untereinander vertrauen, und man nun versucht Benutzer in tree1 zu suchen, die aber auf tree2 liegen, dann wird der LDAP Server auf tree1 ein LDAP Refferal herausgeben. Damit kann man auch auf tree2 LDAP‘s Server zugreifen. Um diesen Refferal zu folgen muss diese Funktion mit „yes“ aktiviert werden.
  • SearchFilter: Dieser Beschreibt die Abfrage die der OpenVPN Server mit dem zuvor neu erstellten Benutzer auf der BaseDN ausführt. In diesem Fall werden alle Benutzer, die sich in der BaseDN befinden zurückgegeben.
  • RequireGroup: Um auf Benutzer und alle Unterverzeichnisse zuzugreifen muss der Benutzer, der für LDAP verwendet wird, ein Teil dieser Gruppe sein. In meinen Fall habe ich diese Funktion mit „false“ deaktiviert.

Nun kann der nano Editor mit Strg+O die Datei abspeichern und man schließt danach den Editor mit Strg+X.

Am Ende wird der OpenVPN Service neugestartet um alle Änderungen wirksam zu machen. Dazu folgenden Befehl in das Terminal eingeben:

sudo service openvpn restart 

Nun erstellen wir eine neue Anwendung im Openthinclient Manager. Dieser wird über folgende Webadresse geöffnet http://XXX.XXX.XXX.XXX:8080 Dabei X-Zeichen durch die IP-Adresse des Ubuntu-Servers austauschen. Diese Anwendung bekommt den Namen: „OpenVPN“ und ist vom Typ: „OpenVPN Client“. In den Anwendungseinstellungen wird als Konfiguratiosdatei “/clients.ovpn” angegeben und beim Eingabefeld “Nutzername und Passwort” wird “Benutzer fragen” ausgewählt.

Jetzt wird die zuvor erstellte „clients.ovpn“ Datei in den Openthinclient Server hochgeladen, damit diese Dateien an alle Thin Clients ausgeteilt werden. Um die Dateien hochzuladen öffnen wir das Menü „Dateibrowser“ im Openthinclient Manger und laden die Dateien im Folgenden Verzeichnis hoch: nfs/root/custom/rootfs

Nun werden die erstellte OpenVPN Anwendung einem Thin Client zugewiesen, der außerhalb des eigenen Netzwerkes eingesetzt werden soll (Homeoffice). Openthinclient verteilt das Openthinclient OS im eigenen Netzwerk via PXE. Dies ist über das Internet aber nicht möglich und deswegen muss auf den Thin Clients, die außerhalb des eigenen Netzwerkes agieren, lokal das Betriebssystem installiert werden. Dazu wird eine Weitere Anwendung vom Typ „localboot“ erstellt und den erforderlichen Thin Clients zugeordnet.

Nun ist alles eingerichtet und der Thin Client kann außerhalb des eigen Netzwerkes eingesetzt werden 😉.