Vincular a todas as interfaces para IPv4 e IPv6 no haproxy


13

Quero configurar haproxy para vincular a um tcp, bem como tcp6tomada em todas as interfaces (isto é, 0.0.0.0:80e :::80).

Consegui atingir esse objetivo com as seguintes configurações:

listen web
  bind :80 v4v6
  bind :::80 v6only

Existe alguma maneira mais curta do que isso?

Embora eu espere que ele se comporte de maneira diferente, a v4v6palavra - chave faz com que o haproxy se ligue apenas a um soquete v4.


3
Que tal bind :::80 v4v6?
Michael - sqlbot

Na verdade, isso funciona. Obrigado! Você pode arquivá-lo como resposta, por favor, para que eu possa lhe dar crédito?
precisa saber é o seguinte

Respostas:


25

Para escutar na mesma porta IPv6 e IPv4, use este:

bind :::80 v4v6

É certo que esse foi um palpite intuitivo que parece estar correto ... mas, em vez de apenas postar um palpite "sortudo" como resposta, mesmo que funcione, parece que eu deveria justificá-lo.

a palavra-chave v4v6 torna o haproxy vinculado apenas a um soquete v4.

Minha primeira intuição foi que não é v4v6apenas o uso :80(ou, mais precisamente, o uso de nenhum endereço IP, apenas um número de porta) que faz com que esse soquete escute apenas no IPv4.

Isso parece confirmado nos documentos para bind:

addressé opcional e pode ser um nome de host, um endereço IPv4, um endereço IPv6 ou '*'. Designa o endereço no qual o front-end escutará. Se desativado, todos os endereços IPv4 do sistema serão ouvidos. O mesmo se aplica '*'ao endereço especial do sistema ou " 0.0.0.0". O equivalente ao IPv6 é '::'.

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (ênfase adicionada)

Portanto, as três formas a seguir são todas equivalentes e são interpretadas como IPv4 pelo HAProxy:

bind :80
bind *:80
bind 0.0.0.0:80

Em seguida, há uma frase nos documentos para que v4v6poderia ser lida isoladamente para indicar que v4v6pode ser útil estender uma das instruções de ligação acima para escutar no IPv6 ...

v4v6

É usado para ligar um soquete ao IPv4 e IPv6 quando ele usa o endereço padrão.

... hmmm, mas suspeito que isso realmente significa "o endereço padrão da v6" ( ::) ...

Às vezes, é necessário fazer isso em sistemas que se ligam ao IPv6 apenas por padrão.

... e agora, eu suspeito ainda mais ...

Não tem efeito em soquetes não IPv6 e é substituído pela v6onlyopção.

http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1

Portanto, parece que v4v6apenas modifica binddiretivas 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 por outras pessoas.


4

A resposta aceita não funciona para mim, pelo menos com o haproxy-1.6.11p0 no OpenBSD. Além disso, TL; DR. Apenas faça:

bind 0.0.0.0:80
bind :::80

e vai funcionar:

# netstat -an|grep "*.80"
tcp          0      0  *.80                   *.*                    LISTEN
tcp6         0      0  *.80                   *.*                    LISTEN
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.