Ich möchte Haproxy so konfigurieren , dass es an alle Schnittstellen (dh und ) sowohl an einen tcp
als auch an einen tcp6
Socket bindet .0.0.0.0:80
:::80
Dieses Ziel konnte ich mit folgenden Einstellungen erreichen:
listen web
bind :80 v4v6
bind :::80 v6only
Gibt es einen kürzeren Weg als diesen?
Ich erwarte, dass es sich anders verhält, aber das v4v6
Schlüsselwort bewirkt , dass Haproxy nur an einen v4-Socket gebunden wird.
bind :::80 v4v6
?Antworten:
Gehen Sie folgendermaßen vor, um IPv6 und IPv4 auf demselben Port abzuhören:
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.
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
:Die folgenden drei Formen sind also alle gleichwertig und werden von HAProxy als IPv4 interpretiert:
Als nächstes gibt es einen Satz in den Dokumenten, der
v4v6
isoliert gelesen werden könnte, um anzuzeigen, dassv4v6
möglicherweise eine der oben genannten bind-Anweisungen zum Abhören von IPv6 verwendet werden kann ...... hmmm, aber ich vermute, dass dies tatsächlich "die v6-Standardadresse" bedeutet (
::
) ...... und jetzt vermute ich es noch mehr ...
Es sieht also so aus, als würden
v4v6
nurbind
Direktiven geändert , die die IPv6-Standardempfangsadresse angeben::
(die dritte:
ist das Trennzeichen zwischen der Adresse und dem Port) und für andere ignoriert.quelle
Die akzeptierte Antwort funktioniert bei mir nicht, zumindest mit haproxy-1.6.11p0 unter OpenBSD. Auch TL; DR. Mach einfach:
und es wird funktionieren:
quelle