私には、configureにしたいhaproxyに結合するtcp
だけでなく、tcp6
すべてのインターフェイス上のソケット(すなわち、0.0.0.0:80
と:::80
)。
次の設定でこの目標を達成できました。
listen web
bind :80 v4v6
bind :::80 v6only
これより短い方法はありますか?
私はそれが異なる振る舞いをすると予想しますが、v4v6
キーワードはhaproxyをv4ソケットのみにバインドします。
私には、configureにしたいhaproxyに結合するtcp
だけでなく、tcp6
すべてのインターフェイス上のソケット(すなわち、0.0.0.0:80
と:::80
)。
次の設定でこの目標を達成できました。
listen web
bind :80 v4v6
bind :::80 v6only
これより短い方法はありますか?
私はそれが異なる振る舞いをすると予想しますが、v4v6
キーワードはhaproxyをv4ソケットのみにバインドします。
回答:
同じポートでIPv6とIPv4をリッスンするには、次を使用します。
bind :::80 v4v6
確かに、これは正しいように思われる直感的な推測でした...しかし、単に「幸運な」推測を答えとして投稿するのではなく、うまくいくとしても、それを正当化する必要があるようです。
v4v6キーワードは、haproxyをv4ソケットのみにバインドします。
私の最初の直観は、このソケットがIPv4のみでリッスンする原因v4v6
ではなく、むしろ:80
(より正確には、IPアドレスをまったく使用せず、ポート番号のみを使用する)使用であるということでした。
これは、ドキュメントで確認されているようですbind
:
address
オプションであり、ホスト名、IPv4アドレス、IPv6アドレス、または'*'
。フロントエンドがリッスンするアドレスを指定します。設定されていない場合、システムのすべてのIPv4アドレスがリスニングされます。同じことが適用される'*'
か、システムの特別なアドレス「0.0.0.0
」。同等のIPv6は「::」です。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#4.2-bind(強調を追加)
したがって、次の3つの形式はすべて同等であり、すべてHAProxyによってIPv4として解釈されます。
bind :80
bind *:80
bind 0.0.0.0:80
次に、上記のバインドステートメントの1つを拡張してIPv6でリッスンするために使用できる可能性があることv4v6
を示すために、ドキュメント内に1つの文を単独で読むことができv4v6
ます...
v4v6
これは、デフォルトアドレスを使用するときに、ソケットをIPv4とIPv6の両方にバインドするために使用されます。
...うーん、しかし、これは実際には「v6のデフォルトアドレス」(::
)を意味すると思う...
デフォルトでのみIPv6にバインドするシステムでは、そうすることが必要な場合があります。
...そして今、私はそれをさらに疑っています...
非IPv6ソケットには効果がなく、
v6only
オプションによってオーバーライドされます。http://cbonte.github.io/haproxy-dconv/configuration-1.6.html#5.1
そのため、IPv6のデフォルトリスンアドレスを指定v4v6
するbind
ディレクティブのみを変更しているように見えます。これは::
(3番目:
はアドレスとポートの間の区切り文字です)、他の場合は無視されます。
bind :::80 v4v6
?