Problem und Ziel
Wir bekommen kein IPv6 von unserem ISP, daher habe ich einen IPv6-Tunnel, der gut funktioniert, aber natürlich nicht sehr schnell ist. Und nicht wirklich zuverlässig. Ich möchte IPv6 "nur für den Fall" zur Verfügung haben, möchte aber, dass bestimmte Hosts (Domänen) nur mit IPv4 verbunden werden.
Standardprotokoll
Es scheint mir, dass alle Anwendungen zuerst IPv6 versuchen; Dies ist wahrscheinlich eine glibc-Einstellung. Es wäre in Ordnung, wenn diese Standardeinstellung umgekehrt würde (für alle Anwendungen).
Netzfilter
Es wäre möglich, IPv6-Adressen / Netzwerke mit Netfilter zu blockieren, aber es gibt zwei Probleme:
- Würde dies zu einer Verzögerung führen, da die App auf ein IPv6-Timeout wartet, bevor sie IPv4 versucht?
- Einige Domänen scheinen gemischt zu sein, dass es wie Chaos aussieht. Das Trennen von google.com und youtube.com scheint etwas zu sein, das Sie nicht tun möchten, wenn Sie es vermeiden können.
Ich stelle nur fest, dass in der Manpage ip route
für den Routing-Typ Folgendes angegeben ist unreachable
:
Die lokalen Absender erhalten einen EHOSTUNREACH-Fehler.
Passiert das auch mit Netfilter DROPs oder REJECTs? Ein solcher Fehler sollte keine relevante Verzögerung verursachen.
DNS-Filterung
Eine andere Lösung (ziemlich einfach, wenn dies möglich ist) wäre das Filtern von AAAA-Datensätzen für bestimmte Domänen. Wenn dies nicht (einfach) möglich ist: Ist es möglich, den DNS-Server und Netfilter so zu verbinden, dass ich weiß, dass "IP-Adresse X zur Domäne Y gehört", damit ich sie zu Netfilter hinzufügen kann? Was ist eleganter, als alles zu protokollieren und das Protokoll zu erfassen?
Der Weg, den man gehen sollte?
Welche (anderen) Möglichkeiten gibt es und welche ist die einfachste?