Para escutar na mesma porta para IPv6 e IPv4, use isto:
bind :::80 v4v6
Evidentemente, este foi um palpite intuitivo que parece ter sido correto ... mas em vez de apenas postular um palpite "sortudo" como resposta, mesmo que funcione, parece que eu deveria justificá-lo.
the v4v6 keyword makes haproxy bind to a v4 socket only.
Minha primeira intuição foi que não é v4v6
, mas o uso de :80
(ou, mais precisamente, o uso de nenhum endereço IP, apenas um número de porta) que faz com que esse soquete ouça apenas IPv4 .
Isso parece ser confirmado nos documentos para bind
:
address
is optional and can be a host name, an IPv4 address, an IPv6 address, or'*'
. It designates the address the frontend will listen on. If unset, all IPv4 addresses of the system will be-listened on. The same will apply for'*'
or the system's special address "0.0.0.0
". The IPv6 equivalent is '::'.http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (emphasis added)
Portanto, as três formas a seguir são todas equivalentes e são interpretadas como sendo IPv4 pelo HAProxy:
bind :80
bind *:80
bind 0.0.0.0:80
Em seguida, há uma frase nos documentos para v4v6
que pode ser lida isoladamente para indicar que v4v6
pode ser usado para estender uma das declarações de ligação acima para ouvir em IPv6 ...
v4v6
It is used to bind a socket to both IPv4 and IPv6 when it uses the default address.
... hmmm, mas eu suspeito que isso realmente significa "o endereço padrão da v6" ( ::
) ...
Doing so is sometimes necessary on systems which bind to IPv6 only by default.
... e agora, eu suspeito ainda mais ...
It has no effect on non-IPv6 sockets, and is overridden by the
v6only
option.http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Portanto, parece que v4v6
modifica apenas bind
diretivas que especificam o endereço de escuta padrão do IPv6, que é ::
(o terceiro :
é o separador entre o endereço e a porta) e é ignorado para os outros.