Para escuchar en el mismo puerto para IPv6 e IPv4, use esto:
bind :::80 v4v6
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.
La palabra clave v4v6 hace que el haproxy se una solo a un socket v4.
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
:
address
es opcional y puede ser un nombre de host, una dirección IPv4, una dirección IPv6 o '*'
. Designa la dirección en la que escuchará la interfaz. Si no está configurado, se escucharán todas las direcciones IPv4 del sistema. Lo mismo se aplicará a '*'
la dirección especial del sistema " 0.0.0.0
". El equivalente de IPv6 es '::'.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (énfasis agregado)
Por lo tanto, las siguientes tres formas son todas equivalentes y HAProxy las interpreta todas como IPv4:
bind :80
bind *:80
bind 0.0.0.0:80
A continuación, hay una oración en los documentos que v4v6
podría leerse de forma aislada para indicar que v4v6
podría utilizarse para extender una de las declaraciones de enlace anteriores para escuchar en IPv6 ...
v4v6
Se utiliza para vincular un socket a IPv4 e IPv6 cuando usa la dirección predeterminada.
... hmmm, pero sospecho que esto realmente significa "la dirección predeterminada de v6" ( ::
) ...
Hacerlo a veces es necesario en sistemas que se unen a IPv6 solo de forma predeterminada.
... y ahora, sospecho que aún más ...
No tiene ningún efecto en los sockets que no son IPv6, y se anula con la v6only
opción.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Por lo tanto, parece que v4v6
solo modifica las bind
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.
bind :::80 v4v6
?