Hallo in die Runde (ja, mich gibt es noch
),
mir ist heute ein sehr verrücktes Verhalten auf einem Server begegnet, welches ich gerne mal mit dem Schwarmwissen hier technisch etwas ausdiskutieren und analysieren wollte.
Seit einigen Tagen hat sich ein Debian Trixie basierter VPS beschwert, dass dort keine Nextcloud App Updates mehr installiert werden konnten. Beim Downloadversuch des entsprechenden tar-Archivs kam es zu einem TLS Handshake Failure. Der Downloadversuch an dieser Stelle erfolgte über php8.4-curl.
Zum Debugging habe ich dann mit curl und wget auf der Bash versucht, eben jenes tar-Archiv herunterzuladen, was funktionierte. Danach probierte ich, das ganze auf IPv4 oder IPv6 einzuschränken - das Problem tauchte nur bei IPv6 auf... und ab hier wird es verrückt, da GitHub (wie ihr vielleicht wisst) nur IPv4 anbietet. Allerdings haben sowohl curl, als auch wget auf zwei Cloudflare IPv6 Adressen aufgelöst.
Wenn ich allerdings github.com gegen die Netcup DNS Server (und auch andere DNS Server) manuell mit dig/host/nslookup aufgelöst habe, dann kam (so wie es auch sein muss), ein NXDOMAIN zurück. Ab dem Punkt habe ich dann langsam an mir selbst gezweifelt, den kompletten Server auf den Kopf gestellt, wenngleich ich wusste, dass da keine Konfiguration sein kann, welche quer schießt, weil alles meinem Standardsetup enspricht und sich weitere Server, die ähnlich aufgesetzt waren, eben nicht so verhalten haben.
Zur Problemlösung: Nehmen wir mal an, der Hostname des Servers ist srv01 und er hängt unter der Domain example.org - dementsprechend habe ich den FQDN auf srv01.example.org gesetzt und die Suchdomain in der /etc/resolv.conf auf example.org gesetzt. In meinem Falle war die Domain nicht von mir verwaltet, und irgendein spezieller Spezialexperte hat einen Wildcard-Record mit Ziel Cloudflare eingerichtet. Dadurch wurde, nachdem der Request auf den AAAA Record von github.com mit NXDOMAIN beantwortet wurde, anstatt des A Records von github.com der AAAA Record von github.com.example.org aufgelöst.
Am Ende konnte ich das Problem recht einfach lösen, indem ich den sowieso nicht zwingend benötigten search-Eintrag aus der resolv.conf rausgeschmissen habe.
Aber ich habe Fragen... einige. Warum verhält sich php8.4-curl eben genau so? Meine Erwartung wäre eine Auflösung in folgender Reihenfolge: AAAA, A, AAAA auf search-Domain, A auf search-Domain
Und insbesondere - warum verhalten sich curl und wget auf der Bash anders? Dort hatte ich das Verhalten nur, wenn ich explizit den -6 Parameter mitgegeben habe. Ich hätte außerdem erwartet, dass PHP 8.4-curl am Ende nur ein "Frontend" für libcurl ist, gleichermaßen wie die CLI Applikation curl genauso nur ein "Frontend" für libcurl ist, und ich dementsprechend ein einheitliches Verhalten vorfinde - oder habe ich da einen Denkfehler?
Bin ich mit meiner Erwartungshaltung da alleine oder seht ihr das auch so? Und hat da evtl. jemand tiefergreifendes Wissen, um das Verhalten zu erklären?