Aby nasłuchiwać na tym samym porcie dla IPv6 i IPv4, użyj tego:
bind :::80 v4v6
Trzeba przyznać, że było to intuicyjne przypuszczenie, które wydaje się poprawne ... ale zamiast po prostu „zgadnąć” jako odpowiedź, mimo że działa, wydaje się, że powinienem to uzasadnić.
słowo kluczowe v4v6 powoduje, że haproxy wiąże się tylko z gniazdem v4.
Moją pierwszą intuicją było to, że to nie v4v6
użycie, a raczej :80
użycie w ogóle braku adresu IP, a jedynie numeru portu, powoduje, że gniazdo nasłuchuje tylko na IPv4.
Wydaje się to potwierdzone w dokumentacji dla bind
:
address
jest opcjonalny i może być nazwą hosta, adresem IPv4, adresem IPv6 lub '*'
. Określa adres, na którym nasłuchuje frontend. Jeśli nie jest ustawiony, wszystkie adresy IPv4 systemu będą nasłuchiwane. To samo dotyczy '*'
specjalnego adresu systemu „ 0.0.0.0
”. Odpowiednikiem IPv6 jest „::”.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (wyróżnienie dodane)
Zatem następujące trzy formy są równoważne i wszystkie są interpretowane przez HAProxy jako IPv4:
bind :80
bind *:80
bind 0.0.0.0:80
Następnie w dokumentach znajduje się jedno zdanie, v4v6
które można odczytać osobno, aby wskazać, v4v6
że użyteczne może być rozszerzenie jednej z powyższych instrukcji wiązania w celu nasłuchiwania na IPv6 ...
v4v6
Służy do wiązania gniazda zarówno z IPv4, jak i IPv6, gdy używa adresu domyślnego.
... hmmm, ale podejrzewam, że to faktycznie oznacza "domyślny adres v6" ( ::
) ...
Jest to czasem konieczne w systemach, które domyślnie wiążą się z IPv6.
... a teraz podejrzewam, że jeszcze bardziej ...
Nie ma to wpływu na gniazda inne niż IPv6 i jest zastępowane przez v6only
opcję.
http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
Wygląda więc na to, że v4v6
modyfikuje tylko bind
dyrektywy, które określają domyślny adres nasłuchiwania IPv6, który jest ::
(trzeci :
to separator między adresem a portem) i jest ignorowany dla innych.
bind :::80 v4v6
?