Gehen Sie folgendermaßen vor, um IPv6 und IPv4 auf demselben Port abzuhören:
bind :::80 v4v6
Zugegeben, dies war eine intuitive Vermutung, die richtig zu sein scheint ... aber anstatt nur eine "glückliche" Vermutung als Antwort zu posten, scheint es, als ob ich es rechtfertigen sollte, obwohl es funktioniert.
Mit dem Schlüsselwort v4v6 wird Haproxy nur an einen v4-Socket gebunden.
Meine erste Intuition war, dass es nicht v4v6
nur die Verwendung von :80
(oder genauer gesagt, die Verwendung von gar keiner IP-Adresse, nur einer Portnummer) ist, die bewirkt, dass dieser Socket nur IPv4 abhört.
Dies scheint in den Dokumenten bestätigt zu sein für bind
:
address
ist optional und kann ein Hostname, eine IPv4-Adresse, eine IPv6-Adresse oder ein Name sein '*'
. Es gibt die Adresse an, die das Frontend abhört. Wenn nicht festgelegt, werden alle IPv4-Adressen des Systems abgehört. Gleiches gilt für '*'
oder die Sonderadresse " 0.0.0.0
" des Systems . Das IPv6-Äquivalent ist '::'.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (Hervorhebung hinzugefügt)
Die folgenden drei Formen sind also alle gleichwertig und werden von HAProxy als IPv4 interpretiert:
bind :80
bind *:80
bind 0.0.0.0:80
Als nächstes gibt es einen Satz in den Dokumenten, der v4v6
isoliert gelesen werden könnte, um anzuzeigen, dass v4v6
möglicherweise eine der oben genannten bind-Anweisungen zum Abhören von IPv6 verwendet werden kann ...
v4v6
Es wird verwendet, um einen Socket an IPv4 und IPv6 zu binden, wenn die Standardadresse verwendet wird.
... hmmm, aber ich vermute, dass dies tatsächlich "die v6-Standardadresse" bedeutet ( ::
) ...
Dies ist manchmal auf Systemen erforderlich, die standardmäßig nur an IPv6 gebunden sind.
... und jetzt vermute ich es noch mehr ...
Es hat keine Auswirkung auf Nicht-IPv6-Sockets und wird von der v6only
Option überschrieben .
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Es sieht also so aus, als würden v4v6
nur bind
Direktiven geändert , die die IPv6-Standardempfangsadresse angeben ::
(die dritte :
ist das Trennzeichen zwischen der Adresse und dem Port) und für andere ignoriert.
bind :::80 v4v6
?