Frage

In IPv6-Netzwerk wird der IPV6_V6ONLY Flag verwendet, um sicherzustellen, dass ein Socket nur IPv6 verwenden, und insbesondere, dass IPv4-zu-IPv6-Mapping wird nicht für diese Buchse verwendet werden. Auf vielen Betriebssystemen wird die IPV6_V6ONLY standardmäßig nicht gesetzt, sondern auf einigen OS (z Windows 7), es ist standardmäßig eingestellt ist.

Meine Frage ist: Was war die Motivation dieses Flag für die Einführung? Gibt es etwas, über IPv4-zu-IPv6-Zuordnung, die Probleme verursacht wurde, und damit die Menschen einen Weg benötigte es zu deaktivieren? Es scheint mir, dass, wenn jemand nicht wollte, dass IPv4-zu-IPv6-Mapping zu verwenden, sie könnten einfach keine IPv4-mapped IPv6-Adresse angeben. Was soll ich hier fehlt?

War es hilfreich?

Lösung

Ich weiß nicht, warum es Standard sein würde; aber es ist die Art von Fahnen, dass ich immer explizit setzen würde, egal, was die Standardeinstellung ist.

Über warum gibt es sie in erster Linie denke ich, dass es Sie vorhandene IPv4-only-Server halten können, und nur neue auf dem gleichen Port laufen, aber nur für IPv6-Verbindungen. Oder vielleicht der neue Server einfach Proxy-Clients auf den alten, so dass die IPv6-Funktionalität einfach und schmerzlos hinzufügen, um alte Dienste.

Andere Tipps

Nicht alle IPv6-fähig Plattformen unterstützen dualstack Steckdosen so wird die Frage, wie Sie benötigen Anwendungen IPv6-Kompatibilität maximimize entweder wissen dualstack unterstützt wird oder binden separatly wenn es nicht? Die einzige universelle Antwort ist IPV6_V6ONLY.

Eine Anwendung ignoriert IPV6_V6ONLY oder geschrieben, bevor dualstack fähig IP-Stacks vorhanden finden Bindung separatly bis V4 in einer dualstack Umgebung als IPv6 nicht dualstack Socket binden an IPv4 verhindern IPv4-Socket zu binden. Der Antrag kann auch nicht aufgrund Protokoll- oder Anwendungsebene IPv4 über IPv6 erwarten Adressierung Bedenken oder IP-Zugriffskontrollen.

Diese oder ähnliche Situationen am ehesten aufgefordert, MS et al 1 auf default sogar tho RFC3493 0 erklärt Verzug. 1 theoretisch maximiert Rückwärtskompatibilität. Insbesondere Windows XP / 2003 unterstützt nicht dualstack Sockets.

Es gibt auch keinen Mangel an Anwendungen, die leider müssen untere Schicht Informationen passieren korrekt zu arbeiten und so kann diese Option für die Planung einer IPv4 / IPv6-Kompatibilität Strategie sehr nützlich sein, die am besten die Anforderungen und die bestehenden Codebases.

Der Grund am häufigsten für den Fall erwähnt, wo der Server irgendeine Form von ACL (Access Control List) hat. Zum Beispiel vorstellen, einen Server mit Regeln wie:

Allow 192.0.2.4
Deny all

Es läuft auf IPv4. Nun, jemand läuft es auf einer Maschine mit IPv6 und je nach einigen Parametern sind IPv4-Anforderungen auf dem IPv6-Socket akzeptiert, abgebildet, wie :: 192.0.2.4 und dann nicht mehr durch die erste ACL abgestimmt. Plötzlich würde der Zugriff verweigert.

Als explizit in der Anwendung (mit IPV6_V6ONLY) das Problem lösen würde, was standardmäßig das Betriebssystem hat.

Für Linux, beim Schreiben eines Dienstes, der zuhört auf beiden IPv4- und IPv6-Buchsen auf der gleichen Service-Port, z.B. Port 2001, MÜSSEN Sie setsockopt (s, SOL_IPV6, IPV6_V6ONLY, & ein, sizeof (eins)) nennen; auf dem IPv6-Buchse. Wenn nicht, schlägt der bind () Betrieb für den IPv4-Buchse mit „Adresse bereits verwendet“.

Es gibt plausible Möglichkeiten, in denen der (schlecht genannt) „IPv4-Mapped“ Adressen verwendet werden können schlecht konfigurierte Systeme zu umgehen, oder schlechte Stapel oder sogar in einem gut konfigurierten System erfordert möglicherweise nur belastende Mengen an bugproofing. Ein Entwickler könnte wünschen, dieses Flag verwenden, um ihre Anwendung sicherer, indem nicht die Nutzung dieser Teil der API zu machen.

Siehe auch: http: // ipv6samurais.com/ipv6samurais/openbsd-audit/draft-cmetz-v6ops-v4mapped-api-harmful-01.txt

Stellen Sie sich ein Protokoll, das eine Netzwerkadresse in dem Gespräch enthält, z.B. Der Datenkanal für FTP. Bei Verwendung von IPv6 Sie gehen, um die IPv6-Adresse zu senden, wenn die Empfängeradresse ein IPv4 zugeordnet sein geschieht, wird es keine Möglichkeit hat, an diese Adresse zu verbinden.

Es ist ein sehr häufiges Beispiel, wo die Dualität des Verhaltens ist ein Problem. Der Standard getaddrinfo() Anruf mit AI_PASSIVE Flag bietet die Möglichkeit, einen nodename Parameter und gibt eine Liste von Adressen weitergeben zu hören. Ein besonderer Wert in Form einer NULL-Zeichenfolge für akzeptiert nodename und impliziert auf Wildcard-Adressen zu hören.

Auf einigen Systemen 0.0.0.0 und :: in dieser Reihenfolge zurückgegeben. Bei Dual-Stack-Buchse standardmäßig aktiviert ist und Sie nicht setzen die Buchse IPV6_V6ONLY, nicht der Server eine Verbindung zu 0.0.0.0 und dann auf Dual-Stack-:: verbinden und somit (1) funktioniert nur auf IPv4 und (2) meldet Fehler.

würde ich die Reihenfolge falsch prüfen, wie IPv6 wird erwartet, vorzuziehen. Aber selbst wenn Sie zum ersten Dual-Stack-:: versuchen, und dann nur IPv4-0.0.0.0, der Server noch meldet einen Fehler für den zweiten Anruf.

Ich persönlich halte die ganze Idee von einem Dual-Stack-Buchse ein Fehler. In meinem Projekt möchte ich lieber immer explizit IPV6_V6ONLY das zu vermeiden. Einige Leute anscheinend sah es als eine gute Idee, aber in diesem Fall würde ich wahrscheinlich ausdrücklich ungesetzt IPV6_V6ONLY und übersetzen NULL direkt an 0.0.0.0 den getaddrinfo() Mechanismus umgangen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top