<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.tuxi.ddnss.de/index.php?action=history&amp;feed=atom&amp;title=Server-Administration</id>
	<title>Server-Administration - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tuxi.ddnss.de/index.php?action=history&amp;feed=atom&amp;title=Server-Administration"/>
	<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;action=history"/>
	<updated>2026-06-05T22:22:36Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Tuxipedia</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=135&amp;oldid=prev</id>
		<title>Admin: /* Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem */</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=135&amp;oldid=prev"/>
		<updated>2026-04-15T13:17:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 15. April 2026, 13:17 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Zeile 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Hairpin-NAT&amp;#039;&amp;#039;&amp;#039; (auch: NAT Loopback) beschreibt ein Netzwerk-Phänomen, bei dem Datenpakete aus einem lokalen Netz heraus ins Internet geroutet werden – obwohl Absender und Empfänger im selben lokalen Netz sitzen. Der Weg biegt sich wie eine Haarnadel zurück.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Hairpin-NAT&amp;#039;&amp;#039;&amp;#039; (auch: NAT Loopback) beschreibt ein Netzwerk-Phänomen, bei dem Datenpakete aus einem lokalen Netz heraus ins Internet geroutet werden – obwohl Absender und Empfänger im selben lokalen Netz sitzen. Der Weg biegt sich wie eine Haarnadel zurück.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ursache ist der NAT-Router (z.B. eine FritzBox), der interne IP-Adressen in die öffentliche IP übersetzt. Spricht ein Gerät intern die öffentliche Domain an, verlässt der Traffic das lokale Netz, durchläuft den Router, und kommt von außen zurück. Als Absender erscheint dann die öffentliche IP – nicht die interne.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ursache ist der NAT-Router (z.B. eine FritzBox), der interne IP-Adressen in die öffentliche IP übersetzt. Spricht ein Gerät intern die öffentliche Domain an, verlässt der Traffic das lokale Netz, durchläuft den Router, und kommt von außen zurück. Als Absender erscheint dann die öffentliche IP – nicht die interne.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Das Problem ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Das Problem ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-134:rev-135:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=134&amp;oldid=prev</id>
		<title>Admin: /* Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem */</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=134&amp;oldid=prev"/>
		<updated>2026-04-15T13:17:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 15. April 2026, 13:17 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Hintergrund ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;Hairpin-NAT&#039;&#039;&#039; (auch: NAT Loopback) beschreibt ein Netzwerk-Phänomen, bei dem Datenpakete aus einem lokalen Netz heraus ins Internet geroutet werden – obwohl Absender und Empfänger im selben lokalen Netz sitzen. Der Weg biegt sich wie eine Haarnadel zurück.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ursache ist der NAT-Router (z.B. eine FritzBox), der interne IP-Adressen in die öffentliche IP übersetzt. Spricht ein Gerät intern die öffentliche Domain an, verlässt der Traffic das lokale Netz, durchläuft den Router, und kommt von außen zurück. Als Absender erscheint dann die öffentliche IP – nicht die interne.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Das Problem ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Das Problem ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-133:rev-134:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=133&amp;oldid=prev</id>
		<title>Admin: &#039;&#039;&#039;Hairpin-NAT&#039;&#039;&#039; (auch: NAT Loopback) beschreibt ein Netzwerk-Phänomen, bei dem Datenpakete aus einem lokalen Netz heraus ins Internet geroutet werden – obwohl Absender und Empfänger im selben lokalen Netz sitzen. Der Weg biegt sich wie eine Haarnadel zurück. Ursache ist der NAT-Router (z.B. eine FritzBox), der interne IP-Adressen in die öffentliche IP übersetzt. Spricht ein Gerät intern die öffentliche Domain an, verlässt der Traffic das lokale Netz, durchläuft den Router, und kommt von außen</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=Server-Administration&amp;diff=133&amp;oldid=prev"/>
		<updated>2026-04-15T13:14:45Z</updated>

		<summary type="html">&lt;p&gt;&amp;#039;&amp;#039;&amp;#039;Hairpin-NAT&amp;#039;&amp;#039;&amp;#039; (auch: NAT Loopback) beschreibt ein Netzwerk-Phänomen, bei dem Datenpakete aus einem lokalen Netz heraus ins Internet geroutet werden – obwohl Absender und Empfänger im selben lokalen Netz sitzen. Der Weg biegt sich wie eine Haarnadel zurück. Ursache ist der NAT-Router (z.B. eine FritzBox), der interne IP-Adressen in die öffentliche IP übersetzt. Spricht ein Gerät intern die öffentliche Domain an, verlässt der Traffic das lokale Netz, durchläuft den Router, und kommt von außen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Collabora und Nextcloud hinter einem Reverse Proxy – das Hairpin-NAT-Problem ==&lt;br /&gt;
&lt;br /&gt;
=== Das Problem ===&lt;br /&gt;
&lt;br /&gt;
Wer Nextcloud und Collabora (CODE) in getrennten Docker-Containern betreibt und beide hinter einem Reverse Proxy (z.B. Caddy, nginx, Traefik) versteckt, stößt früher oder später auf dieses Phänomen:&lt;br /&gt;
&lt;br /&gt;
* Office-Dokumente werden heruntergeladen statt geöffnet&lt;br /&gt;
* Oder: &amp;#039;&amp;#039;„Laden des Dokuments fehlgeschlagen – Unautorisierter WOPI-Host&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
* Die Nextcloud-Logs zeigen: &amp;lt;code&amp;gt;WOPI request denied from &amp;amp;lt;externe IP&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die externe IP des Servers landet in den Logs – obwohl Collabora und Nextcloud im selben Docker-Netz sitzen.&lt;br /&gt;
&lt;br /&gt;
=== Ursache ===&lt;br /&gt;
&lt;br /&gt;
Collabora bekommt vom Browser eine WOPI-URL mit der öffentlichen Domain:&lt;br /&gt;
&lt;br /&gt;
 https://nextcloud.example.com/index.php/apps/richdocuments/wopi/files/...&lt;br /&gt;
&lt;br /&gt;
Collabora löst diese Domain auf – und landet bei der &amp;#039;&amp;#039;&amp;#039;öffentlichen IP&amp;#039;&amp;#039;&amp;#039; des Servers. Der Request verlässt das Docker-Netz, geht über den Router, kommt von außen zurück, und der Reverse Proxy leitet ihn an Nextcloud weiter.&lt;br /&gt;
&lt;br /&gt;
Nextcloud sieht als Absender die &amp;#039;&amp;#039;&amp;#039;externe IP&amp;#039;&amp;#039;&amp;#039; – nicht die interne Docker-IP von Collabora. Die WOPI-Allowlist (&amp;lt;code&amp;gt;172.x.x.x/16&amp;lt;/code&amp;gt;) matcht nicht. Zugriff verweigert.&lt;br /&gt;
&lt;br /&gt;
Das nennt sich &amp;#039;&amp;#039;&amp;#039;Hairpin-NAT&amp;#039;&amp;#039;&amp;#039; (auch: NAT Loopback) – Traffic verlässt das lokale Netz und kommt von außen zurück, obwohl Quelle und Ziel im selben Netz sitzen.&lt;br /&gt;
&lt;br /&gt;
=== Lösung ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Docker-Netz auf festes Subnet festnageln ====&lt;br /&gt;
&lt;br /&gt;
Docker vergibt Subnets dynamisch. Nach einem Neustart kann sich die IP-Range ändern. Daher das Netz einmalig mit festem Subnet anlegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker network create \&lt;br /&gt;
  --driver=bridge \&lt;br /&gt;
  --subnet=172.20.0.0/16 \&lt;br /&gt;
  my-network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Script dafür anlegen damit es nach Neuinstallation reproduzierbar ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# create-network.sh&lt;br /&gt;
docker network create \&lt;br /&gt;
  --driver=bridge \&lt;br /&gt;
  --subnet=172.20.0.0/16 \&lt;br /&gt;
  my-network&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2. Nextcloud eine feste IP geben ====&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; von Nextcloud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    # ... weitere Konfiguration ...&lt;br /&gt;
    networks:&lt;br /&gt;
      my-network:&lt;br /&gt;
        ipv4_address: 172.20.0.10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Collabora die interne Nextcloud-IP beibringen ====&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;extra_hosts&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; von Collabora – damit Collabora die öffentliche Domain intern auflöst statt den Umweg über das Internet zu nehmen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  collabora:&lt;br /&gt;
    # ... weitere Konfiguration ...&lt;br /&gt;
    extra_hosts:&lt;br /&gt;
      - &amp;quot;nextcloud.example.com:172.20.0.10&amp;quot;&lt;br /&gt;
    networks: [my-network]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt löst Collabora &amp;lt;code&amp;gt;nextcloud.example.com&amp;lt;/code&amp;gt; intern auf &amp;lt;code&amp;gt;172.20.0.10&amp;lt;/code&amp;gt; auf – kein Umweg über Router und Internet.&lt;br /&gt;
&lt;br /&gt;
==== 4. WOPI-Allowlist in Nextcloud setzen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec nextcloud occ config:app:set richdocuments wopi_allowlist --value=&amp;quot;172.20.0.0/16&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen ob der Wert gesetzt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec nextcloud occ config:app:get richdocuments wopi_allowlist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Collabora-Umgebungsvariablen ====&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
environment:&lt;br /&gt;
  - aliasgroup1=https://nextcloud.example.com&lt;br /&gt;
  - domain=^nextcloud\.example\.com(:443)?$&lt;br /&gt;
  - extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Caddy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für Collabora nur die nötigen Endpunkte von außen erreichbar machen, alles andere blocken:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;caddy&amp;quot;&amp;gt;&lt;br /&gt;
collabora.example.com {&lt;br /&gt;
  @allowed path /browser/* /hosting/capabilities /hosting/discovery /cool/* /lool/*&lt;br /&gt;
  handle @allowed {&lt;br /&gt;
    reverse_proxy collabora:9980&lt;br /&gt;
  }&lt;br /&gt;
  respond 403&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Nextcloud die echte Client-IP weiterreichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;caddy&amp;quot;&amp;gt;&lt;br /&gt;
nextcloud.example.com {&lt;br /&gt;
  reverse_proxy nextcloud:443 {&lt;br /&gt;
    transport http {&lt;br /&gt;
      tls_insecure_skip_verify&lt;br /&gt;
    }&lt;br /&gt;
    header_up X-Real-IP {remote_ip}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zusammenfassung ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Problem !! Lösung&lt;br /&gt;
|-&lt;br /&gt;
| Externes Routing trotz internem Docker-Netz || Festes Subnet beim Netz-Anlegen&lt;br /&gt;
|-&lt;br /&gt;
| Collabora löst Nextcloud-Domain extern auf || &amp;lt;code&amp;gt;extra_hosts&amp;lt;/code&amp;gt; mit fester Nextcloud-IP&lt;br /&gt;
|-&lt;br /&gt;
| Nextcloud lehnt WOPI-Anfragen ab || WOPI-Allowlist auf Docker-Subnet setzen&lt;br /&gt;
|-&lt;br /&gt;
| IP ändert sich bei Container-Neustart || Feste IP für Nextcloud-Container vergeben&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Warum das in der offiziellen Dokumentation fehlt ===&lt;br /&gt;
&lt;br /&gt;
Nextcloud dokumentiert die WOPI-Allowlist. Collabora dokumentiert &amp;lt;code&amp;gt;aliasgroup1&amp;lt;/code&amp;gt;. Aber niemand erklärt was passiert wenn beide hinter demselben Reverse Proxy sitzen und Collabora intern auf Nextcloud zugreifen muss.&lt;br /&gt;
&lt;br /&gt;
Der typische Forenverlauf:&lt;br /&gt;
# „WOPI unauthorized&amp;quot; → „trag die IP ein&amp;quot;&lt;br /&gt;
# „Welche IP?&amp;quot; → Schweigen&lt;br /&gt;
# Drei Seiten später ungelöst&lt;br /&gt;
# Thread stirbt&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel soll das ändern.&lt;br /&gt;
&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/office/installation.html Nextcloud Office – offizielle Dokumentation]&lt;br /&gt;
* [https://sdk.collaboraonline.com/docs/installation/CODE_Docker_image.html Collabora CODE Docker – offizielle Dokumentation]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Nextcloud]]&lt;br /&gt;
[[Kategorie:Docker]]&lt;br /&gt;
[[Kategorie:Collabora]]&lt;br /&gt;
[[Kategorie:Reverse Proxy]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>