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?
Antworten:
Sie können die Adressauswahl mit steuern
/etc/gai.conf
. Die Konfigurationsdatei ist gut dokumentiert und enthält bereits die Standardeinstellungen, sodass Sie einfach mit dem Optimieren beginnen können.Die interessanten Standardeinstellungen hier sind:
In der letzten Zeile werden alle IPv4-Adressen am wenigsten bevorzugt.
Wenn Sie allen IPv4 eine höhere Präferenz geben möchten, können Sie dies ändern in:
Wenn Sie nur bestimmten IPv4-Adressen oder -Blöcken eine höhere Präferenz geben möchten, können Sie diese ebenfalls angeben. Denken Sie daran, dass Sie ein IPv4-zugeordnetes IPv6 in hex verwenden müssen.
Um 203.0.113.0/24 gegenüber allen IPv6-Versionen zu bevorzugen, fügen Sie Folgendes hinzu:
Starten Sie laufende Anwendungen neu, damit sie die von Ihnen vorgenommenen Änderungen übernehmen.
Auf von Debian abgeleiteten Systemen
/etc/gai.conf
ist bereits vorhanden. Auf von Red Hat abgeleiteten Systemen fehlt es, aber eine Beispieldatei befindet sich unter/usr/share/doc/glibc-common-*/gai.conf
; kopiere es einfach nach/etc
.quelle
OK, hier ist eine ganz andere Antwort.
Platzieren Sie die fehlerhaften Hosts mit beschissener IPv6-Konnektivität
/etc/hosts
mit der entsprechenden IPv4-Adresse.Zum Beispiel:
Denken Sie daran, sie zu entfernen, wenn sich ihre (in diesem Fall) oder Ihre IPv6-Konnektivität verbessert.
quelle
/etc/hosts
. Wenn niemand auf "DNS-Serversoftware XY kann auf diese Weise filtern !!" Ich werde wahrscheinlich damit enden.