• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Lighttpd im Dual-Stack Betrieb

ed1949

Well-Known Member
Themenstarter #1
Hallo,

hat es hier schon mal jemand geschafft, den Lighttpd im Dual-Stack Betrieb dazu zu bewegen, auf IPv6 und IPv4 zu arbeiten? Ich nutze übrigens die 8.1 und Lighttpd aus den Packages in einer Jail. Der Server arbeitet ausschliesslich mit https auf Port 443.

Ich habe es mit dem folgenden Konfigurationsteil versucht. Dieser wurde auch in einem älteren Bugreport des Lighttpd genannt.

Code:
server.use-ipv6 = "enable"
$SERVER["socket"] == "0.0.0.0:443" { }
Ohne diesen Teil arbeitet der Server problemlos auf IPv4. Wenn ich diese beiden Zeilen hinzufüge, hört der Server auf IPv4 und IPv6. Die IPv6 Verbindung funktioniert wie davor IPv4. Mit IPv4 bekomme ich zwar noch eine TCP Verbindung (ESTABLISHED), es fliessen jedoch keine Daten. Im Lighttpd Log taucht kein Hinweis auf, dass auf IPv4 irgend etwas passiert - auch kein Fehler.
 

ed1949

Well-Known Member
Themenstarter #2
Jetzt habe ich den Test mal anders herum gemacht und die Konfigurationszeilen aus dem letzten Post durch ein explizites IPv6 Binding ersetzt:

Code:
$SERVER["socket"] == "[::]:443" { }
Nun hört der Server ebenfalls auf beiden Stacks/Adressen, aber dafür funktioniert die IPv4, während ich auf der IPv6 über einen TCP ESTABLISHED nicht hinauskomme.
 

seven0fx

informierter Heise-Leser
#3
Also ich habe hier unter Dualstack keine Probleme, allerdings auf Port 80(http).
Mit beiden Protokollen serviert er mir die Seiten.

Code:
# sockstat |grep lighttpd
www      lighttpd   93266 4  tcp6   *:80                  *:*
www      lighttpd   93266 5  tcp4   *:80                  *:*
# pkg_info |grep lighttpd
lighttpd-1.4.26_3   A secure, fast, compliant, and very flexible Web Server
Vielleicht ein Zertifikat Problem?
 

ed1949

Well-Known Member
Themenstarter #4
Ha, das ist es: SSL und das Zertifikat haben etwas damit zu tun. Es scheint, dass der $SERVER["socket"] Match die meisten globalen Optionen (server.document-root etc.) übernimmt, nicht aber die ssl.* Optionen. Damit sieht die Lösung nun so aus und funktioniert auch:

Code:
$SERVER["socket"] == "[::]:443" {
  ssl.engine = "enable"
  ssl.pemfile = "/usr/local/etc/certificate.pem"
}
Bei anderen Optionen ist es so, dass die globale Konfiguration gültig ist, bis ein Match Block diese überschreibt. Nur bei SSL scheint das anders zu sein. Also eine logische Konfiguration ist was anderes. Immerhin funktioniert es jetzt.