So installierst du OpenConnect VPN Server unter Ubuntu 22.04

OpenConnect VPN alias ocserv ist eine kostenlose Open-Source-VPN-Lösung mit Leistung und Funktionen auf Unternehmensniveau. Sie basiert auf dem Cisco AnyConnect VPN-Protokoll, das in der Unternehmenswelt weit verbreitet ist. In dieser Anleitung lernst du, wie du den OpenConnect VPN-Server auf einem Ubuntu 22.04-Rechner installierst. Außerdem lernst du, wie du dich mit einem OpenConnect Client mit dem Server verbinden kannst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN) wie vpn.example.com.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Einige wenige Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall läuft.

$ sudo ufw status

Du solltest die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Lasse auch HTTP- und HTTPS-Ports zu.

$ sudo ufw allow http
$ sudo ufw allow https

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Schritt 2 – Git installieren

Schritt 3 – OpenConnect installieren

Ubuntu 22.04 wird mit einer älteren Version (1.1.3) von OpenConnect ausgeliefert. Wenn du damit zufrieden bist, kannst du es mit dem folgenden Befehl installieren.

$ sudo apt install ocserv

Für diesen Lehrgang werden wir jedoch die neueste Version (1.1.6) von OpenConnect installieren. Dazu müssen wir es aus dem Quellcode bauen.

Installiere die Abhängigkeiten, die für die Erstellung des Quellcodes erforderlich sind.

$ sudo apt install -y libgnutls28-dev libev-dev libpam0g-dev liblz4-dev libseccomp-dev \
	libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev \
	libcurl4-gnutls-dev libcjose-dev libjansson-dev libprotobuf-c-dev \
	libtalloc-dev libhttp-parser-dev protobuf-c-compiler gperf \
	nuttcp lcov libuid-wrapper libpam-wrapper libnss-wrapper \
	libsocket-wrapper gss-ntlmssp haproxy iputils-ping freeradius \
	gawk gnutls-bin iproute2 yajl-tools tcpdump autoconf automake

Klone das ocserv Git-Repository.

$ git clone https://gitlab.com/openconnect/ocserv.git

Wechsle in das geklonte Verzeichnis.

$ cd ocserv

Erstelle die Konfigurationsskripte.

$ autoreconf -fvi

Kompiliere den Quellcode. Ignoriere alle veralteten Warnungen.

$ ./configure && make

Installiere ocserv.

$ sudo make install

Die Dateien werden in den Verzeichnissen /usr/local/bin und /usr/local/sbin installiert. Kopiere die systemd-Dienstdatei.

$ sudo cp doc/systemd/standalone/ocserv.service /etc/systemd/system/ocserv.service

Öffne die Servicedatei zum Bearbeiten.

$ sudo nano /etc/systemd/system/ocserv.service

Ändere den Pfad zur ocserv-Binärdatei in der folgenden Zeile

$ ExecStart=/usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf

in die folgende.

$ ExecStart=/usr/local/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den Systemdaemon neu.

$ sudo systemctl daemon-reload

Schritt 4 – SSL-Zertifikate generieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erzeugen. Du kannst Certbot entweder über das Ubuntu-Repository installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Es gibt zwei Möglichkeiten, um ein SSL-Zertifikat zu erstellen. Wenn du keinen Webserver auf deinem System laufen hast, kannst du das Zertifikat mit der Standalone-Methode erstellen. Führe den folgenden Befehl aus, um das Zertifikat mit dem Standalone-Plugin für Certbot zu erstellen.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d vpn.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/vpn.example.com auf deinem Server heruntergeladen.

Wenn auf deinem System ein Server läuft, kannst du als Nächstes entweder das Webroot-Plugin oder die Nginx- oder Apache-Plugins verwenden, wenn du sie einsetzt. Für Nginx- oder Apache-Server kannst du einfach den folgenden Befehl ausführen.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d vpn.example.com

oder

$ sudo certbot certonly --apache --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d vpn.example.com

Wenn du einen anderen Server hast, müssen wir das webroot-Plugin verwenden. Erstelle dazu das Webroot-Verzeichnis.

$ sudo mkdir -p /var/www/ocserv

Lege den Server als Eigentümer des Web-Root-Verzeichnisses fest. In unserem Fall verwenden wir www-data als Serverbenutzer.

$ sudo chown www-data:www-data /var/www/ocserv -R

Als Nächstes konfigurierst du deinen Server so, dass er die Domain vpn.example.com im Verzeichnis /var/www/ocserv bereitstellt. Starte den Server neu. Erstelle als Nächstes das Zertifikat mit dem folgenden Befehl.

$ sudo certbot certonly --webroot --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d vpn.example.com

Überprüfe den Certbot renewal scheduler service.

$ sudo systemctl list-timers

Dort findest du snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT          LAST                        PASSED        UNIT                       ACTIVATES
Wed 2023-04-19 10:31:47 UTC 2h 55min left Wed 2023-04-19 03:31:58 UTC 4h 3min ago   ua-timer.timer             ua-timer.service
Wed 2023-04-19 12:02:42 UTC 4h 26min left Wed 2023-04-19 03:19:20 UTC 4h 16min ago  motd-news.timer            motd-news.service
Wed 2023-04-19 18:19:56 UTC 10h left      Wed 2023-04-19 07:19:52 UTC 16min ago     apt-daily.timer            apt-daily.service
Wed 2023-04-19 22:51:00 UTC 15h left      n/a                         n/a           snap.certbot.renew.timer   snap.certbot.renew.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 5 – OpenConnect konfigurieren

Wenn du ocserv mit APT installiert hast, sollte die Konfigurationsdatei bereits unter /etc/ocserv/ocserv.conf verfügbar sein. Wenn du das Paket jedoch aus dem Quellcode erstellt hast, müssen wir die Konfigurationsdatei kopieren.

Erstelle das Verzeichnis für die Konfigurationsdatei.

$ sudo mkdir /etc/ocserv

Kopiere die Konfigurationsdatei.

$ sudo cp /home/username/ocserv/doc/sample.config /etc/ocserv/ocserv.conf

Öffne die Datei zum Bearbeiten.

$ sudo nano /etc/ocserv/ocserv.conf

Ändere den Wert des Parameters auth wie folgt. Dies ermöglicht es den Benutzern, separate VPN-Konten zu verwenden.

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Standardmäßig verwendet OpenConnect die Ports 443 TCP und UDP. Wir werden nur den TCP-Port für die Verbindung verwenden. Deaktiviere daher den UDP-Port, indem du ihn auskommentierst.

tcp-port = 443
#udp-port = 443

Wenn du einen Webserver hast, der auf Port 443 läuft, dann ändere den Wert des TCP-Ports, indem du den Wert änderst.

tcp-port = 8443

Als nächstes suchst du die Variablen server-crt und server-key und änderst ihre Werte wie folgt.

server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem

Lege die maximal zulässige Anzahl von Clients fest. Der Standardwert ist 16. Setze den Wert auf 0 für unbegrenzt.

max-clients = 16

Lege die Anzahl der Geräte fest, die ein Nutzer gleichzeitig benutzen kann. Der Standardwert ist 2. Setze den Wert 0 für unbegrenzt.

max-same-clients = 2

In der Standardeinstellung sendet OpenConnect alle 9 Stunden (32400 Sekunden) Keepalive-Pakete. Dies ist ein zu hoher Wert. Setze ihn auf 60 Sekunden, um die Wahrscheinlichkeit eines VPN-Verbindungsabbruchs zu verringern.

keepalive = 60

Ändere den Wert von try-mtu-discovery auf true, um die MTU-Ermittlung zu aktivieren. Das kann die VPN-Leistung optimieren.

try-mtu-discovery = true

Konfiguriere die Zeit, die ein Client im Leerlauf bleiben darf, bevor die Verbindung getrennt wird, indem du die folgenden Variablen auskommentierst. Wenn du möchtest, dass der Client unbegrenzt verbunden bleibt, lass sie so wie sie sind.

idle-timeout=1200
mobile-idle-timeout=1800

Lege den Standard-Domänennamen für das OpenConnect VPN fest.

default-domain = vpn.example.com

Ändere die Standard-IPv4-Konfiguration, um IP-Adressenkollisionen zu vermeiden. Wir werden 10.10.10.0 als Wert verwenden.

ipv4-network = 10.10.10.0

Entferne den Kommentar in der folgenden Zeile, um alle DNS-Anfragen über das VPN zu tunneln.

tunnel-all-dns = true

Ändere den DNS-Resolver auf Google DNS. Füge auch den zweiten Eintrag hinzu.

dns = 8.8.8.8
dns = 8.8.4.4

Kommentiere alle Routenparameter aus, indem du das Rautezeichen (#) davor setzt.

#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#route = default

# Subsets of the routes above that will not be routed by
# the server.

#no-route = 192.168.5.0/255.255.255.0

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 6 – OpenConnect Server starten

Starte den OpenConnect VPN Server.

$ sudo systemctl start ocserv

Überprüfe den Status des Dienstes.

$ sudo systemctl status ocserv

Du wirst eine ähnliche Ausgabe erhalten.

? ocserv.service - OpenConnect SSL VPN server
     Loaded: loaded (/etc/systemd/system/ocserv.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-04-20 08:52:18 UTC; 2s ago
       Docs: man:ocserv(8)
   Main PID: 19965 (ocserv-main)
      Tasks: 2 (limit: 1026)
     Memory: 1.4M
        CPU: 9ms
     CGroup: /system.slice/ocserv.service
             ??19965 ocserv-main  
             ??19966 ocserv-sm 

Apr 20 08:52:18 openconnect ocserv[19965]: note: skipping 'pid-file' config option
Apr 20 08:52:18 openconnect ocserv[19965]: note: vhost:default: setting 'plain' as primary authentication method
Apr 20 08:52:18 openconnect ocserv[19965]: error connecting to sec-mod socket '/var/run/ocserv-socket.a4413bc9': No such file or directory
Apr 20 08:52:18 openconnect ocserv[19965]: note: setting 'file' as supplemental config option
Apr 20 08:52:18 openconnect ocserv[19965]: listening (TCP) on 0.0.0.0:443...
Apr 20 08:52:18 openconnect ocserv[19965]: listening (TCP) on [::]:443...
Apr 20 08:52:18 openconnect ocserv[19966]: ocserv[19966]: sec-mod: reading supplemental config from files
Apr 20 08:52:18 openconnect ocserv[19966]: sec-mod: reading supplemental config from files
Apr 20 08:52:18 openconnect ocserv[19966]: ocserv[19966]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.a4413bc9.0)
Apr 20 08:52:18 openconnect ocserv[19966]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.a4413bc9.0)

Wenn du die Fehlermeldung bezüglich der Verbindung zu sec-mod socket siehst, ignoriere sie. Das ist normal. Er wird die Datei initialisieren, wenn er sie nicht findet.

Schritt 7 – VPN-Konten erstellen

Du kannst VPN-Konten mit dem Dienstprogramm ocpasswd erstellen. Führe den folgenden Befehl aus, um ein neues VPN-Konto zu erstellen.

$ sudo ocpasswd -c /etc/ocserv/ocpasswd username
Enter password:
Re-enter password:

Das Passwort wird in der Datei /etc/ocserv/ocpasswd gespeichert. Um das Passwort für username zurückzusetzen, führe den obigen Befehl erneut aus. Führe den obigen Befehl mit einem anderen Benutzer aus, um ein weiteres Konto zu erstellen.

Schritt 8 – Aktiviere die IP-Weiterleitung

Damit der VPN-Server Pakete zwischen dem Client und dem Internet weiterleiten kann, musst du die IP-Weiterleitung aktivieren, indem du den folgenden Befehl ausführst.

$ echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/60-custom.conf

Führe die folgenden Befehle aus, um den TCP BBR-Algorithmus zu aktivieren, der die TCP-Geschwindigkeit erhöht.

$ echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.d/60-custom.conf
$ echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.d/60-custom.conf

Mache die Änderungen mit dem folgenden Befehl dauerhaft.

$ sudo sysctl -p /etc/sysctl.d/60-custom.conf

Schritt 9 – IP Masquerading konfigurieren

Der nächste Schritt besteht darin, IP-Masquerading in der Firewall einzurichten, damit der VPN-Server als virtueller Router für die Clients arbeiten kann. Suche den Namen der Hauptnetzwerkschnittstelle des Servers.

$ ip addr

Du wirst eine ähnliche Ausgabe erhalten.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
    link/ether 56:00:04:67:7e:79 brd ff:ff:ff:ff:ff:ff
    inet 95.179.138.135/23 metric 100 brd 95.179.139.255 scope global dynamic enp1s0
       valid_lft 66999sec preferred_lft 66999sec
    inet6 2a05:f480:1400:2381:5400:4ff:fe67:7e79/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 2591657sec preferred_lft 604457sec
    inet6 fe80::5400:4ff:fe67:7e79/64 scope link
       valid_lft forever preferred_lft forever

In unserem Fall ist enp1s0 der Name der Schnittstelle. Füge den Befehl iptables in eine UFW-Konfigurationsdatei ein, indem du sie zum Bearbeiten öffnest.

$ sudo nano /etc/ufw/before.rules

Füge die folgenden Zeilen am Ende der Datei hinzu. Ersetze enp1s0 im Code durch deine Netzwerkschnittstelle.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o enp1s0 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Suche die folgenden Zeilen in der Datei.

# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

Füge die folgenden Zeilen nach ihr ein.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

IP Masquerading Code in UFW

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte die Firewall neu.

$ sudo systemctl restart ufw

Du kannst die Masquerade-Regel mit dem folgenden Befehl überprüfen.

$ sudo iptables -t nat -L POSTROUTING

Du wirst die folgende Ausgabe erhalten.

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  10.10.10.0/24        anywhere

Schritt 10 – Verbindung mit OpenConnect Client

Wir werden den OpenConnect Client auf einem Ubuntu 22.04 Rechner installieren. Führe den folgenden Befehl aus, um den Client zu installieren.

$ sudo apt install openconnect

Als Nächstes verbindest du dich mit folgendem Befehl mit dem VPN-Server. Das -b Flag sorgt dafür, dass der Client im Hintergrund läuft, sobald die Verbindung hergestellt ist.

$ sudo openconnect -b vpn.example.com:443

Du wirst aufgefordert, den VPN-Benutzernamen und das Passwort einzugeben. Gib die in Schritt 7 erstellten Anmeldedaten ein.

POST https://vpn.example.com/
Connected to 95.179.138.135:443
SSL negotiation with vpn.example.com
Connected to HTTPS on vpn.example.com with ciphersuite (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)
XML POST enabled
Please enter your username.
Username:navjot
POST https://vpn.example.com/auth
Please enter your password.
Password:
POST https://vpn.example.com/auth

Bei einer erfolgreichen Verbindung siehst du die folgende Ausgabe. DTLS ist deaktiviert, weil wir das UDP deaktiviert haben.

Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 60
No DTLS address
Set up UDP failed; using SSL instead
Configured as 192.168.1.13, with SSL connected and DTLS disabled
Continuing in background; pid 1650

Führe den folgenden Befehl aus, um die Verbindung zu beenden.

$ sudo pkill openconnect

Lass uns einige systemd-Skripte für OpenConnect erstellen. Das erste Skript soll dafür sorgen, dass sich der Client beim Systemstart automatisch verbindet.

Erstelle und öffne die Servicedatei zum Bearbeiten.

$ sudo nano /etc/systemd/system/openconnect.service

Füge den folgenden Code in die Datei ein.

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target systemd-resolved.service
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
  KillSignal=SIGINT
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Aktiviere den Dienst.

$ sudo systemctl enable openconnect.service

Starte den Dienst.

$ sudo systemctl start openconnect.service

Um deine VPN-Verbindung automatisch neu zu starten, wenn dein PC aus dem Ruhezustand wieder hochfährt, musst du ein weiteres systemd-Skript erstellen.

Erstelle und öffne das Neustart-Skript zur Bearbeitung.

$ sudo nano /etc/systemd/system/openconnect-restart.service

Füge den folgenden Code in das Skript ein.

[Unit]
Description=Restart OpenConnect client when resuming from suspend
After=suspend.target

[Service]
Type=simple
ExecStart=/bin/systemctl --no-block restart openconnect.service

[Install]
WantedBy=suspend.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Aktiviere den Dienst.

$ sudo systemctl enable openconnect-restart.service

Wir können auch einen Dienst erstellen, der die VPN-Verbindung automatisch neu startet, wenn sie abbricht. Erstelle und öffne den VPN-Prüfdienst zur Bearbeitung.

$ sudo nano /etc/systemd/system/openconnect-check.service

Füge den folgenden Code in den Dienst ein.

[Unit]
Description=OpenConnect VPN Connectivity Checker
After=openconnect.service

[Service]
Type=simple
ExecStart=/bin/bash -c 'for ((; ; )) do (ping -c9 10.10.10.1 || systemctl restart openconnect) done'

[Install]
WantedBy=multi-user.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Aktiviere und starte den Dienst.

$ sudo systemctl enable enable openconnect-check.service --now

Dadurch wird der Ping-Befehl ständig ausgeführt, um die VPN-Verbindung zu überprüfen. Wenn sie abbricht, wird OpenConnect automatisch neu gestartet.

Du kannst die OpenConnect GUI Clients herunterladen, wenn du willst. Sie wurden jedoch schon seit einiger Zeit nicht mehr aktualisiert. Wenn du einen aktualisierten GUI-Client möchtest, kannst du das OpenConnect GUI GitLab Repository besuchen und ihn selbst kompilieren.

Fazit

Damit ist unsere Anleitung zur Installation eines OpenConnect VPN-Servers auf einem Ubuntu 22.04 Server und zur Verwendung des Kommandozeilen-Clients für die Verbindung mit dem Server abgeschlossen. Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …