Quiero configurar haproxy para unirse a una tcp
, así como tcp6
socket en todas las interfaces (es decir, 0.0.0.0:80
y :::80
).
Pude alcanzar este objetivo con la siguiente configuración:
listen web
bind :80 v4v6
bind :::80 v6only
¿Hay alguna forma más corta que esta?
Si bien espero que se comporte diferente, la v4v6
palabra clave hace que haproxy se una solo a un socket v4.
bind :::80 v4v6
?Respuestas:
Para escuchar en el mismo puerto para IPv6 e IPv4, use esto:
Es cierto que esta fue una suposición intuitiva que parece haber sido correcta ... pero en lugar de simplemente publicar una suposición "afortunada" como respuesta, aunque funciona, parece que debería justificarla.
Mi primera intuición fue que no es
v4v6
sino el uso de:80
(o, más precisamente, el uso de ninguna dirección IP, solo un número de puerto) lo que hace que este socket escuche solo en IPv4.Esto parece confirmarse en los documentos para
bind
:Por lo tanto, las siguientes tres formas son todas equivalentes y HAProxy las interpreta todas como IPv4:
A continuación, hay una oración en los documentos que
v4v6
podría leerse de forma aislada para indicar quev4v6
podría utilizarse para extender una de las declaraciones de enlace anteriores para escuchar en IPv6 ...... hmmm, pero sospecho que esto realmente significa "la dirección predeterminada de v6" (
::
) ...... y ahora, sospecho que aún más ...
Por lo tanto, parece que
v4v6
solo modifica lasbind
directivas que especifican la dirección de escucha predeterminada de IPv6, que es::
(la tercera:
es el separador entre la dirección y el puerto), y se ignora para los demás.fuente
La respuesta aceptada no funciona para mí, al menos con haproxy-1.6.11p0 en OpenBSD. Además, TL; DR. Solo haz:
y funcionará:
fuente