Ob IPv4 oder IPv6: Hauptsache überhaupt eine IP

Ein Kunde kann sporadisch die von ihm dauerhaft benutzte Webseite nicht erreichen. Sie bleibt dann einige Stunden weg. Wechselt er den DNS Server auf Google oder OpenDNS geht es einige Stunden wieder. Der eigentliche Grund ist aber eine veraltete Firmware.

ZyXEL-IPv6

Es liegt offenbar kein DNS Fehler vor, denn eine IP Adresse aus dem Namen konnte ja ermittelt werden.

Allerdings ist die Adresse falsch. Sie entspricht nicht der IPv4 Adresse, die dem Webserver zugeordnet ist.

$ host www.???
www.??? has address 188.a.b.c
www.??? has IPv6 address 2a00:1158:x:y::z

Es liegt also der Verdacht nahe, daß das Kundensystem infiziert ist. Nein, eigentlich kann das nicht sein, denn die Fehlermeldung stammt von einer Firewall mit einem Squid. Dort ist mit einer Infektion nicht so schnell zu rechnen.

Stutzig macht etwas ganz anderes:

Dezimal 42 0 17 88
Hexadezimal 2a 00 11 58

Die verwendete IPv4 Adresse ist ganz offensichtlich der Anfang der IPv6 Adresse!

Irgendein beteiligtes Gerät macht sich hier die Arbeit zu einfach und hat von IPv6 im DNS keine Ahnung. Die Firewall läuft auf Linux das nicht im Verdacht steht, derartigen Unsinn zu machen. Bleibt die CPE, der Internetrouter.

Typischerweise läuft auf so einem CPE besonders sparsame und auf ihre Aufgabe zugeschnittene Firmware. Diese hat oft Fehler, die man auf Desktopsystemen oder Servern nie erwarten würden.

So könnte der Code für den DNS Dienst auf dem Router so aussehen:

struct dnsrecord * dns_entry;
struct in_addr * ip = NULL;

while(dns_entry = get_next_dns_entry(dns_packet)) {
   char * type = type2name(dns_entry->type);
   DEBUG("Processing DNS entry %s\n", type);
   switch(*type) {
     case 'A' : ip = (struct in_addr *)dns_entry->rdata;
     ...
   }
}

Beim Kunden steht ein ZyXEL P-870H, der kein IPv6 kennt. ZyXEL selbst ist sich aber des IPv6-Protokolls bewußt. Das IPv6-fähige Modell heißt P-870HN.

Bei anderen Routermodell tritt dieser Effekt aber ebenso auf. So gibt es Berichte, daß der Cisco 876 ebenfalls mal diesen Bug hatte.

Post a comment

Related content