Curl: "Could not resolve host"

Hallo,

ich habe ein merkwürdiges Problem, das intermittierend immer wieder auftritt.

Ich habe in diversen Module url-Aufrufe und hier mir bei diversen Hosts ab und an folgendes gemeldet: „Could not resolve host xxx“.
Ich habe inzwischen verschiedene Prüfungen eingebaut, u.a. machen ich im Fall des CURL-Error 6 (CURLE_COULDNT_RESOLVE_HOST) ein dns_get_records().

Der prototypische Code:


        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $wstatus = curl_exec($ch);
        $cerrno = curl_errno($ch);
        $cerror = $cerrno ? curl_error($ch) : '';
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $cinfo = curl_getinfo($ch);
        curl_close($ch);

        if ($cerrno) {
            $err = ' => got curl-errno ' . $cerrno . ' (' . $cerror . ')';
            if ($cerrno == 6 /* CURLE_COULDNT_RESOLVE_HOST */) {
                $err .= PHP_EOL;
                $err .= 'curl_info=' . print_r($cinfo, true) . PHP_EOL;
                if (preg_match('?^.*://([^/]*)|(.*)$?', $url, $r)) {
                    $host = $r[1];
                    $err .= PHP_EOL;
                    $err .= 'host=' . $host . ': dns-lookup ';
                    $dns_records = @dns_get_record($host, DNS_ALL);
                    if ($dns_records == false) {
                        $err .= 'failed' . PHP_EOL;
                    } else {
                        $err .= print_r($dns_records, true) . PHP_EOL;
                    }
                }
            }
            $this->SendDebug(__FUNCTION__, $err, 0);
            $this->LogMessage($err, KL_WARNING);

Das typischer Intervall ist 5-minütlich (eine der URL’s auch minütlich).

Und erstaunlicherweise sind die DNS-Records immer mit validen Daten gefüllt.

Zudem mache ich jede Minuten ein Anruf von gethostbyname() auf die auffällig gewordenen Hostname. Auch hier sind mir noch keine Problem gemeldet worden.

Ich habe bereits mit


curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, x);

experimentiert, wobei ich Werte von 0…2 probiert habe - ohne sichtbaren Erfolg.

Als DNS-Server fungiert mein Router (Synology RT2600), der ich i.d.R. über pi-hole anspreche (habe ich hatürlich auch schon ausgeschaltet).
Der Router hat als DNS-Server 1.1.1.1 bzw auch testhalber 8.8.8.8 (Google DNS-Server) eingetragen.
Ich benutze nur IPV4.
Mein DNS-Server auf dem IPS (Ubuntu) macht kein lokales Caching (mehr).

Auf Systemebene hat nslookup immer funktioniert, wobei die Aussagekraft natürlich immer begrenzt ist, weil ja die Überprüfungen nie zum gleichen Zeitpunkt passieren wie der CURL-Aufruf.

Kennt irgendjemand ein solches Problem?

Danke & Gruß
demel

Im Prinzip ja, aber extrem selten.

Ich hole einige externe Bilder über URLs und habe da vereinzelte ähnliche Fehlermeldungen in meinen Logs, aber wirklich sehr selten.

Aber bisher nicht weiter analysiert, da sind doch ein paar (zuviele) Komponenten beteiligt :eek:.