Pour écouter sur le même port pour IPv6 et IPv4, utilisez ceci:
bind :::80 v4v6
Certes, c'était une supposition intuitive qui semble avoir été correcte ... mais plutôt que de simplement poster une supposition "chanceuse" comme réponse, même si cela fonctionne, il semble que je devrais la justifier.
le mot clé v4v6 fait que haproxy ne se lie qu'à un socket v4.
Ma première intuition était que ce n'est pas v4v6
mais plutôt l'utilisation :80
(ou, plus précisément, l'utilisation d'aucune adresse IP du tout, juste un numéro de port) qui fait que cette socket n'écoute que sur IPv4.
Cela semble être confirmé dans les documents pour bind
:
address
est facultatif et peut être un nom d'hôte, une adresse IPv4, une adresse IPv6 ou '*'
. Il désigne l'adresse que le frontend écoutera. S'il n'est pas défini, toutes les adresses IPv4 du système seront écoutées. Il en sera de même pour '*'
l'adresse spéciale du système " 0.0.0.0
". L'équivalent IPv6 est '::'.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (soulignement ajouté)
Ainsi, les trois formes suivantes sont toutes équivalentes et sont toutes interprétées comme étant IPv4 par HAProxy:
bind :80
bind *:80
bind 0.0.0.0:80
Ensuite, il y a une phrase dans les documents pour v4v6
pourrait être lue isolément pour indiquer qu'il v4v6
pourrait être utile d'étendre l'une des instructions de liaison ci-dessus pour écouter sur IPv6 ...
v4v6
Il est utilisé pour lier un socket à la fois à IPv4 et IPv6 lorsqu'il utilise l'adresse par défaut.
... hmmm, mais je soupçonne que cela signifie en fait "l'adresse par défaut v6" ( ::
) ...
Cela est parfois nécessaire sur les systèmes qui ne se lient à IPv6 que par défaut.
... et maintenant, je le soupçonne encore plus ...
Il n'a aucun effet sur les sockets non IPv6 et est remplacé par l' v6only
option.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Ainsi, il semble que v4v6
ne modifie bind
que les directives qui spécifient l'adresse d'écoute IPv6 par défaut, qui est ::
(la 3e :
est le séparateur entre l'adresse et le port), et est ignorée pour les autres.
bind :::80 v4v6
?