Chcę skonfigurować haproxy, aby łączył się tcp
zarówno z tcp6
gniazdem jak i gniazdem na wszystkich interfejsach (tj. 0.0.0.0:80
I :::80
).
Udało mi się osiągnąć ten cel przy użyciu następujących ustawień:
listen web
bind :80 v4v6
bind :::80 v6only
Czy jest jakaś krótsza droga?
Chociaż spodziewam się, że będzie się zachowywać inaczej, v4v6
słowo kluczowe powoduje, że haproxy wiąże się tylko z gniazdem v4.
bind :::80 v4v6
?Odpowiedzi:
Aby nasłuchiwać na tym samym porcie dla IPv6 i IPv4, użyj tego:
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ć.
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
:Zatem następujące trzy formy są równoważne i wszystkie są interpretowane przez HAProxy jako IPv4:
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 ...... hmmm, ale podejrzewam, że to faktycznie oznacza "domyślny adres v6" (
::
) ...... a teraz podejrzewam, że jeszcze bardziej ...
Wygląda więc na to, że
v4v6
modyfikuje tylkobind
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.źródło
Przyjęta odpowiedź nie działa dla mnie, przynajmniej w przypadku haproxy-1.6.11p0 na OpenBSD. Również TL; DR. Po prostu zrób:
i będzie działać:
źródło