Apache2 Webserver von extern nicht erreichbar

Rexus

Lt. Commander
Registriert
Mai 2006
Beiträge
1.401
Hallo zusammen,

ich setze gerade einen neuen Webserver mit Apache2 auf einem Raspberry 4 auf (Raspberry OS). Diesen möchte ich von extern über eine DDNS ansteuern. Der DDNS-Provider ist No-IP.com. Als Router verwende ich eine FritzBox 6660 Cable.

Nun habe ich folgendes Problem: Ich habe nur innerhalb meines Heimnetzwerks Zugriff auf den Server, und zwar sowohl unter der lokalen IP-Adresse (192.168.178.43) als auch unter der DDNS cirrus14.ddns.net (von No-IP.com). Es erscheint dann das gewohnte Fenster "Congratulations! Your Apache2 Server is working!", oder so ähnlich, im Browser.

Wenn ich von extern versuche, auf den Server zuzugreifen (z.B. per Smartphone mit mobilen Daten), dann erscheint ein "Connection Timeout" im Browser. Ich wurde auf den Fehler aufmerksam, als ich über Letsencrypt ein SSL-Zertifikat beantragen wollte, aber hier eine Fehlermeldung kam, dass kein "valider A-Record" für meine DDNS gefunden werden konnte - ich vermute, der Letsencrypt-Dienst findet den Server auch nicht (ist ja auch extern).

Auf No-IP.com steht, dass der DDNS aktiv ist, und auch die hinterlegte IP-Adresse stimmt mit der in meiner FritzBox angezeigten (externen) IP-Adresse überein.

In meiner FritzBox erhalte ich auf der Startseite die Meldung "DynDNS aktiviert, cirrus14.ddns.net, IPv4-Status: erfolgreich angemeldet, IPv6-Status: unbekannt". Unter Freigaben habe ich den Apache2-Server bzw. seine lokale IP-Adresse eingetragen und die Ports 80 und 443 freigegeben.

Meine Konfigurations-Datei des Apache2 Servers sieht wie folgt aus:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com


ServerAdmin webmaster@localhost
ServerName 192.168.178.43
ServerAlias cirrus14.ddns.net
DocumentRoot /var/www/html

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Ich hoffe, ihr könnt mir auf die Sprünge helfen, was ich übersehe bzw. was ich vergessen habe, einzurichten! Bin für jeden Tipp dankbar!
 
Ich vermute, du hast keine öffentliche IPv4 Adresse an deinem Anschluss, sondern eine CGNAT Adresse. Überprüfe das, bevor du weitermachst. Wenn das der Fall ist, musst du auf IPv6 umsteigen.
 
  • Gefällt mir
Reaktionen: GTrash81, madmax2010 und Web-Schecki
Rexus schrieb:
IPv6-Status: unbekannt".
setz das mal :)
Rexus schrieb:
dass kein "valider A-Record" für meine DDNS gefunden werden konnte - ich vermute, der Letsencrypt-Dienst findet den Server auch nicht
das ist schon nen schritt bevor LE mit deinem Webserver redet.

;; ANSWER SECTION:
cirrus14.ddns.net. 60 IN A 207.xx.xx.35
schaut jetzt nicht komplett falsch aus :)

wie lange hast du gewartet? Kann schonmal ein bisschen dauern, bis das alle mitbekommen haben
 
Hallo und danke für die Antworten.

riversource schrieb:
Ich vermute, du hast keine öffentliche IPv4 Adresse an deinem Anschluss, sondern eine CGNAT Adresse. Überprüfe das, bevor du weitermachst. Wenn das der Fall ist, musst du auf IPv6 umsteigen.
Die Vermutung konnte ich bestätigen: wieistmeineip.de zeigt mir eine andere IP-Adresse an, als im Router-Setup hinterlegt ist.

Leider stimmt noch irgendwas nicht mit meiner IPv6-Konfiguration.

Inzwischen habe ich es hinbekommen, dass DynDNS immer die aktuelle IPv6-Adresse von meinem Internetzugang bekommt.
In der FritzBox steht nun:
DynDNSaktiviert, cirrus14.ddns.net, IPv4-Status: unbekannt, IPv6-Status: erfolgreich angemeldet
Wenn ich auf "Neu Verbinden" klicke, erhält meine FritzBox stets eine neue IPv6-Adresse. Auf No-IP.com wird die IPv6-Adresse aktualisiert (meine IPv4-Adresse ist statisch).

Nun muss ich noch den Apache2 Server für IPv6 konfigurieren. Laut diesem Link geht das ganz einfach. Ich habe die ports.conf-Datei (die über INCLUDE ports.conf in apache2.conf eingehängt wird) entsprechend angepasst:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

# Listen 80
Listen [::]:80

<IfModule ssl_module>
# Listen 443
Listen [::]:443
</IfModule>

<IfModule mod_gnutls.c>
# Listen 443
Listen [::]:443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Danach sudo service apache2 restart.

Wenn ich nun netstat -tln mache, sehe ich, dass TCP6 auf Port 80 aktiviert ist:
pi@raspberrypi:/etc/apache2 $ netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::443 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::5900 :::* LISTEN

Wenn ich im lokalen Netzwerk die Website [IPv6-Adresse-vom-Server] aufrufe, dann lande ich auf der "Everything is working!"-Page vom Apache2-Server. Also das ist schon mal ein gutes Zeichen: Der Server ist über IPv6 erreichbar. Was ich nun aber nicht verstehe: Wenn ich die DDNS im lokalen Netzwerk eingebe, lande ich auf einer Login-Seite der FritzBox. Ich werde nicht zum Apache2-Server weitergeleitet. Die Ports 80 und 443 sind aber nach wie vor für IPv4 und IPv6 im Router freigegeben.

Wenn ich von extern (z.B. mobiles Internet) die Domäne eingebe, dann erhalte ich weiterhin ein Connection Timeout.

Irgendwas fehlt also noch, habt ihr noch einen Tipp für mich?
 
Zuletzt bearbeitet:
Rexus schrieb:
Inzwischen habe ich es hinbekommen, dass DynDNS immer die aktuelle IPv6-Adresse von meinem Internetzugang bekommt.
Das hilft dir ja nicht. Bei IPv6 ist die herangehensweise komplett anders, als bei IPv4, es gibt kein NAT. Heißt: jeder Server hat seine eigene öffentliche IP, und es gibt keine Portweiterleitungen, sondern Portfreigaben. Bei ddns muss also die IP des Servers angegeben werden, nicht die des Routers.

Rexus schrieb:
Wenn ich die DDNS im lokalen Netzwerk eingebe, lande ich auf einer Login-Seite der FritzBox. Ich werde nicht zum Apache2-Server weitergeleitet.
Natürlich nicht, siehe oben. Du rufst die Adresse der Fritzbox auf, nicht die des Servers. Bei IPv6 ist das falsch.

Um deine Server-IPv6 auf einen ddns Anbieter zu bekommen, gibt es grundsätzlich zwei Möglichkeiten: Entweder der Server macht es selber, oder du richtest ddns bei einem Anbieter ein, der mit IPv6 Prefixes umgehen kann. Dann legst du selber die Rechner mit Host-ID an, und überlässt das Update des Prefixes wieder der Fritzbox. dynv6 ist ein gutes Beispiel dafür.

Rexus schrieb:
Wenn ich von extern (z.B. mobiles Internet) die Domäne eingebe, dann erhalte ich weiterhin ein Connection Timeout.
Was vermutlich heißt, dass das mobile Endgerät keine IPv6 hat. Die gibt es aber mittlerweile in allen deutschen Mobilfunknetzen. Du findest bestimmt eine Anleitung, es zu aktivieren.
 
  • Gefällt mir
Reaktionen: Web-Schecki und Holzkopf
Hallo,

riversource schrieb:
Um deine Server-IPv6 auf einen ddns Anbieter zu bekommen, gibt es grundsätzlich zwei Möglichkeiten: Entweder der Server macht es selber, oder du richtest ddns bei einem Anbieter ein, der mit IPv6 Prefixes umgehen kann. Dann legst du selber die Rechner mit Host-ID an, und überlässt das Update des Prefixes wieder der Fritzbox. dynv6 ist ein gutes Beispiel dafür.

Danke für den Tipp. So langsam verstehe ich, wie sich IPv6 und IPv4 unterscheiden.
Ich habe mir nun einen Hostname bei dynv6.com eingerichtet, und siehe da: Ich erreiche meinen Apache2-Server über die DDNS, sowohl aus dem lokalen Netzwerk, als auch aus dem mobilen Internet (vom Smartphone aus). "dig cirrus14.v6.rocks AAAA" zeigt immer auf die derzeitige IPv6-Adresse meines Servers - funktioniert also genau wie es soll.

Ein letzter Schritt fehlt mir allerdings noch:
Auf dem Server habe ich diverse "Unter"-Websites laufen, zum Beispiel cirrus14.v6.rocks/projekt1 , cirrus14.v6.rocks/projekt2.
Diese kann ich aus dem lokalen Netzwerk heraus problemlos aufrufen.
Allerdings habe ich von extern keinen Zugriff auf diese "Unter"-Websites. Im Browser erscheint die Meldung "Connection Timeout". Ich vermute, aus dem selben Grund schlägt wohl auch Letsencrypt nach wie vor fehl (geht auf hostname/.well-known).
Ich habe auf dem Server (Raspberry Pi) noch keine Firewall installiert, die da etwas blocken könnte. In der FritzBox habe ich den Server temporär und probeweise als "Exposed Host" konfiguriert, aber auch dann kann ich nicht auf cirrus14.v6.rocks/projekt1 zugreifen.
 
Das dürfte an der Apache Konfiguration liegen. Dafür bin ich aber kein Experte. Ich vermute, die externen IPs haben keine Berechtigung, auf /projekt[xyz] zuzugreifen.

Wenn der Zugriff auf die IP, den Port und den Webserver an sich funktioniert, dann ist IPv6 und ddns in Ordnung. Mehr kannst du da nicht machen. Der Zugriff auf irgendwelche Unterverzeichnisse auf dem Webserver ist Sache des Webservers.
 
Zurück
Oben