Auflösung des Freifunkrouter-Hostnames liefert keine IPv6 Adresse

Thema hat jetzt nur am Rande etwas mit Freifunk zu tun, aber vielleicht hat doch jemand Ahnung. Angeregt durch die Umfrage IPv6 Verhältnis im Traffic habe ich mal geschaut, wie es im eigenen Netz mit IPv6 aussieht. Mein eigener Anschluss ist nativ IPv6 und IPv4 geht über einen DS-Lite Tunnel. Dabei habe ich festgestellt, dass gerade die Freifunk-Router Probleme machen. Die bekommen das IPv6 Prefix von der Fritz!Box und weisen sich dann eine v6 Adresse auf dem WAN-Interface zu, soweit alles ok. Die Adresse lässt sich auch pingen, soweit alle gut. Wenn ich aber ein Ping auf den Hostname des Freifunk-Router mache wird die IPv4 Adresse genommen. Der DNS der Fritzbox liefert nur die IPv4-Adresse. Das scheint auch ein Openwrt-Problem zu sein denn ein anderer Openwrt hat das selbe verhalten. Bei einem Raspberry Pie mit Raspberry Pi OS und ein Linux-PC liefert der DNS auch die v6 Adresse. Beim meinem Android-Handy hingegen auch nicht.

Ich habe keine Idee wie ich das Problem eingrenzen kann, da ich gar nicht genau weiß, wie der DNS-Server der Fritz!Box an den Hostnamen der Geräte kommt. Ich vermute das läuft über DHCPv6 wenn die Fritz!Box den Geräten den zugehörigen DNS-Server mitteilt. so ist es zumindest bei v4, aber vielleicht weiß da jemand mehr.

Moin,

habe Deinen Beitrag 4x gelesen und noch immer nicht verstanden, was Deine Frage ist.
Vielleicht konkretisierst Du die Frage noch mal für eingeschränkte Dilettanten wie mich?

Das einzige was ich ansatzweise verstanden habe: ping -6 auf den FF-Router driftet ins v4 ab?!?
Einen Ping auf die IPv6 meines Freifunkrouters (TP-Link TL-WR841N/ND v11) kann ich einwandfrei machen, geht kpl. über IPv6:

:~$ ping 2a03:2260:1005:0:9ade:d0ff:fe31:77b4
PING 2a03:2260:1005:0:9ade:d0ff:fe31:77b4(2a03:2260:1005:0:9ade:d0ff:fe31:77b4) 56 Datenbytes
64 Bytes von 2a03:2260:1005:0:9ade:d0ff:fe31:77b4: icmp_seq=1 ttl=57 Zeit=45.9 ms
64 Bytes von 2a03:2260:1005:0:9ade:d0ff:fe31:77b4: icmp_seq=2 ttl=57 Zeit=51.5 ms
64 Bytes von 2a03:2260:1005:0:9ade:d0ff:fe31:77b4: icmp_seq=3 ttl=57 Zeit=48.0 ms
64 Bytes von 2a03:2260:1005:0:9ade:d0ff:fe31:77b4: icmp_seq=4 ttl=57 Zeit=48.5 ms

Was war die eigentliche Frage??

Um es mal auf ein minimales beispiel herunterzubrechen:

nslookup „freifunkknoten“ liefert:

Server: 192.168.178.1
Address: 192.168.178.1#53

Name: „freifunkknoten“.fritz.box
Address: 192.168.178.25

Wenn ich das hingegen mit einem PC aus meinem lokalen Netz mache:

Server: 192.168.178.1
Address: 192.168.178.1#53

Name: „PC“.fritz.box
Address: 192.168.178.63
Name: „PC“.fritz.box
Address: 2a02:908:1062:eba0:cd7:625:833a:4796
Name: „PC“.fritz.box
Address: 2a02:908:1062:eba0:47ae:84ff:1b46:ff80

Hostnamen habe ich jeweils durch Platzhalter ersetzt. Man erkennt, dass nslookup auf den Freifunkknoten keine v6 Adresse liefert, was dazu führt, dass Verbindungen die den Hostnamen verwenden nur über v4 gehen. Warum ist das so?

Das könnte so sein, weil der Freifunk Router nur auf Router Advertisements hört und dort
kein DHCPv6 Client läuft. Ansonsten kann es auch gut sein, dass der DHCPv6 Client keinen
Hostnamen zum DHCPv6-Server schickt, das machen so aus Erfahrung bei IPv6 nur ca.
2 Geräte von 10. RFC4704 findet da kaum bis keine Anwendung (Android macht gar kein DHCPv6).

1 Like

Da hört mein Verständnis leider etwas auf. Ich dachte, per Router Advertisements könnte man nur Prefix und Standard-Gateway verteilen und für DNS bräuchte man dann zwingend DHCPv6, aber anscheinend gibt es mittlerweile auch die Option den DNS per Router Advertisement zu verteilen.

2 von 10 wäre auch in etwas meine Erfahrung. Ist halt ziemlich doof, da ich in meinem Netz mit vielen Geräten nicht mit IP-Adressen hantieren möchte, schon gar nicht bei IPv6. Daher habe ich hier viel IPv4-Traffic, wo eigentlich IPv6 möglich wäre.

Mit Privacy Extensions und SLAAC macht der Client halt alles selbst; wie das zukünftig weiter geht, falls v4 Mal Geschichte ist, wird man sehen. DHCPv6 macht Googles Android nicht, da bräuchte es ein, zwei große Anbieter, die nur DHCPv6 erlauben, um Google umzustimmen bei Android. Allerdings ist das wirklich mehr ein Heimnetzwerk- denn Freifunk-Thema.

Ich glaube es ist eher so, dass Google die Anbieter umgestimmt hat. Die hätten ja durchaus Interesse daran, die volle Kontrolle über die IP-Adressen zu haben. Aus Kundensicht ist es schon das richtige, dass sich SLAAC da durchgesetzt hat, nicht nur zum Datenschutz. Ich frage mich aber auch was für Google dagegen spricht zu sagen, wir unterstützen nur den DNS-Server per DHCPv6 zu beziehen und nicht Präfix und Default-Route. So war es ja ursprünglich im Standard vorgesehen.

Was ist jetzt das Thema hier?

„Freifunk-Router macht am WAN-Port kein dhcpv6 sondern nur SLAAC“ (und daher listet/findet die AVM-Fritzbox den Freifunk-Router im Heimnetzwerk nicht als ipv6-Client?)

Wenn ja: Wie Comancho geschrieben hat: Isso!
Abgesehen davon halte ich den Nutzen auch für vergleichsweise eingeschränkt, weil die Dienste, die auf dem WAN-Port dort verfügbar sind sich zumindest bei Standard-Gluon auf „ssh-port“ erschöpfen.

Ja ist kein Freifunk Thema im eigentlichen Sinne und wenn es nicht gewünscht ist, das näher zu diskutieren, soll hier auch Schluss sein. Ich hatte die Vorstellung, dass Freifunk-Router bei IPv6 mit gutem Beispiel voran gehen sollten, aber die Situation ist wohl komplexer.

Wir können ja noch ein wenig Freifunk dazu mixen :slight_smile:
Also auf unseren DNS-Servern im Freifunk benutzen wir ein kleines hässliches Script,
um die Router per IPv6-DNS zu Registrieren.

#!/bin/bash

ZONE=$(/usr/bin/pdnsutil list-zone ipv6.ff-en.de)
NODES_ARRAY=$(/usr/bin/curl -s https://karte.ff-en.de/data/meshviewer.json | /usr/bin/jq -r -c '.nodes[] | select(.hostname!="broker2.ff-en.de") | ["\(.hostname) \(.addresses[0])"] | @csv')
eval "array=($NODES_ARRAY)"

craft_dns (){
  hostname=$1
  address=$2
  hostname=$(echo $hostname | tr [[:upper:]] [[:lower:]] | sed 's/_/-/g'| grep -P '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$')
  if [[ "$hostname" == "" ]]; then
          return
  fi
  if [[ $ZONE == *"$hostname"* ]]; then
    /usr/bin/pdnsutil delete-rrset ipv6.ff-en.de $hostname AAAA > /dev/null 2>&1;
    /usr/bin/pdnsutil add-record ipv6.ff-en.de $hostname AAAA 420 $address > /dev/null 2>&1;
  else
    /usr/bin/pdnsutil add-record ipv6.ff-en.de $hostname AAAA 420 $address > /dev/null 2>&1;
  fi
}

for host in "${array[@]}"; do
  craft_dns $host;
done
2 Likes

Das scheint nicht so zu sein, wenn man mal einen Blick in /etc/config/network wirft:

config interface 'wan6'
        option ifname 'br-wan'
        option ip6table '1'
        option sourcefilter '0'
        option peerdns '0'
        option reqprefix 'no'
        option proto 'dhcpv6'

Hier wird zumindest dhcpv6 explizit auf dem Interface konfiguriert. Allerdings wird auch konfiguriert, dass der zugewiesene DNS nicht genutzt werden soll. Vielleicht hängt es damit zusammen.

Eine sehr gewagte These; welche Heimrouter basteln sich ein lokales DNS basierend auf Adressanfragen zusammen, Fritz!OS-basierte CPE ausgenommen? DNS ist meines Erachtens etwas, was von der Administration gepflegt gehört, nicht irgendwie von Geräten zusammengestückwerkt. IMHO, YMMV.

Anyway, wie Du schon schriebst, ist das ein Thema von OpenWrt, da das Verhalten auch mit „reinem“ OpenWrt an Deiner Fritz!Box auftritt.

Das war nicht meine Frage.
Meine Frage war, ob ich deine Frage richtige verstanden habe, dann würde ich darauf näher eingehen. Ansonsten bin ich nämlich „auf dem Falschen Dampfer“ und würde nach einer anderen Umschreibung des Problems fragen.

Das Fehlerpotential (oder auch ddosbarkeit durch freidrehende IOT-Geräte) ist hoch, wenn man im Heimnetz DNS „per Zeroconf-Announce“ macht.
Aber ja, Openwrt kann man auch RDNS beibiegen. Muss man halt anstellen.

1 Like

Keine Ahnung, aber bei ganz vielen IoT-Sachen, Drucker, NAS usw. wird das in der Anleitung als Standardweg beschrieben sein Gerät wiederzufinden wenn man es ins Netz gehangen hat. Daher gehe ich davon aus, das es schon üblich ist. Das geht aber nur, weil es überall zumindest zusätzlich IPv4 per DHCP gibt.

Kann man so sehen. Aber natürlich würde das, das Aus für DNS in Heimnetz bedeuten. Interessante Frage ist, ob es da ein besseres Konzept gibt für diese Anwendungsfälle? Vielleicht mDNS? Funktioniert aber meiner Erfahrung nach noch viel schlechter. Ehrlich gesagt hätte ich keine Ahnung wie ich die IPv6 Adresse eines Gerätes herausfinden sollte zu dem ich nicht irgendeine anderweitige Verbindung habe. Vielleicht mit Port-Mirroring die Pakete mitschneiden und hoffen, das das Gerät Daten sendet.

Ich persönlich habe noch einen rest Hoffung, dass man es mit einer anderen Interface-Konfiguration hin bekommt, aber selbst wenn, würde ich das nicht Freifunk anlasten.

Nach „gerätename.fritz.box“ zu suchen? Interessant. Oder verwechselst Du das mit mDNS & .local? Im Falle von SLAAC gar nicht, außer der Heimrouter trackt z. B. MAC-Adressen. Heißt aber auch, wenn man v6 unter Kontrolle halten will, führt kein Weg an DHCPv6 und Firewallfreischaltung auf Basis der DHCPv6-Anfragen vorbei? Aber das ist ein anderes Thema.

Nein nur Gerätename im browser eingeben. Ich hatte ehrlich gesagt lange Zeit keine Ahnung, wie das genau funktioniert und dachte auch, das würde irgendwie dezentral per mDNS laufen aber offenbar scheint gerätename in meinem Lan ein synonym für gerätename.fritz.box zu sein während gerätename.local was ganz anderes ist, nämlich in der Tat mDNS. Aber vielleicht weiß da jemand mehr.