# FsRdpServer unter Windows installieren

Vollständige Anleitung von einem frisch aufgesetzten Windows-Server bis zur ersten
funktionierenden Client-Verbindung. Jeder Schritt ist einzeln erklärt – Vorkenntnisse
zu Zertifikaten oder DNS sind nicht nötig.

> Reine Textfassung der Seite <https://www.fssoft.de/FsRdp/InstallingServerWindows.aspx>
> für KI-Assistenten und zum Ausdrucken. Inhaltlich identisch mit der HTML-Fassung;
> maßgeblich ist im Zweifel die Seite selbst.

**Entwicklungsversion:** Der Server richtet sich derzeit an ausgewählte Pilotkunden.
Bitte nehmen Sie vor der Installation Kontakt auf, damit Servername und Lizenz
gemeinsam abgestimmt werden können: <https://www.fssoft.de/Impressum.aspx>

## Inhalt

1. Was am Ende laufen soll
2. Den frischen Windows-Server vorbereiten
3. Der Servername: DNS mit A- und AAAA-Record
4. Router, Portfreigaben und Firewall
5. Das TLS-Zertifikat (PFX-Datei) im Detail
6. Die Lizenz anfordern
7. Das Setup ausführen
8. Prüfen, ob alles läuft
9. Browser-Viewer auf Port 8890 mit eigenem Zertifikat
10. Der erste Verbindungstest
11. Laufender Betrieb: Backup, Update, Erneuerung
12. Häufige Probleme

---

## 1. Was am Ende laufen soll

FsRdpServer ist ein **Vermittlungsserver**. Er nimmt keine Bildschirminhalte auf und
speichert keine Sitzungsinhalte – er verbindet lediglich die Teilnehmer eines Raums
miteinander. Alle Clients verbinden sich zum Server, nie direkt zueinander. Deshalb
muss ausschließlich der Server erreichbar sein, kein einziger Client.

Nach der Installation lauscht der Dienst auf diesen TCP-Ports:

| Port | Wofür | Pflicht? |
|---|---|---|
| `8888` | Hauptverbindung: Steuerung, Bildschirmbild, Dateien, Fernsteuerung | ja |
| `8889` | Sprachübertragung (eigener Kanal) | ja |
| `8890` | Browser-Viewer für Zuschauer ohne installierten Client | optional, lizenzpflichtig |
| `80` | *Nur zeitweise*, falls Sie Zertifikate über Let's Encrypt beziehen | optional |

Der Server bindet seine Ports **dual-stack**, nimmt also IPv4- und IPv6-Verbindungen
über denselben Port entgegen. Dafür müssen Sie nichts einstellen.

---

## 2. Den frischen Windows-Server vorbereiten

Geeignet sind Windows Server 2019, 2022 und 2025 sowie Windows 10/11 x64. Eine
separate .NET-Installation ist **nicht** nötig – das Programm bringt alles Benötigte
mit.

### Schritt 1: Windows vollständig aktualisieren

**Einstellungen → Windows Update → Nach Updates suchen**, bis keine Updates mehr
angeboten werden; zwischendurch neu starten. Ein Server, der später aus dem Internet
erreichbar ist, sollte von Anfang an aktuell sein.

### Schritt 2: Uhrzeit und Zeitzone kontrollieren

Das ist wichtiger, als es klingt: Zertifikate und Lizenzen haben Gültigkeitszeiträume.
Geht die Serveruhr mehrere Minuten falsch, scheitern Verbindungen mit scheinbar
unerklärlichen Fehlern. Öffnen Sie PowerShell als Administrator:

```powershell
Get-Date
w32tm /resync
```

### Schritt 3: Feste lokale IP-Adresse vergeben

Der Router muss die Ports später an eine *gleichbleibende* Adresse weiterleiten.
Vergeben Sie dem Server deshalb eine feste IPv4-Adresse – entweder statisch in den
Netzwerkeinstellungen oder, bequemer und weniger fehleranfällig, als feste Zuordnung
im DHCP-Server Ihres Routers („diesem Gerät immer dieselbe IPv4-Adresse zuweisen").

Aktuelle Adressen anzeigen:

```powershell
Get-NetIPAddress -AddressFamily IPv4,IPv6 |
  Where-Object { $_.PrefixOrigin -ne 'WellKnown' } |
  Format-Table IPAddress, InterfaceAlias, PrefixOrigin, SuffixOrigin
```

### Schritt 4: Prüfen, ob Port 80 belegt ist

Nur wichtig, wenn Sie Ihr Zertifikat über Let's Encrypt beziehen wollen. Ist auf dem
Server IIS oder ein anderer Webserver installiert, belegt dieser Port 80 – dann müssen
Sie ihn während der Zertifikatsausstellung kurz stoppen oder das Zertifikat auf einem
anderen Weg beschaffen.

```powershell
Get-NetTCPConnection -State Listen -LocalPort 80 -ErrorAction SilentlyContinue
```

### Schritt 5: Arbeitsordner anlegen und Dateien sammeln

Legen Sie z. B. `C:\FsRdp-Setup` an und sammeln Sie dort nach und nach:
`Setup_FSRdpServer.exe`, später `cert.pfx` und `license.fsrdp`. Notieren Sie das
PFX-Passwort in einem Passwortmanager – Sie brauchen es bei jeder Neuinstallation und
bei jeder Zertifikatserneuerung wieder.

---

## 3. Der Servername: DNS mit A- und AAAA-Record

### 3.1 Warum ein Name und keine IP-Adresse?

Clients verbinden sich **immer über einen DNS-Namen**, zum Beispiel
`server.ihrefirma.de`, niemals über eine IP-Adresse. Dafür gibt es zwei zwingende
Gründe:

- Das TLS-Zertifikat ist auf einen *Namen* ausgestellt. Verbindet ein Client über eine
  IP-Adresse, passt der Name nicht zum Zertifikat und die Verbindung wird abgelehnt.
- Ihre Lizenz ist ebenfalls an genau diesen Namen gebunden (`LicensedServerHost`).

> **Merksatz:** Lizenzierter Hostname = Name im Zertifikat = Name, den der Client
> einträgt. Diese drei müssen zeichengenau übereinstimmen. Weichen sie ab,
> funktioniert nichts – und die Fehlermeldung nennt oft nur eines der drei.

### 3.2 A-Record und AAAA-Record – was ist das?

Ein DNS-Eintrag übersetzt einen Namen in eine Adresse. Es gibt zwei Sorten, weil es
zwei Adressarten im Internet gibt:

| Eintrag | Zeigt auf | Beispiel |
|---|---|---|
| `A` | eine IPv4-Adresse (vier Zahlen mit Punkten) | `203.0.113.45` |
| `AAAA` | eine IPv6-Adresse (Hexadezimalblöcke mit Doppelpunkten) | `2a02:810d:7087:8800::159` |

Gesprochen wird `AAAA` als „Quad-A". Beide Einträge dürfen für denselben Namen
gleichzeitig existieren – das ist sogar der Normalfall. Der Client nimmt dann, was sein
eigener Anschluss unterstützt, und bevorzugt in der Regel IPv6.

**Wichtig:** Ein AAAA-Record zeigt auf die IPv6-Adresse *des Servers selbst*, nicht auf
die des Routers. Bei IPv6 hat jedes Gerät im Heim- oder Firmennetz eine eigene,
weltweit gültige Adresse – es gibt keine Adressumsetzung wie bei IPv4.

### 3.3 Ihre öffentlichen Adressen herausfinden

Führen Sie das *auf dem Server selbst* aus:

```powershell
# Öffentliche IPv4-Adresse Ihres Anschlusses (die des Routers)
(Invoke-WebRequest -Uri "https://api.ipify.org" -UseBasicParsing).Content

# Öffentliche IPv6-Adresse dieses Servers
(Invoke-WebRequest -Uri "https://api6.ipify.org" -UseBasicParsing).Content
```

Kommt beim ersten Befehl eine Adresse zurück, haben Sie öffentliches IPv4. Kommt beim
zweiten eine Adresse zurück, haben Sie IPv6. Schlägt einer der beiden fehl, unterstützt
Ihr Anschluss dieses Protokoll nicht oder es ist nicht freigeschaltet.

### 3.4 Sonderfall DS-Lite: kein öffentliches IPv4

Viele Kabel- und Glasfaseranschlüsse in Deutschland (verbreitet bei Vodafone Kabel,
teils auch bei anderen Anbietern) laufen mit **DS-Lite**. Dabei bekommt Ihr Anschluss
überhaupt keine eigene öffentliche IPv4-Adresse mehr, sondern teilt sich eine mit
vielen anderen Kunden. Die Folge ist eindeutig:

- **Eine IPv4-Portweiterleitung im Router bleibt wirkungslos.** Sie können sie
  einrichten, sie wird nie erreicht – von außen führt kein Weg zu Ihrem Anschluss.
- **Nur IPv6 funktioniert.** Der Name bekommt also ausschließlich einen AAAA-Record und
  keinen A-Record.
- **Clients in reinen IPv4-Netzen kommen dann nicht heran.** Das betrifft in der Praxis
  manche Firmennetze und einige Mobilfunk-Zugänge. Wer aus dem Internet zuschauen
  können muss, braucht entweder IPv6 oder Sie brauchen einen anderen Anschluss.

**So erkennen Sie DS-Lite:**

- Der Router zeigt unter „Internet → Online-Monitor" keine öffentliche IPv4-Adresse,
  sondern nur IPv6 – oder eine IPv4-Adresse aus dem Bereich `100.64.x.x` bis
  `100.127.x.x`.
- Der Abruf von `https://api.ipify.org` (siehe 3.3) schlägt fehl, der von
  `api6.ipify.org` gelingt.
- In der FRITZ!Box steht unter „Internet → Zugangsdaten → IPv6" häufig ausdrücklich
  „DS-Lite".

Bei vielen Anbietern lässt sich auf Anfrage kostenlos auf einen Anschluss mit echter
IPv4-Adresse umstellen (Stichwort „Dual-Stack statt DS-Lite"). Wenn Ihre Clients aus
beliebigen Netzen kommen sollen, ist dieser Anruf die einfachste Lösung.

### 3.5 Wechselnde Adressen: Dynamic DNS

Privat- und kleine Geschäftsanschlüsse bekommen meist keine feste Adresse. Bei IPv4
ändert sich die öffentliche Adresse; bei IPv6 ändert sich das *Präfix*, also die
vordere Hälfte der Adresse. In beiden Fällen zeigt Ihr DNS-Eintrag irgendwann ins Leere
und niemand erreicht den Server mehr.

Es gibt drei Wege:

- **Feste Adresse beim Anbieter buchen.** Der sauberste Weg, kostet meist einen kleinen
  Aufschlag im Monat. Dann tragen Sie A- und AAAA-Record einmal ein und sind fertig.
- **Dynamic-DNS-Dienst nutzen** (DynDNS, No-IP, deSEC, dynv6 und andere). Der Router
  meldet jede Adressänderung an den Dienst. Sie bekommen dort einen Namen wie
  `ihrname.dynv6.net` und verweisen Ihren eigenen Namen per `CNAME` darauf.
  **Achtung:** Nicht jeder Dienst aktualisiert auch AAAA-Records – bei DS-Lite ist
  genau das die entscheidende Fähigkeit.
- **Nur im lokalen Netz betreiben** – dann brauchen Sie weder Dynamic DNS noch eine
  Portfreigabe (siehe 3.8).

> **Bei IPv6 zusätzlich beachten:** Wechselt das Präfix, ändert sich die Adresse des
> Servers – und damit sowohl der AAAA-Record *als auch* die Freigaberegel im Router.
> Sorgen Sie dafür, dass der Server wenigstens seinen hinteren Adressteil (die
> „Interface-ID") behält, damit die Router-Regel einen Präfixwechsel übersteht. In der
> FRITZ!Box geschieht das automatisch, wenn Sie die Freigabe am Gerät statt an einer
> eingetippten Adresse festmachen.

### 3.6 Die Einträge beim DNS-Anbieter setzen

Melden Sie sich bei der Stelle an, die Ihre Domain verwaltet (Ihr Registrar oder
Hoster) und legen Sie einen Eintrag für den gewünschten Namen an:

| Feld | Wert (Beispiel) | Anmerkung |
|---|---|---|
| Typ | `A` | nur wenn Sie öffentliches IPv4 haben |
| Name / Host | `server` | ergibt `server.ihrefirma.de` |
| Wert | `203.0.113.45` | öffentliche IPv4-Adresse des Anschlusses |
| TTL | `600` | 10 Minuten – niedrig halten, solange Sie testen |

| Feld | Wert (Beispiel) | Anmerkung |
|---|---|---|
| Typ | `AAAA` | wenn Sie IPv6 haben – bei DS-Lite zwingend |
| Name / Host | `server` | derselbe Name wie oben |
| Wert | `2a02:810d:7087:8800::159` | IPv6-Adresse **des Servers**, nicht des Routers |
| TTL | `600` | |

Änderungen brauchen bis zu einer TTL-Länge, bis sie überall ankommen. Setzen Sie die
TTL erst wieder hoch (z. B. 3600), wenn alles läuft.

### 3.7 Kontrollieren, ob der Name stimmt

Führen Sie das *von einem anderen Rechner aus* aus, nicht auf dem Server:

```powershell
Resolve-DnsName server.ihrefirma.de -Type A
Resolve-DnsName server.ihrefirma.de -Type AAAA
```

Erwartet wird genau die Adresse, die Sie eingetragen haben. Kommt „DNS name does not
exist", ist der Eintrag noch nicht verbreitet oder falsch geschrieben. Kommt eine
*andere* Adresse, liefert Ihnen wahrscheinlich ein zwischengespeicherter Eintrag alte
Daten – dann hilft `Clear-DnsClientCache`.

### 3.8 Nur im lokalen Netz betreiben

Wenn alle Teilnehmer im selben Firmennetz sitzen, brauchen Sie weder öffentliches DNS
noch Portfreigaben. Der Name muss aber trotzdem existieren, weil Zertifikat und Lizenz
daran hängen. Zwei Möglichkeiten:

- **Internes DNS** (z. B. der DNS-Dienst Ihres Active Directory): Legen Sie dort
  `server.ihrefirma.de` mit der lokalen IP-Adresse an. Das ist der saubere Weg.
- **hosts-Datei auf jedem Client** – nur für kleine Tests sinnvoll. In
  `C:\Windows\System32\drivers\etc\hosts` eintragen:

  ```text
  192.168.1.50    server.ihrefirma.de
  ```

Ein hosts-Eintrag ändert nur die Namensauflösung. Er ersetzt weder die Namensprüfung
des Zertifikats noch die Lizenzbindung – das Zertifikat muss weiterhin auf
`server.ihrefirma.de` lauten.

---

## 4. Router, Portfreigaben und Firewall

Zwischen einem Client im Internet und Ihrem Server stehen zwei Hindernisse: der Router
und die Windows-Firewall. Um die Windows-Firewall kümmert sich das Setup automatisch;
den Router müssen Sie selbst einstellen.

### 4.1 IPv4: Portweiterleitung

Bei IPv4 hat Ihr Netz nur eine öffentliche Adresse, die sich alle Geräte teilen. Der
Router muss deshalb wissen, an welches Gerät er ankommende Verbindungen weiterreichen
soll. Legen Sie für jeden Port eine Regel an:

| Protokoll | Port von außen | Ziel-Gerät | Port am Gerät |
|---|---|---|---|
| TCP | 8888 | Ihr Server | 8888 |
| TCP | 8889 | Ihr Server | 8889 |
| TCP | 8890 | Ihr Server | 8890 |

In der FRITZ!Box: **Internet → Freigaben → Portfreigaben → Gerät für Freigaben
hinzufügen**, dort den Server wählen und je eine Freigabe anlegen.

### 4.2 IPv6: Freigabe statt Weiterleitung

Bei IPv6 gibt es keine Adressumsetzung – jedes Gerät ist schon von außen adressierbar.
Der Router leitet also nichts um, sondern *öffnet* nur seine Firewall für dieses Gerät
und diesen Port. In der Oberfläche heißt das trotzdem meist „Portfreigabe", mit einer
Auswahl wie „Internetzugriff über IPv6".

> Legen Sie die Freigabe **am Gerät** an, nicht an einer eingetippten IPv6-Adresse. Nur
> dann folgt die Regel dem Server, wenn sich das Präfix ändert. Bei DS-Lite ist
> ausschließlich die IPv6-Freigabe wirksam; die IPv4-Weiterleitung können Sie sich
> sparen.

### 4.3 Port 80 – nur für Let's Encrypt

Beziehen Sie Ihr Zertifikat über Let's Encrypt, muss die Zertifizierungsstelle prüfen,
dass Ihnen der Name wirklich gehört. Der einfachste Prüfweg läuft über Port 80. Sie
brauchen dafür eine Freigabe auf Port 80 zu Ihrem Server – und zwar dauerhaft, weil die
Erneuerung alle 60 Tage automatisch abläuft.

Router warnen an dieser Stelle gern vor Sicherheitsrisiken. Die Warnung zielt auf einen
dauerhaft laufenden Webserver. Wenn auf Port 80 nur während der wenigen Sekunden einer
Zertifikatsausstellung ein Programm lauscht und sonst nichts, ist das Risiko gering.

### 4.4 Die Windows-Firewall

Darum kümmert sich das Setup: Es legt die eingehenden Regeln `FSRdpServer Main`,
`FSRdpServer Audio` und – wenn Sie den Browser-Viewer aktivieren – `FSRdpServer
WebGateway` an. Die Regeln gelten nur für das Serverprogramm selbst, nicht für den Port
allgemein. Verwenden Sie eine zusätzliche Sicherheitssoftware, müssen Sie die Ports
dort gegebenenfalls von Hand freigeben.

---

## 5. Das TLS-Zertifikat (PFX-Datei) im Detail

### 5.1 Was ist eine PFX-Datei?

`cert.pfx` ist ein passwortgeschützter Behälter im Format PKCS#12. Darin stecken drei
Dinge:

- das **Serverzertifikat** – der öffentliche Ausweis für Ihren Servernamen;
- der **private Schlüssel** – das Geheimnis, das beweist, dass der Ausweis Ihnen gehört;
- meist zusätzlich die **Zwischenzertifikate** der ausstellenden Stelle.

FsRdpServer verschlüsselt damit alle Verbindungen, genau wie ein Webserver sein
HTTPS-Zertifikat verwendet. Ohne gültiges Zertifikat startet der Dienst nicht.

> **Die PFX-Datei ist ein Geheimnis.** Wer sie und ihr Passwort hat, kann sich als Ihr
> Server ausgeben. Verschicken Sie sie nicht per unverschlüsselter E-Mail, legen Sie
> sie nicht auf Netzlaufwerke mit weiten Rechten und laden Sie sie niemals in ein
> öffentliches Repository.

### 5.2 Welchen Namen muss das Zertifikat tragen?

Das Zertifikat muss den lizenzierten Servernamen als *Subject Alternative Name* (SAN)
enthalten. Zwei Varianten sind zulässig:

- **Ein Wildcard-Zertifikat** für `*.ihrefirma.de` – deckt `server.ihrefirma.de` mit ab
  und lässt sich später für weitere Server wiederverwenden.
- **Ein Zertifikat nur für diesen einen Namen**, also `server.ihrefirma.de`. Günstiger,
  aber nicht übertragbar.

Die PFX-Datei darf **genau ein** Zertifikat mit privatem Schlüssel enthalten. Enthält
sie mehrere, verweigert der Server den Start mit einer eindeutigen Meldung.

### 5.3 Weg A: Zertifikat kaufen und als PFX exportieren

Der übliche Weg, wenn Sie ohnehin eine Domain bei einem Hoster haben. Sie bestellen
dort ein Zertifikat, bekommen es ausgestellt und exportieren es unter Windows als PFX.

#### Schritt 1: Zertifikat beim Anbieter bestellen

Bei Ihrem Domain-Anbieter (z. B. HostEurope, IONOS, GoDaddy) ein Zertifikat für
`server.ihrefirma.de` oder `*.ihrefirma.de` bestellen. Der Anbieter führt Sie durch die
Eigentumsprüfung, meist per E-Mail oder DNS-Eintrag.

#### Schritt 2: Zertifikat installieren

Der Anbieter liefert entweder eine fertige PFX-Datei – dann sind Sie hier fertig – oder
Zertifikatsdateien, die Sie in den Windows-Zertifikatspeicher importieren. Doppelklick
auf die Datei, Speicherort **Lokaler Computer**, Ablage unter **Eigene Zertifikate**.

#### Schritt 3: Als PFX exportieren

`certlm.msc` starten (Zertifikate für den lokalen Computer). Unter **Eigene Zertifikate
→ Zertifikate** das Zertifikat suchen, rechte Maustaste → **Alle Aufgaben →
Exportieren**. Dann:

- **Ja, privaten Schlüssel exportieren** – ohne ihn ist die Datei wertlos.
- Format: **PKCS#12 (.PFX)**.
- **Wenn möglich, alle Zertifikate im Zertifizierungspfad einbeziehen** ankreuzen –
  damit landen die Zwischenzertifikate mit in der Datei.
- Ein Passwort vergeben (Verschlüsselung `AES256-SHA256` wählen, falls angeboten).
- Als `cert.pfx` speichern.

### 5.4 Weg B: Kostenlos über Let's Encrypt

Funktioniert nur, wenn Ihr Servername öffentlich im DNS steht und die
Zertifizierungsstelle Ihren Server erreichen kann. Unter Windows ist **win-acme** das
gängige Werkzeug (kostenlos, von `win-acme.com`).

#### Schritt 1: win-acme herunterladen und starten

ZIP entpacken, `wacs.exe` als Administrator ausführen. Es erscheint ein Menü im
Konsolenfenster.

#### Schritt 2: Zertifikat mit allen Optionen anlegen

Den Punkt für ein Zertifikat mit vollständigen Optionen wählen, als Quelle die manuelle
Eingabe und dort `server.ihrefirma.de` eintragen. Als Prüfverfahren die
HTTP-Validierung wählen, bei der win-acme selbst kurz auf Port 80 lauscht.

#### Schritt 3: Als PFX-Datei ablegen lassen

Bei der Frage nach dem Speicherort die **PFX-Datei** wählen (nicht nur den
Windows-Zertifikatspeicher), einen Zielordner wie `C:\FsRdp-Setup\certs` und ein
Passwort angeben. win-acme richtet anschließend selbst eine geplante Aufgabe für die
automatische Erneuerung ein.

> Die genaue Bezeichnung der Menüpunkte hängt von der win-acme-Version ab. Entscheidend
> sind drei Dinge: der Name muss exakt Ihr lizenzierter Servername sein, das Ergebnis
> muss eine **PFX-Datei mit privatem Schlüssel** sein, und Port 80 muss von außen
> erreichbar sein.

Haben Sie das Zertifikat auf anderem Weg als `fullchain.pem` und `privkey.pem`
vorliegen, bündeln Sie es mit OpenSSL:

```text
openssl pkcs12 -export -out cert.pfx ^
  -inkey privkey.pem -in fullchain.pem
```

Das Passwort fragt OpenSSL danach interaktiv ab – so landet es nicht im Verlauf der
Eingabeaufforderung.

### 5.5 Weg C: Zertifikat der eigenen Firmen-CA

Nur für rein interne Installationen sinnvoll. Sie stellen das Zertifikat selbst aus –
dann muss aber *jeder* Client Ihrer Firmen-CA ausdrücklich vertrauen, sonst schlägt
jede Verbindung fehl. Für den Browser-Viewer ist dieser Weg unbrauchbar, weil jeder
Browser eine Warnseite zeigen würde.

### 5.6 Die PFX-Datei vor der Installation prüfen

Machen Sie das unbedingt vorher – ein falsches Zertifikat merkt man sonst erst, wenn
das Setup abbricht:

```powershell
$pfx = Get-PfxCertificate -FilePath C:\FsRdp-Setup\cert.pfx
$pfx | Format-List Subject, NotBefore, NotAfter, HasPrivateKey, Thumbprint
$pfx.Extensions |
  Where-Object { $_.Oid.FriendlyName -eq 'Subject Alternative Name' } |
  ForEach-Object { $_.Format($true) }
```

Achten Sie auf drei Punkte:

- `HasPrivateKey` muss `True` sein.
- `NotAfter` muss in der Zukunft liegen.
- In der SAN-Liste muss Ihr lizenzierter Name stehen – bei einem Wildcard-Zertifikat
  entsprechend `*.ihrefirma.de`.

### 5.7 Ablauf im Kalender eintragen

Zertifikate laufen ab: gekaufte meist nach einem Jahr, die von Let's Encrypt nach 90
Tagen. Läuft das Zertifikat ab, verbindet sich kein Client mehr – und zwar schlagartig.
Tragen Sie sich eine Erinnerung zwei Wochen vor `NotAfter` ein, oder richten Sie eine
automatische Erneuerung ein (win-acme macht das selbst; der Dienst muss danach neu
gestartet werden, siehe Abschnitt 11).

---

## 6. Die Lizenz anfordern

FsRdpServer startet ausschließlich mit einer gültigen, signierten Lizenzdatei
`license.fsrdp`. Sie ist an zwei Dinge gebunden: an Ihren **Servernamen** und an eine
dauerhafte **Installations-ID**, die auf dem Server erzeugt wird.

Teilen Sie für die Ausstellung mit:

- den exakten DNS-Namen, den die Clients verwenden werden;
- wie viele Räume gleichzeitig laufen sollen;
- wie viele Teilnehmer pro Raum;
- die gewünschte Laufzeit;
- ob Sie den Browser-Viewer, die Sitzungsaufnahme oder Live-Untertitel nutzen möchten –
  diese Funktionen müssen in der Lizenz freigeschaltet sein.

> **Bei einer Windows-Erstinstallation ist das bequem gelöst:** Sie bekommen die Lizenz
> mitsamt der passenden Installations-ID, und das Setup übernimmt und speichert die ID
> automatisch. Sie müssen vorher nichts erzeugen. Nur wenn Sie eine *bestehende*
> Installation weiterverwenden, gilt deren vorhandene ID.

Bereits installierte Server zeigen ihre ID so an:

```powershell
& "$env:ProgramFiles\FsRdpServer\FsRdpServer.exe" --installation-id
```

---

## 7. Das Setup ausführen

Sie brauchen jetzt: `Setup_FSRdpServer.exe` (von <https://www.fssoft.de/FsRdp/>),
`cert.pfx` samt Passwort und `license.fsrdp`.

### Schritt 1: Als Administrator starten

`Setup_FSRdpServer.exe` mit der rechten Maustaste anklicken und **Als Administrator
ausführen** wählen. Ohne Administratorrechte kann das Setup weder den Dienst noch die
Firewallregeln anlegen.

### Schritt 2: Ports festlegen

Die Vorschläge `8888` und `8889` passen fast immer. Auf derselben Seite finden Sie das
Kontrollkästchen für den **Browser-Viewer** samt zugehörigem Port (`8890`). Kreuzen Sie
es nur an, wenn Ihre Lizenz diese Funktion enthält. Der ebenfalls dort angebotene
**Demo-Modus** ist für Interessenten ohne Lizenzschlüssel gedacht und im Normalbetrieb
aus.

### Schritt 3: Zertifikat und Passwort angeben

Die `cert.pfx` auswählen und auf der nächsten Seite ihr Passwort eingeben.

### Schritt 4: Lizenzdatei auswählen

Die gelieferte `license.fsrdp` auswählen.

### Schritt 5: Prüfung abwarten

Bevor irgendetwas kopiert wird, prüft das Setup:

- Signatur und Gültigkeit der Lizenz;
- die Installations-ID;
- den lizenzierten Hostnamen;
- das PFX-Passwort und den privaten Schlüssel;
- Gültigkeitszeitraum, Verwendungszweck und Namen des Zertifikats;
- die Zertifikatskette;
- ob sich der lizenzierte Hostname per DNS auflösen lässt.

> **Wenn eine DNS-Warnung erscheint:** Das Setup lässt Sie fortfahren, wenn der Name
> (noch) nicht auflösbar ist. Tun Sie das nur, wenn Sie wissen, dass Sie DNS oder die
> hosts-Einträge vor der ersten Client-Verbindung noch einrichten. Andernfalls brechen
> Sie ab und korrigieren erst den DNS-Eintrag.

**Was das Setup danach einrichtet:**

| Bereich | Ort bzw. Wirkung |
|---|---|
| Programmdateien | `C:\Program Files\FsRdpServer` |
| Daten und Geheimnisse | `C:\ProgramData\FsRdpServer` mit `appsettings.json`, `cert.pfx`, `license.fsrdp`, `server-instance-id.txt` und `Logs\` |
| Dienst | `FsRdpServer`, verzögerter Autostart, läuft als `LocalSystem`, startet nach Fehlern automatisch neu |
| Firewall | eingehende Regeln für die konfigurierten Ports |
| Zugriffsrechte | der Datenordner wird auf `SYSTEM` und lokale Administratoren beschränkt |

> **Zum PFX-Passwort:** Es steht im Klartext in
> `C:\ProgramData\FsRdpServer\appsettings.json`. Geschützt wird es nicht durch
> Verschlüsselung, sondern durch die Zugriffsrechte des Ordners. Geben Sie normalen
> Benutzern deshalb **niemals** Zugriff auf diesen Ordner, und nehmen Sie ihn nicht in
> eine Sicherung auf, die breiter lesbar ist als der Ordner selbst.

---

## 8. Prüfen, ob alles läuft

PowerShell als Administrator öffnen und der Reihe nach durchgehen.

**Läuft der Dienst?**

```powershell
Get-Service -Name FsRdpServer
```

Der Status muss `Running` sein.

**Lauschen beide Ports?**

```powershell
Get-NetTCPConnection -State Listen -LocalPort 8888,8889
```

**Sind die Firewallregeln da?**

```powershell
Get-NetFirewallRule -DisplayName "FSRdpServer Main","FSRdpServer Audio"
```

**Was sagt die Lizenz?**

```powershell
& "$env:ProgramFiles\FsRdpServer\FsRdpServer.exe" --license-status
```

**Die vollständige Selbstprüfung:**

```powershell
& "$env:ProgramFiles\FsRdpServer\FsRdpServer.exe" `
  --validate-installation `
  --validation-data-dir "$env:ProgramData\FsRdpServer"
```

Rückgabewert `0` heißt: alles in Ordnung. Rückgabewert `3` heißt: Warnungen, etwa weil
DNS noch nicht auflöst oder die Zertifikatskette lokal nicht vollständig prüfbar ist.
Lesen Sie die Warnung vollständig und fahren Sie nur fort, wenn Sie ihre Ursache
verstanden haben. Jeder echte Fehler muss vor der Inbetriebnahme behoben werden.

**Die letzten Protokolldateien ansehen:**

```powershell
Get-ChildItem "$env:ProgramData\FsRdpServer\Logs" |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 10
```

---

## 9. Browser-Viewer auf Port 8890 mit eigenem Zertifikat

Der Browser-Viewer erlaubt Zuschauern, ohne installierten Client teilzunehmen – sie
öffnen einfach `https://server.ihrefirma.de:8890/`. Die Funktion ist standardmäßig aus
und braucht zwei Schalter: die Freigabe **in der Lizenz** und die Aktivierung **in der
Konfiguration**.

### 9.1 Warum ein zweites Zertifikat sinnvoll ist

Für die nativen Clients genügt jedes Zertifikat, dem die Clients vertrauen – auch eines
aus Ihrer eigenen Firmen-CA. Ein **Browser** ist strenger: Er zeigt jedem Besucher eine
Warnseite, wenn das Zertifikat nicht von einer öffentlich anerkannten Stelle stammt.
Genau dafür können Sie dem Browser-Viewer ein eigenes, öffentlich vertrauenswürdiges
Zertifikat geben, ohne das Zertifikat der nativen Kanäle anzufassen.

> Lassen Sie die beiden Einstellungen leer, verwendet der Browser-Viewer automatisch
> dieselbe `cert.pfx` wie die Ports 8888/8889. Das ist völlig in Ordnung, solange diese
> von einer öffentlichen Zertifizierungsstelle stammt.

### 9.2 Einrichten

#### Schritt 1: Öffentlich vertrauenswürdiges Zertifikat besorgen

Zum Beispiel über win-acme (siehe 5.4) als `C:\FsRdp-Setup\certs\webgateway.pfx`. Es
muss auf denselben Namen lauten, unter dem Besucher die Seite aufrufen.

#### Schritt 2: Konfiguration ergänzen

`C:\ProgramData\FsRdpServer\appsettings.json` als Administrator im Editor öffnen und
die Werte eintragen:

```json
"WebGatewayEnabled": true,
"WebGatewayPort": 8890,
"WebGatewayCertificatePath": "C:\\FsRdp-Setup\\certs\\webgateway.pfx",
"WebGatewayCertificatePassword": "IhrPasswort",
```

Beachten Sie die **doppelten Backslashes** – in JSON muss jeder Backslash verdoppelt
werden. Ein Pfad mit einfachem Backslash macht die Datei ungültig und der Dienst
startet nicht mehr.

#### Schritt 3: Dienst neu starten und prüfen

```powershell
Restart-Service -Name FsRdpServer
Get-NetTCPConnection -State Listen -LocalPort 8890
```

Danach `https://server.ihrefirma.de:8890/` im Browser aufrufen. Erscheint keine
Zertifikatswarnung, ist alles richtig.

Vergessen Sie die Portfreigabe für 8890 im Router nicht (Abschnitt 4). Ohne aktivierten
Browser-Viewer legt das Setup auch keine Firewallregel für diesen Port an – die können
Sie im Setup nachträglich aktivieren, indem Sie es erneut ausführen.

### 9.3 Erneuerung nicht vergessen

> Der Server liest seine Zertifikate **nur beim Start**. Wird das Zertifikat erneuert –
> etwa automatisch durch win-acme alle 60 Tage – übernimmt der laufende Dienst die neue
> Datei nicht von selbst. Er muss danach neu gestartet werden. Ein Neustart trennt alle
> laufenden Sitzungen, planen Sie ihn also in eine ruhige Zeit. Am einfachsten hängen
> Sie an die Erneuerungsaufgabe von win-acme einen Aufruf von
> `Restart-Service -Name FsRdpServer` an.

---

## 10. Der erste Verbindungstest

### Schritt 1: Client auf einem anderen Rechner installieren

Nicht auf dem Server selbst testen – damit übersehen Sie jedes Router- und
Firewall-Problem. Die Client-Anleitung beschreibt die Installation:
<https://www.fssoft.de/FsRdp/InstallingClient.aspx>

### Schritt 2: Im Client den Servernamen eintragen

Exakt den lizenzierten Namen, keine IP-Adresse, und die Ports `8888` und `8889`.

### Schritt 3: Mit zwei Geräten in denselben Raum verbinden

Erst mit zwei Teilnehmern zeigt sich, ob Bild und Ton tatsächlich durchlaufen.

> **Testen Sie nicht mit `telnet` oder `Test-NetConnection` in der Schleife.**
> Wiederholte Verbindungsversuche ohne gültiges Protokoll wertet der Server als
> Angriffsversuch und sperrt die IP-Adresse des Testrechners vorübergehend. Ein
> einzelner Verbindungstest ist unproblematisch, Dauerschleifen sperren Sie aus.

---

## 11. Laufender Betrieb

### Sicherung

Sichern Sie `C:\ProgramData\FsRdpServer` – aber an einen Ort mit ebenso engen
Zugriffsrechten, denn dort liegen PFX und Passwort.

> **`server-instance-id.txt` darf niemals verloren gehen.** Ihre Lizenz ist an diese ID
> gebunden. Ist sie weg, ist die Lizenz für diese Installation wertlos und muss neu
> ausgestellt werden. Deshalb bleibt der Datenordner auch bei einer Deinstallation
> absichtlich bestehen.

### Server aktualisieren

Eine neuere `Setup_FSRdpServer.exe` als Administrator ausführen. Konfiguration,
Zertifikat, Lizenz, Installations-ID, Raumreservierungen und Protokolle bleiben
erhalten – auch die Einstellungen für das Browser-Viewer-Zertifikat.

### Lizenz austauschen

```powershell
Stop-Service -Name FsRdpServer
Copy-Item ".\license.fsrdp" "$env:ProgramData\FsRdpServer\license.fsrdp" -Force
& "$env:ProgramFiles\FsRdpServer\FsRdpServer.exe" `
  --validate-installation `
  --validation-data-dir "$env:ProgramData\FsRdpServer"
Start-Service -Name FsRdpServer
```

Starten Sie den Dienst nicht, wenn die Validierung fehlschlägt. Wurde die Lizenz mit
einer geänderten Supporter-Anzahl neu erzeugt, können sich alle Supporter-Schlüssel
geändert haben – verteilen Sie die neuen Schlüssel dann zeitnah.

### Zertifikat austauschen

```powershell
Stop-Service -Name FsRdpServer
Copy-Item ".\cert.pfx" "$env:ProgramData\FsRdpServer\cert.pfx" -Force
# Falls sich das Passwort geändert hat: appsettings.json anpassen
Start-Service -Name FsRdpServer
```

Danach die Selbstprüfung aus Abschnitt 8 wiederholen.

---

## 12. Häufige Probleme

### Der Name im Zertifikat passt nicht

Client-Name, Zertifikatsname und lizenzierter Hostname sind unterschiedlich. Prüfen Sie
alle drei und verbinden Sie sich immer mit dem lizenzierten Namen.

### `RevocationStatusUnknown`

Die ausstellende Stelle veröffentlicht keine erreichbare Sperrliste. Typisch bei einer
eigenen Firmen-CA. Für öffentliche Installationen sollten Sie ein Zertifikat mit
regulärer Sperrprüfung verwenden. Die Zertifikatsprüfung global abzuschalten ist keine
Lösung.

### Falsches PFX-Passwort oder fehlender Schlüssel

Prüfen Sie mit `Get-PfxCertificate` (Abschnitt 5.6), ob `HasPrivateKey` auf `True`
steht und das Passwort stimmt. Die Datei darf genau ein Zertifikat mit privatem
Schlüssel enthalten.

### Die Lizenz gehört zu einer anderen Installation

Die `server-instance-id.txt` wurde ersetzt oder gelöscht. Stellen Sie die ursprüngliche
Datei aus der Sicherung wieder her oder fordern Sie eine neue Lizenz für die aktuelle ID
an. Die signierte Lizenzdatei darf nie von Hand bearbeitet werden.

### Der Dienst läuft, aber kein Client verbindet sich

Arbeiten Sie die Kette von außen nach innen ab:

1. Löst der Name beim Client zur richtigen Adresse auf? (`Resolve-DnsName`)
2. Ist die Portfreigabe im Router aktiv – und bei DS-Lite auch für IPv6?
3. Lauscht der Server auf beiden Ports? (`Get-NetTCPConnection`)
4. Existieren die Firewallregeln?
5. Was steht in den Protokollen unter `C:\ProgramData\FsRdpServer\Logs`?

### Alles lief, seit heute nicht mehr

Zwei Klassiker: Das Zertifikat ist abgelaufen, oder die öffentliche Adresse Ihres
Anschlusses hat sich geändert und der DNS-Eintrag zeigt ins Leere. Prüfen Sie zuerst
`NotAfter` des Zertifikats und danach, ob der DNS-Eintrag noch zur aktuellen Adresse
passt.

---

## Weiterführend

- Vertiefung zum PFX-Zertifikat: <https://www.fssoft.de/FsRdp/HowToPFX.aspx>
- Dieselbe Anleitung für Linux-Server: <https://www.fssoft.de/FsRdp/InstallingServerLinux.aspx>
- Client installieren: <https://www.fssoft.de/FsRdp/InstallingClient.aspx>
- Lizenzbedingungen: <https://www.fssoft.de/FsRdp/Lizenz.aspx>

**Sie kommen an einer Stelle nicht weiter?** Melden Sie sich – Servername, Zertifikat
und Lizenz stimmen wir gerne gemeinsam ab: <https://www.fssoft.de/Impressum.aspx>
(Robert Fischbacher, Fischbacher Software)
