Lega a tutte le interfacce per IPv4 e IPv6 in haproxy

Voglio configurare haproxy per legarsi a una tcp così come tcp6 socket su tutte le interfacce (cioè 0.0.0.0:80 e :::80 ).

Sono riuscito a raggiungere questo objective con le seguenti impostazioni:

  • Forza la selezione di server disabilitati quando utilizza la persistenza di session basato su cookie?
  • Servire 404 da HAProxy quando non corrispondono gli acls
  • Comune strategie di contropressione per i servizi sotto carico elevato
  • Esiste un equivalente di Windows dell'HAProxy per il bilanciamento del carico virtuale?
  • c'è un standard per incatenare x-forwarded-for headers?
  • HAProxy - come aggiungere il client ip in X-Client-IP e X-Forwarded-For intestazioni?
  •  listen web bind :80 v4v6 bind :::80 v6only 

    C'è un modo più corto di questo?

    Mentre mi aspetto che si comporti in modo diverso, la parola chiave v4v6 rende haproxy legata a un solo socket v4.

    2 Solutions collect form web for “Lega a tutte le interfacce per IPv4 e IPv6 in haproxy”

    Per ascoltare la stessa port per IPv6 e IPv4, utilizzare questo:

     bind :::80 v4v6 

    Certamente, questa è stata un'idea intuitiva che sembra essere stata corretta … ma piuttosto che postare una congettura "fortunata" come la risposta, anche se funziona, sembra che dovrei giustificarlo.

    la parola chiave v4v6 rende haproxy legata a un solo socket v4.

    La mia prima intuizione era che non è v4v6 ma piuttosto l'uso di :80 (o, più precisamente, l'uso di nessun indirizzo IP a tutti, solo un numero di port) che causa questa socket per ascoltare solo su IPv4.

    Questo sembra essere confermato nei documenti per il bind :

    address è facoltativo e può essere un nome host, un indirizzo IPv4, un indirizzo IPv6 o '*' . Esso designa l'indirizzo che l'interface si ascolterà. Se distriggersto, tutti gli indirizzi IPv4 del sistema verranno ascoltati. Lo stesso vale per '*' o l'indirizzo speciale del sistema " 0.0.0.0 ". L'equivalente IPv6 è '::'.

    http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind (enfasi aggiunta)

    Quindi le tre forms seguenti sono tutte equivalenti e tutte sono interpretate come IPv4 da HAProxy:

     bind :80 bind *:80 bind 0.0.0.0:80 

    Successivamente, è presente una frase nei documenti per cui v4v6 potrebbe essere letto in isolamento per indicare che v4v6 potrebbe essere utilizzabile per estendere una delle dichiarazioni di v4v6 sopra per ascoltare su IPv6 …

    v4v6

    Viene utilizzato per associare un socket a IPv4 e IPv6 quando utilizza l'indirizzo predefinito.

    … hmmm, ma ho il sospetto che questo in realtà significa "l'indirizzo predefinito v6" ( ::

    A tal proposito è necessario talvolta che i sisthemes che legano IPv6 solo per impostazione predefinita.

    … e adesso, sospetto ancora di più …

    Non ha alcun effetto sulle prese non IPv6 e viene sovrascritta dall'opzione v6only .

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

    Quindi, sembra che v4v6 modifica solo le direttive di bind che specificano l'indirizzo di ascolto predefinito IPv6, che è :: (il terzo : è il separatore tra l'indirizzo e la port) e viene ignorato per gli altri.

    La risposta accettata non funziona per me, alless con haproxy-1.6.11p0 su OpenBSD. Inoltre, TL; DR. Basta fare:

     bind 0.0.0.0:80 bind :::80 

    e functionrà:

     # netstat -an|grep "*.80" tcp 0 0 *.80 *.* LISTEN tcp6 0 0 *.80 *.* LISTEN 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.